From 8b502754ed15cb0cb75666f14c3e4229cb680e63 Mon Sep 17 00:00:00 2001 From: Liqing Qin Date: Fri, 11 Oct 2024 14:26:20 +0200 Subject: [PATCH] add niosII software --- FPGA_firmware/hit20v3.qar | Bin 0 -> 4332398 bytes FPGA_nios/.gitignore | 37 + FPGA_nios/hit_pat/.cproject | 91 + FPGA_nios/hit_pat/.force_relink | 0 FPGA_nios/hit_pat/create-this-app | 131 + FPGA_nios/hit_pat/hit_pat.objdump | 106020 +++++++++++++++ FPGA_nios/hit_pat/inc/control.h | 39 + FPGA_nios/hit_pat/inc/dev_commands.h | 136 + FPGA_nios/hit_pat/inc/network_utilities.h | 49 + FPGA_nios/hit_pat/inc/sensor.h | 67 + FPGA_nios/hit_pat/inc/socket_server.h | 144 + FPGA_nios/hit_pat/inc/udpgen.h | 54 + FPGA_nios/hit_pat/inc/utils.h | 34 + .../hit_pat/mem_init/hdl_sim/onchip_flash.dat | 0 .../hit_pat/mem_init/hdl_sim/onchip_flash.sym | 1138 + .../hdl_sim/q_sys_calibration_ram.dat | 0 .../hdl_sim/q_sys_calibration_ram.sym | 1138 + .../hdl_sim/q_sys_descriptor_memory.dat | 0 .../hdl_sim/q_sys_descriptor_memory.sym | 1138 + FPGA_nios/hit_pat/mem_init/meminit.qip | 1 + FPGA_nios/hit_pat/mem_init/meminit.spd | 10 + FPGA_nios/hit_pat/onchip_flash.flash | 2 + FPGA_nios/hit_pat/readme.txt | 101 + FPGA_nios/hit_pat/src/control.c | 390 + FPGA_nios/hit_pat/src/main.c | 161 + FPGA_nios/hit_pat/src/network_utilities.c | 456 + FPGA_nios/hit_pat/src/sensor.c | 53 + FPGA_nios/hit_pat/src/socket_server.c | 332 + FPGA_nios/hit_pat/src/tse_my_system.c | 12 + FPGA_nios/hit_pat/src/udpgen.c | 51 + FPGA_nios/hit_pat/src/utils.c | 131 + FPGA_nios/hit_pat_bsp/.cproject | 65 + FPGA_nios/hit_pat_bsp/HAL/inc/alt_types.h | 54 + .../HAL/inc/altera_nios2_gen2_irq.h | 80 + FPGA_nios/hit_pat_bsp/HAL/inc/includes.h | 65 + FPGA_nios/hit_pat_bsp/HAL/inc/io.h | 81 + FPGA_nios/hit_pat_bsp/HAL/inc/nios2.h | 300 + FPGA_nios/hit_pat_bsp/HAL/inc/os_cpu.h | 145 + .../hit_pat_bsp/HAL/inc/priv/alt_alarm.h | 101 + .../hit_pat_bsp/HAL/inc/priv/alt_busy_sleep.h | 35 + .../hit_pat_bsp/HAL/inc/priv/alt_dev_llist.h | 77 + .../inc/priv/alt_exception_handler_registry.h | 39 + FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_file.h | 179 + .../HAL/inc/priv/alt_iic_isr_register.h | 39 + .../hit_pat_bsp/HAL/inc/priv/alt_irq_table.h | 59 + .../hit_pat_bsp/HAL/inc/priv/alt_legacy_irq.h | 158 + .../hit_pat_bsp/HAL/inc/priv/alt_no_error.h | 77 + .../HAL/inc/priv/nios2_gmon_data.h | 47 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_alarm.h | 126 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_cache.h | 117 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_debug.h | 45 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dev.h | 115 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma.h | 226 + .../hit_pat_bsp/HAL/inc/sys/alt_dma_dev.h | 200 + .../hit_pat_bsp/HAL/inc/sys/alt_driver.h | 168 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_errno.h | 87 + .../hit_pat_bsp/HAL/inc/sys/alt_exceptions.h | 166 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash.h | 181 + .../hit_pat_bsp/HAL/inc/sys/alt_flash_dev.h | 100 + .../hit_pat_bsp/HAL/inc/sys/alt_flash_types.h | 64 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq.h | 245 + .../hit_pat_bsp/HAL/inc/sys/alt_irq_entry.h | 39 + .../HAL/inc/sys/alt_license_reminder_ucosii.h | 77 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_llist.h | 123 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_load.h | 78 + .../hit_pat_bsp/HAL/inc/sys/alt_log_printf.h | 354 + .../hit_pat_bsp/HAL/inc/sys/alt_set_args.h | 71 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sim.h | 91 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stack.h | 126 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stdio.h | 66 + .../hit_pat_bsp/HAL/inc/sys/alt_sys_init.h | 62 + .../HAL/inc/sys/alt_sys_wrappers.h | 100 + .../hit_pat_bsp/HAL/inc/sys/alt_timestamp.h | 60 + .../hit_pat_bsp/HAL/inc/sys/alt_warning.h | 75 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/ioctl.h | 90 + FPGA_nios/hit_pat_bsp/HAL/inc/sys/termios.h | 181 + .../hit_pat_bsp/HAL/src/alt_alarm_start.c | 112 + .../hit_pat_bsp/HAL/src/alt_busy_sleep.c | 133 + FPGA_nios/hit_pat_bsp/HAL/src/alt_close.c | 103 + .../hit_pat_bsp/HAL/src/alt_dcache_flush.c | 70 + .../HAL/src/alt_dcache_flush_all.c | 51 + .../HAL/src/alt_dcache_flush_no_writeback.c | 69 + FPGA_nios/hit_pat_bsp/HAL/src/alt_dev.c | 149 + .../HAL/src/alt_dev_llist_insert.c | 59 + .../hit_pat_bsp/HAL/src/alt_dma_rxchan_open.c | 63 + .../hit_pat_bsp/HAL/src/alt_dma_txchan_open.c | 63 + FPGA_nios/hit_pat_bsp/HAL/src/alt_do_ctors.c | 64 + FPGA_nios/hit_pat_bsp/HAL/src/alt_do_dtors.c | 64 + .../hit_pat_bsp/HAL/src/alt_ecc_fatal_entry.S | 102 + .../HAL/src/alt_ecc_fatal_exception.c | 75 + FPGA_nios/hit_pat_bsp/HAL/src/alt_environ.c | 42 + FPGA_nios/hit_pat_bsp/HAL/src/alt_errno.c | 44 + .../hit_pat_bsp/HAL/src/alt_exception_entry.S | 402 + .../HAL/src/alt_exception_muldiv.S | 583 + .../hit_pat_bsp/HAL/src/alt_exception_trap.S | 95 + FPGA_nios/hit_pat_bsp/HAL/src/alt_execve.c | 55 + FPGA_nios/hit_pat_bsp/HAL/src/alt_exit.c | 71 + FPGA_nios/hit_pat_bsp/HAL/src/alt_fcntl.c | 101 + FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_lock.c | 75 + FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_unlock.c | 56 + FPGA_nios/hit_pat_bsp/HAL/src/alt_find_dev.c | 88 + FPGA_nios/hit_pat_bsp/HAL/src/alt_find_file.c | 89 + FPGA_nios/hit_pat_bsp/HAL/src/alt_flash_dev.c | 69 + FPGA_nios/hit_pat_bsp/HAL/src/alt_fork.c | 57 + FPGA_nios/hit_pat_bsp/HAL/src/alt_fs_reg.c | 75 + FPGA_nios/hit_pat_bsp/HAL/src/alt_fstat.c | 128 + FPGA_nios/hit_pat_bsp/HAL/src/alt_get_fd.c | 105 + FPGA_nios/hit_pat_bsp/HAL/src/alt_getchar.c | 70 + FPGA_nios/hit_pat_bsp/HAL/src/alt_getpid.c | 47 + FPGA_nios/hit_pat_bsp/HAL/src/alt_gettod.c | 125 + FPGA_nios/hit_pat_bsp/HAL/src/alt_gmon.c | 272 + .../hit_pat_bsp/HAL/src/alt_icache_flush.c | 84 + .../HAL/src/alt_icache_flush_all.c | 46 + FPGA_nios/hit_pat_bsp/HAL/src/alt_iic.c | 106 + .../HAL/src/alt_iic_isr_register.c | 104 + .../HAL/src/alt_instruction_exception_entry.c | 206 + .../src/alt_instruction_exception_register.c | 82 + .../hit_pat_bsp/HAL/src/alt_io_redirect.c | 98 + FPGA_nios/hit_pat_bsp/HAL/src/alt_ioctl.c | 170 + FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_entry.S | 108 + .../hit_pat_bsp/HAL/src/alt_irq_handler.c | 169 + .../hit_pat_bsp/HAL/src/alt_irq_register.c | 102 + FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_vars.c | 47 + FPGA_nios/hit_pat_bsp/HAL/src/alt_isatty.c | 125 + FPGA_nios/hit_pat_bsp/HAL/src/alt_kill.c | 121 + FPGA_nios/hit_pat_bsp/HAL/src/alt_link.c | 56 + FPGA_nios/hit_pat_bsp/HAL/src/alt_load.c | 99 + FPGA_nios/hit_pat_bsp/HAL/src/alt_log_macro.S | 60 + .../hit_pat_bsp/HAL/src/alt_log_printf.c | 479 + FPGA_nios/hit_pat_bsp/HAL/src/alt_lseek.c | 117 + FPGA_nios/hit_pat_bsp/HAL/src/alt_main.c | 161 + FPGA_nios/hit_pat_bsp/HAL/src/alt_mcount.S | 198 + FPGA_nios/hit_pat_bsp/HAL/src/alt_open.c | 173 + FPGA_nios/hit_pat_bsp/HAL/src/alt_printf.c | 132 + FPGA_nios/hit_pat_bsp/HAL/src/alt_putchar.c | 68 + .../hit_pat_bsp/HAL/src/alt_putcharbuf.c | 80 + FPGA_nios/hit_pat_bsp/HAL/src/alt_putstr.c | 64 + FPGA_nios/hit_pat_bsp/HAL/src/alt_read.c | 125 + .../hit_pat_bsp/HAL/src/alt_release_fd.c | 54 + .../hit_pat_bsp/HAL/src/alt_remap_cached.c | 55 + .../hit_pat_bsp/HAL/src/alt_remap_uncached.c | 54 + FPGA_nios/hit_pat_bsp/HAL/src/alt_rename.c | 55 + FPGA_nios/hit_pat_bsp/HAL/src/alt_sbrk.c | 136 + FPGA_nios/hit_pat_bsp/HAL/src/alt_settod.c | 96 + .../HAL/src/alt_software_exception.S | 53 + FPGA_nios/hit_pat_bsp/HAL/src/alt_stat.c | 59 + FPGA_nios/hit_pat_bsp/HAL/src/alt_tick.c | 149 + FPGA_nios/hit_pat_bsp/HAL/src/alt_times.c | 71 + .../hit_pat_bsp/HAL/src/alt_uncached_free.c | 53 + .../hit_pat_bsp/HAL/src/alt_uncached_malloc.c | 77 + FPGA_nios/hit_pat_bsp/HAL/src/alt_unlink.c | 55 + FPGA_nios/hit_pat_bsp/HAL/src/alt_usleep.c | 104 + FPGA_nios/hit_pat_bsp/HAL/src/alt_wait.c | 52 + FPGA_nios/hit_pat_bsp/HAL/src/alt_write.c | 138 + .../HAL/src/altera_nios2_gen2_irq.c | 37 + FPGA_nios/hit_pat_bsp/HAL/src/crt0.S | 521 + FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_a.S | 270 + FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_c.c | 243 + .../Micrium_45_Day_Evaluation_License.pdf | Bin 0 -> 96321 bytes .../hit_pat_bsp/UCOSII/inc/os/alt_flag.h | 87 + .../hit_pat_bsp/UCOSII/inc/os/alt_hooks.h | 69 + FPGA_nios/hit_pat_bsp/UCOSII/inc/os/alt_sem.h | 85 + FPGA_nios/hit_pat_bsp/UCOSII/inc/os_cfg.h | 65 + .../UCOSII/inc/priv/alt_flag_ucosii.h | 109 + .../UCOSII/inc/priv/alt_sem_ucosii.h | 82 + FPGA_nios/hit_pat_bsp/UCOSII/inc/ucos_ii.h | 1930 + .../hit_pat_bsp/UCOSII/license-ucosii.txt | 20 + .../hit_pat_bsp/UCOSII/src/alt_env_lock.c | 122 + .../hit_pat_bsp/UCOSII/src/alt_malloc_lock.c | 147 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_core.c | 2018 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_dbg.c | 312 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_flag.c | 1174 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_mbox.c | 629 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_mem.c | 434 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_mutex.c | 715 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_q.c | 868 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_sem.c | 609 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_task.c | 1095 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_time.c | 268 + FPGA_nios/hit_pat_bsp/UCOSII/src/os_tmr.c | 1116 + FPGA_nios/hit_pat_bsp/alt_sys_init.c | 115 + FPGA_nios/hit_pat_bsp/create-this-bsp | 52 + .../drivers/inc/altera_avalon_pio_regs.h | 67 + .../drivers/inc/altera_avalon_sysid_qsys.h | 60 + .../inc/altera_avalon_sysid_qsys_regs.h | 42 + .../drivers/inc/altera_avalon_timer.h | 193 + .../drivers/inc/altera_avalon_timer_regs.h | 202 + .../drivers/inc/altera_avalon_tse.h | 1023 + .../inc/altera_avalon_tse_system_info.h | 352 + .../drivers/inc/altera_avalon_uart.h | 319 + .../drivers/inc/altera_avalon_uart_fd.h | 143 + .../drivers/inc/altera_avalon_uart_regs.h | 137 + .../hit_pat_bsp/drivers/inc/altera_eth_tse.h | 45 + .../drivers/inc/altera_eth_tse_regs.h | 735 + .../inc/altera_generic_quad_spi_controller.h | 126 + .../altera_generic_quad_spi_controller_regs.h | 260 + .../hit_pat_bsp/drivers/inc/altera_msgdma.h | 512 + .../drivers/inc/altera_msgdma_csr_regs.h | 175 + .../inc/altera_msgdma_descriptor_regs.h | 163 + .../inc/altera_msgdma_prefetcher_regs.h | 292 + .../drivers/inc/altera_msgdma_response_regs.h | 70 + .../drivers/inc/altera_onchip_flash.h | 167 + .../drivers/inc/altera_onchip_flash_regs.h | 241 + .../inc/iniche/altera_eth_tse_iniche.h | 250 + .../drivers/inc/iniche/ins_tse_mac.h | 88 + .../drivers/src/altera_avalon_sysid_qsys.c | 82 + .../drivers/src/altera_avalon_timer_sc.c | 110 + .../drivers/src/altera_avalon_timer_ts.c | 143 + .../drivers/src/altera_avalon_timer_vars.c | 45 + .../drivers/src/altera_avalon_tse.c | 2339 + .../src/altera_avalon_tse_system_info.c | 61 + .../drivers/src/altera_avalon_uart_fd.c | 100 + .../drivers/src/altera_avalon_uart_init.c | 312 + .../drivers/src/altera_avalon_uart_ioctl.c | 153 + .../drivers/src/altera_avalon_uart_read.c | 240 + .../drivers/src/altera_avalon_uart_write.c | 232 + .../src/altera_generic_quad_spi_controller.c | 797 + .../hit_pat_bsp/drivers/src/altera_msgdma.c | 1806 + .../drivers/src/altera_onchip_flash.c | 590 + .../drivers/src/iniche/ins_tse_mac.c | 911 + .../hit_pat_bsp/iniche/inc/alt_iniche_dev.h | 215 + .../hit_pat_bsp/iniche/inc/os/alt_syscall.h | 77 + .../iniche/src/allports/allports.c | 947 + .../iniche/src/allports/timeouts.c | 360 + .../hit_pat_bsp/iniche/src/allports/tk_misc.c | 358 + .../hit_pat_bsp/iniche/src/alt_iniche_close.c | 61 + .../hit_pat_bsp/iniche/src/alt_iniche_dev.c | 147 + .../hit_pat_bsp/iniche/src/alt_iniche_fcntl.c | 74 + .../hit_pat_bsp/iniche/src/alt_iniche_read.c | 64 + .../hit_pat_bsp/iniche/src/alt_iniche_write.c | 72 + .../hit_pat_bsp/iniche/src/autoip4/autoip.c | 383 + .../hit_pat_bsp/iniche/src/autoip4/autoip.h | 58 + .../hit_pat_bsp/iniche/src/autoip4/ds_app.h | 75 + .../hit_pat_bsp/iniche/src/autoip4/upnp.c | 651 + .../hit_pat_bsp/iniche/src/autoip4/upnp.h | 61 + .../hit_pat_bsp/iniche/src/autoip4/upnpmenu.c | 266 + .../hit_pat_bsp/iniche/src/ftp/ftpclnt.c | 2424 + .../hit_pat_bsp/iniche/src/ftp/ftpclnt.h | 244 + .../hit_pat_bsp/iniche/src/ftp/ftpcport.c | 205 + .../hit_pat_bsp/iniche/src/ftp/ftpcprn.c | 137 + .../hit_pat_bsp/iniche/src/ftp/ftpmenu.c | 971 + .../hit_pat_bsp/iniche/src/ftp/ftpport.h | 128 + .../hit_pat_bsp/iniche/src/ftp/ftpsport.c | 535 + FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.c | 2061 + FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.h | 159 + .../hit_pat_bsp/iniche/src/ftp/ftpssock.c | 759 + .../hit_pat_bsp/iniche/src/ftp/ftpsvfs.c | 233 + FPGA_nios/hit_pat_bsp/iniche/src/h/app_ping.h | 145 + FPGA_nios/hit_pat_bsp/iniche/src/h/arp.h | 127 + FPGA_nios/hit_pat_bsp/iniche/src/h/bsdsock.h | 154 + FPGA_nios/hit_pat_bsp/iniche/src/h/comline.h | 116 + .../hit_pat_bsp/iniche/src/h/crypt_api.h | 245 + .../hit_pat_bsp/iniche/src/h/crypt_port.h | 241 + FPGA_nios/hit_pat_bsp/iniche/src/h/dhcpclnt.h | 266 + FPGA_nios/hit_pat_bsp/iniche/src/h/dns.h | 216 + FPGA_nios/hit_pat_bsp/iniche/src/h/dnsport.h | 40 + FPGA_nios/hit_pat_bsp/iniche/src/h/ether.h | 94 + FPGA_nios/hit_pat_bsp/iniche/src/h/genlist.h | 142 + FPGA_nios/hit_pat_bsp/iniche/src/h/htcmptab.h | 123 + FPGA_nios/hit_pat_bsp/iniche/src/h/icmp.h | 207 + FPGA_nios/hit_pat_bsp/iniche/src/h/ifmap.h | 44 + FPGA_nios/hit_pat_bsp/iniche/src/h/in_utils.h | 131 + .../hit_pat_bsp/iniche/src/h/iniche_log.h | 52 + .../iniche/src/h/iniche_log_port.h | 18 + FPGA_nios/hit_pat_bsp/iniche/src/h/intimers.h | 40 + FPGA_nios/hit_pat_bsp/iniche/src/h/ip.h | 498 + FPGA_nios/hit_pat_bsp/iniche/src/h/ip6.h | 464 + FPGA_nios/hit_pat_bsp/iniche/src/h/libport.h | 72 + FPGA_nios/hit_pat_bsp/iniche/src/h/mbuf.h | 84 + FPGA_nios/hit_pat_bsp/iniche/src/h/memwrap.h | 24 + FPGA_nios/hit_pat_bsp/iniche/src/h/menu.h | 59 + FPGA_nios/hit_pat_bsp/iniche/src/h/msring.h | 37 + FPGA_nios/hit_pat_bsp/iniche/src/h/nameser.h | 427 + FPGA_nios/hit_pat_bsp/iniche/src/h/net.h | 478 + FPGA_nios/hit_pat_bsp/iniche/src/h/netbuf.h | 177 + .../hit_pat_bsp/iniche/src/h/nios2/ipport.h | 872 + FPGA_nios/hit_pat_bsp/iniche/src/h/nptcp.h | 348 + FPGA_nios/hit_pat_bsp/iniche/src/h/nptypes.h | 80 + FPGA_nios/hit_pat_bsp/iniche/src/h/ns.h | 374 + FPGA_nios/hit_pat_bsp/iniche/src/h/ns_debug.h | 84 + FPGA_nios/hit_pat_bsp/iniche/src/h/nvfsio.h | 79 + FPGA_nios/hit_pat_bsp/iniche/src/h/nvparms.h | 238 + FPGA_nios/hit_pat_bsp/iniche/src/h/pmtu.h | 81 + FPGA_nios/hit_pat_bsp/iniche/src/h/ppp_port.h | 151 + FPGA_nios/hit_pat_bsp/iniche/src/h/profiler.h | 118 + FPGA_nios/hit_pat_bsp/iniche/src/h/q.h | 111 + FPGA_nios/hit_pat_bsp/iniche/src/h/snmp_vie.h | 1048 + FPGA_nios/hit_pat_bsp/iniche/src/h/snmpport.h | 257 + FPGA_nios/hit_pat_bsp/iniche/src/h/sockcall.h | 123 + FPGA_nios/hit_pat_bsp/iniche/src/h/socket.h | 201 + FPGA_nios/hit_pat_bsp/iniche/src/h/socket6.h | 87 + FPGA_nios/hit_pat_bsp/iniche/src/h/sockvar.h | 249 + FPGA_nios/hit_pat_bsp/iniche/src/h/syslog.h | 162 + FPGA_nios/hit_pat_bsp/iniche/src/h/task.h | 81 + FPGA_nios/hit_pat_bsp/iniche/src/h/tcp.h | 96 + FPGA_nios/hit_pat_bsp/iniche/src/h/tcpapp.h | 36 + FPGA_nios/hit_pat_bsp/iniche/src/h/tcpport.h | 326 + FPGA_nios/hit_pat_bsp/iniche/src/h/tk_crnos.h | 147 + FPGA_nios/hit_pat_bsp/iniche/src/h/tk_ntask.h | 67 + FPGA_nios/hit_pat_bsp/iniche/src/h/udp.h | 153 + FPGA_nios/hit_pat_bsp/iniche/src/h/userpass.h | 53 + FPGA_nios/hit_pat_bsp/iniche/src/h/vfsfiles.h | 336 + FPGA_nios/hit_pat_bsp/iniche/src/h/webport.h | 76 + FPGA_nios/hit_pat_bsp/iniche/src/ip/et_arp.c | 1223 + FPGA_nios/hit_pat_bsp/iniche/src/ip/icmp.c | 633 + FPGA_nios/hit_pat_bsp/iniche/src/ip/iface.c | 884 + FPGA_nios/hit_pat_bsp/iniche/src/ip/ip.c | 1407 + .../hit_pat_bsp/iniche/src/ip/ip_reasm.c | 1343 + .../hit_pat_bsp/iniche/src/ip/ip_reasm.h | 130 + FPGA_nios/hit_pat_bsp/iniche/src/ip/ipdemux.c | 673 + FPGA_nios/hit_pat_bsp/iniche/src/ip/ipmc.c | 242 + FPGA_nios/hit_pat_bsp/iniche/src/ip/ipnet.c | 727 + FPGA_nios/hit_pat_bsp/iniche/src/ip/ipport.c | 127 + FPGA_nios/hit_pat_bsp/iniche/src/ip/ipraw.c | 348 + FPGA_nios/hit_pat_bsp/iniche/src/ip/iproute.c | 725 + FPGA_nios/hit_pat_bsp/iniche/src/ip/ipstart.c | 311 + FPGA_nios/hit_pat_bsp/iniche/src/ip/pmtu.c | 407 + FPGA_nios/hit_pat_bsp/iniche/src/ip/rtbtree.c | 884 + FPGA_nios/hit_pat_bsp/iniche/src/ip/udp.c | 694 + FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp.c | 164 + FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp.h | 117 + FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp2.c | 431 + FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp2.h | 39 + .../hit_pat_bsp/iniche/src/ipmc/igmp_cmn.c | 747 + .../hit_pat_bsp/iniche/src/ipmc/igmp_cmn.h | 189 + FPGA_nios/hit_pat_bsp/iniche/src/ipmc/ipopt.c | 435 + .../hit_pat_bsp/iniche/src/ipmc/u_mctest.c | 291 + .../hit_pat_bsp/iniche/src/misclib/app_ping.c | 1140 + .../hit_pat_bsp/iniche/src/misclib/bsdsock.c | 645 + .../hit_pat_bsp/iniche/src/misclib/cksum.c | 233 + .../hit_pat_bsp/iniche/src/misclib/cu_srv.c | 613 + .../hit_pat_bsp/iniche/src/misclib/dhcsetup.c | 184 + .../hit_pat_bsp/iniche/src/misclib/genlist.c | 904 + .../hit_pat_bsp/iniche/src/misclib/in_utils.c | 619 + .../iniche/src/misclib/iniche_log.c | 326 + .../iniche/src/misclib/iniche_qsort.c | 174 + .../iniche/src/misclib/localtime.c | 115 + .../hit_pat_bsp/iniche/src/misclib/memdev.c | 396 + .../hit_pat_bsp/iniche/src/misclib/memio.c | 397 + .../hit_pat_bsp/iniche/src/misclib/memwrap.c | 222 + .../hit_pat_bsp/iniche/src/misclib/menulib.c | 430 + .../hit_pat_bsp/iniche/src/misclib/menus.c | 445 + .../hit_pat_bsp/iniche/src/misclib/msring.c | 131 + .../hit_pat_bsp/iniche/src/misclib/netmain.c | 582 + .../hit_pat_bsp/iniche/src/misclib/nextcarg.c | 74 + .../hit_pat_bsp/iniche/src/misclib/nrmenus.c | 2126 + .../hit_pat_bsp/iniche/src/misclib/nvfsio.c | 329 + .../hit_pat_bsp/iniche/src/misclib/nvparms.c | 1367 + .../hit_pat_bsp/iniche/src/misclib/parseip.c | 597 + .../hit_pat_bsp/iniche/src/misclib/pcycles.c | 858 + .../hit_pat_bsp/iniche/src/misclib/profiler.c | 539 + .../hit_pat_bsp/iniche/src/misclib/rawiptst.c | 1298 + .../hit_pat_bsp/iniche/src/misclib/reshost.c | 127 + .../hit_pat_bsp/iniche/src/misclib/rfsim.c | 249 + .../hit_pat_bsp/iniche/src/misclib/rttest.c | 744 + .../hit_pat_bsp/iniche/src/misclib/soperr.c | 77 + .../hit_pat_bsp/iniche/src/misclib/strilib.c | 142 + .../hit_pat_bsp/iniche/src/misclib/strlib.c | 239 + .../hit_pat_bsp/iniche/src/misclib/strtol.c | 260 + .../hit_pat_bsp/iniche/src/misclib/syslog.c | 1811 + .../hit_pat_bsp/iniche/src/misclib/task.c | 488 + .../hit_pat_bsp/iniche/src/misclib/tcp_echo.c | 1147 + .../hit_pat_bsp/iniche/src/misclib/tcpcksum.c | 114 + .../hit_pat_bsp/iniche/src/misclib/testmenu.c | 519 + .../hit_pat_bsp/iniche/src/misclib/tk_crnos.c | 284 + .../hit_pat_bsp/iniche/src/misclib/ttyio.c | 850 + .../hit_pat_bsp/iniche/src/misclib/udp_echo.c | 751 + .../hit_pat_bsp/iniche/src/misclib/userpass.c | 237 + .../hit_pat_bsp/iniche/src/net/dhcpclnt.c | 1507 + .../hit_pat_bsp/iniche/src/net/dhcputil.c | 59 + .../hit_pat_bsp/iniche/src/net/dnsclnt.c | 3628 + .../hit_pat_bsp/iniche/src/net/heapbuf.h | 71 + FPGA_nios/hit_pat_bsp/iniche/src/net/ifmap.c | 170 + .../hit_pat_bsp/iniche/src/net/macloop.c | 577 + FPGA_nios/hit_pat_bsp/iniche/src/net/ping.c | 140 + .../hit_pat_bsp/iniche/src/net/pktalloc.c | 1024 + FPGA_nios/hit_pat_bsp/iniche/src/net/q.c | 178 + FPGA_nios/hit_pat_bsp/iniche/src/net/slip.c | 199 + FPGA_nios/hit_pat_bsp/iniche/src/net/slip.h | 80 + FPGA_nios/hit_pat_bsp/iniche/src/net/slipif.c | 494 + .../hit_pat_bsp/iniche/src/net/slipport.h | 62 + .../hit_pat_bsp/iniche/src/net/udp_open.c | 174 + .../hit_pat_bsp/iniche/src/nios2/asm_cksum.S | 168 + .../hit_pat_bsp/iniche/src/nios2/brdutils.c | 241 + .../hit_pat_bsp/iniche/src/nios2/osport.h | 156 + .../hit_pat_bsp/iniche/src/nios2/osportco.c | 481 + .../hit_pat_bsp/iniche/src/nios2/targnios.c | 887 + FPGA_nios/hit_pat_bsp/iniche/src/nios2/uart.h | 29 + FPGA_nios/hit_pat_bsp/iniche/src/tcp/in_pcb.c | 443 + FPGA_nios/hit_pat_bsp/iniche/src/tcp/in_pcb.h | 120 + FPGA_nios/hit_pat_bsp/iniche/src/tcp/nptcp.c | 1623 + .../hit_pat_bsp/iniche/src/tcp/protosw.h | 239 + .../hit_pat_bsp/iniche/src/tcp/rawsock.c | 438 + .../hit_pat_bsp/iniche/src/tcp/sockcall.c | 1150 + FPGA_nios/hit_pat_bsp/iniche/src/tcp/socket.c | 1431 + .../hit_pat_bsp/iniche/src/tcp/socket2.c | 903 + .../hit_pat_bsp/iniche/src/tcp/soselect.c | 465 + .../hit_pat_bsp/iniche/src/tcp/tcp_fsm.h | 111 + FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_in.c | 2184 + .../hit_pat_bsp/iniche/src/tcp/tcp_menu.c | 275 + .../hit_pat_bsp/iniche/src/tcp/tcp_out.c | 1103 + .../hit_pat_bsp/iniche/src/tcp/tcp_seq.h | 80 + .../hit_pat_bsp/iniche/src/tcp/tcp_subr.c | 569 + .../hit_pat_bsp/iniche/src/tcp/tcp_timr.c | 438 + .../hit_pat_bsp/iniche/src/tcp/tcp_timr.h | 147 + .../hit_pat_bsp/iniche/src/tcp/tcp_usr.c | 617 + .../hit_pat_bsp/iniche/src/tcp/tcp_var.h | 314 + .../hit_pat_bsp/iniche/src/tcp/tcp_zio.c | 272 + FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcpip.h | 111 + .../hit_pat_bsp/iniche/src/tcp/tcpport.c | 117 + .../hit_pat_bsp/iniche/src/tcp/tcpsack.c | 394 + .../hit_pat_bsp/iniche/src/tcp/udpsock.c | 560 + .../hit_pat_bsp/iniche/src/telnet/telerr.c | 90 + .../hit_pat_bsp/iniche/src/telnet/telmenu.c | 239 + .../hit_pat_bsp/iniche/src/telnet/telnet.c | 1145 + .../hit_pat_bsp/iniche/src/telnet/telnet.h | 350 + .../hit_pat_bsp/iniche/src/telnet/telparse.c | 685 + .../hit_pat_bsp/iniche/src/telnet/telport.c | 902 + .../hit_pat_bsp/iniche/src/telnet/telport.h | 220 + FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftp.h | 186 + .../hit_pat_bsp/iniche/src/tftp/tftpcli.c | 191 + .../hit_pat_bsp/iniche/src/tftp/tftpmenu.c | 276 + .../hit_pat_bsp/iniche/src/tftp/tftpport.c | 105 + .../hit_pat_bsp/iniche/src/tftp/tftpport.h | 69 + .../hit_pat_bsp/iniche/src/tftp/tftpsrv.c | 288 + .../hit_pat_bsp/iniche/src/tftp/tftpudp.c | 314 + .../hit_pat_bsp/iniche/src/tftp/tftputil.c | 858 + .../hit_pat_bsp/iniche/src/vfs/vfsfiles.c | 1932 + .../hit_pat_bsp/iniche/src/vfs/vfsport.c | 108 + .../hit_pat_bsp/iniche/src/vfs/vfsport.h | 45 + .../hit_pat_bsp/iniche/src/vfs/vfssync.c | 434 + .../hit_pat_bsp/iniche/src/vfs/vfsutil.c | 1190 + FPGA_nios/hit_pat_bsp/linker.h | 103 + FPGA_nios/hit_pat_bsp/linker.x | 402 + FPGA_nios/hit_pat_bsp/mem_init.mk | 455 + FPGA_nios/hit_pat_bsp/memory.gdb | 62 + FPGA_nios/hit_pat_bsp/public.mk | 443 + FPGA_nios/hit_pat_bsp/settings.bsp | 2001 + FPGA_nios/hit_pat_bsp/summary.html | 4294 + FPGA_nios/hit_pat_bsp/system.h | 822 + FPGA_nios/hit_pat_software.zip | Bin 0 -> 6600241 bytes 441 files changed, 253264 insertions(+) create mode 100644 FPGA_firmware/hit20v3.qar create mode 100644 FPGA_nios/.gitignore create mode 100644 FPGA_nios/hit_pat/.cproject create mode 100644 FPGA_nios/hit_pat/.force_relink create mode 100644 FPGA_nios/hit_pat/create-this-app create mode 100644 FPGA_nios/hit_pat/hit_pat.objdump create mode 100644 FPGA_nios/hit_pat/inc/control.h create mode 100644 FPGA_nios/hit_pat/inc/dev_commands.h create mode 100644 FPGA_nios/hit_pat/inc/network_utilities.h create mode 100644 FPGA_nios/hit_pat/inc/sensor.h create mode 100644 FPGA_nios/hit_pat/inc/socket_server.h create mode 100644 FPGA_nios/hit_pat/inc/udpgen.h create mode 100644 FPGA_nios/hit_pat/inc/utils.h create mode 100644 FPGA_nios/hit_pat/mem_init/hdl_sim/onchip_flash.dat create mode 100644 FPGA_nios/hit_pat/mem_init/hdl_sim/onchip_flash.sym create mode 100644 FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_calibration_ram.dat create mode 100644 FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_calibration_ram.sym create mode 100644 FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_descriptor_memory.dat create mode 100644 FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_descriptor_memory.sym create mode 100644 FPGA_nios/hit_pat/mem_init/meminit.qip create mode 100644 FPGA_nios/hit_pat/mem_init/meminit.spd create mode 100644 FPGA_nios/hit_pat/onchip_flash.flash create mode 100644 FPGA_nios/hit_pat/readme.txt create mode 100644 FPGA_nios/hit_pat/src/control.c create mode 100644 FPGA_nios/hit_pat/src/main.c create mode 100644 FPGA_nios/hit_pat/src/network_utilities.c create mode 100644 FPGA_nios/hit_pat/src/sensor.c create mode 100644 FPGA_nios/hit_pat/src/socket_server.c create mode 100644 FPGA_nios/hit_pat/src/tse_my_system.c create mode 100644 FPGA_nios/hit_pat/src/udpgen.c create mode 100644 FPGA_nios/hit_pat/src/utils.c create mode 100644 FPGA_nios/hit_pat_bsp/.cproject create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/alt_types.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/altera_nios2_gen2_irq.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/includes.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/io.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/nios2.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/os_cpu.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_alarm.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_busy_sleep.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_dev_llist.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_exception_handler_registry.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_file.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_iic_isr_register.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_irq_table.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_legacy_irq.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_no_error.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/priv/nios2_gmon_data.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_alarm.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_cache.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_debug.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dev.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma_dev.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_driver.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_errno.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_exceptions.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash_dev.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash_types.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq_entry.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_license_reminder_ucosii.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_llist.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_load.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_log_printf.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_set_args.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sim.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stack.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stdio.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sys_init.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sys_wrappers.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_timestamp.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_warning.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/ioctl.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/inc/sys/termios.h create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_alarm_start.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_busy_sleep.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_close.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush_all.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush_no_writeback.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_dev.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_dev_llist_insert.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_dma_rxchan_open.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_dma_txchan_open.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_do_ctors.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_do_dtors.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_ecc_fatal_entry.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_ecc_fatal_exception.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_environ.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_errno.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_entry.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_muldiv.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_trap.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_execve.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_exit.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_fcntl.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_lock.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_unlock.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_find_dev.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_find_file.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_flash_dev.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_fork.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_fs_reg.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_fstat.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_get_fd.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_getchar.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_getpid.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_gettod.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_gmon.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_icache_flush.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_icache_flush_all.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_iic.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_iic_isr_register.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_instruction_exception_entry.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_instruction_exception_register.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_io_redirect.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_ioctl.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_entry.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_handler.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_register.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_vars.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_isatty.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_kill.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_link.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_load.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_log_macro.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_log_printf.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_lseek.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_main.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_mcount.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_open.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_printf.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_putchar.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_putcharbuf.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_putstr.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_read.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_release_fd.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_remap_cached.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_remap_uncached.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_rename.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_sbrk.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_settod.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_software_exception.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_stat.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_tick.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_times.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_uncached_free.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_uncached_malloc.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_unlink.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_usleep.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_wait.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/alt_write.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/altera_nios2_gen2_irq.c create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/crt0.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_a.S create mode 100644 FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_c.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/Micrium_45_Day_Evaluation_License.pdf create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/inc/os/alt_flag.h create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/inc/os/alt_hooks.h create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/inc/os/alt_sem.h create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/inc/os_cfg.h create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/inc/priv/alt_flag_ucosii.h create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/inc/priv/alt_sem_ucosii.h create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/inc/ucos_ii.h create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/license-ucosii.txt create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/alt_env_lock.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/alt_malloc_lock.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_core.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_dbg.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_flag.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_mbox.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_mem.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_mutex.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_q.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_sem.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_task.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_time.c create mode 100644 FPGA_nios/hit_pat_bsp/UCOSII/src/os_tmr.c create mode 100644 FPGA_nios/hit_pat_bsp/alt_sys_init.c create mode 100644 FPGA_nios/hit_pat_bsp/create-this-bsp create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_pio_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_sysid_qsys.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_sysid_qsys_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_timer.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_timer_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_tse.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_tse_system_info.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart_fd.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_eth_tse.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_eth_tse_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_generic_quad_spi_controller.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_generic_quad_spi_controller_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_csr_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_descriptor_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_prefetcher_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_response_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_onchip_flash.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/altera_onchip_flash_regs.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/iniche/altera_eth_tse_iniche.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/inc/iniche/ins_tse_mac.h create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_sysid_qsys.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_sc.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_ts.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_vars.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_tse.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_tse_system_info.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_fd.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_init.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_ioctl.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_read.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_write.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_generic_quad_spi_controller.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_msgdma.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/altera_onchip_flash.c create mode 100644 FPGA_nios/hit_pat_bsp/drivers/src/iniche/ins_tse_mac.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/inc/alt_iniche_dev.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/inc/os/alt_syscall.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/allports/allports.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/allports/timeouts.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/allports/tk_misc.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_close.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_dev.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_fcntl.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_read.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_write.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/autoip4/autoip.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/autoip4/autoip.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/autoip4/ds_app.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnp.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnpmenu.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpclnt.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpclnt.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpcport.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpcprn.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpmenu.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsport.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpssock.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsvfs.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/app_ping.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/arp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/bsdsock.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/comline.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/crypt_api.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/crypt_port.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/dhcpclnt.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/dns.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/dnsport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/ether.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/genlist.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/htcmptab.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/icmp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/ifmap.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/in_utils.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/iniche_log.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/iniche_log_port.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/intimers.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/ip.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/ip6.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/libport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/mbuf.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/memwrap.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/menu.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/msring.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/nameser.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/net.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/netbuf.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/nios2/ipport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/nptcp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/nptypes.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/ns.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/ns_debug.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/nvfsio.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/nvparms.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/pmtu.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/ppp_port.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/profiler.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/q.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/snmp_vie.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/snmpport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/sockcall.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/socket.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/socket6.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/sockvar.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/syslog.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/task.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/tcp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/tcpapp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/tcpport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/tk_crnos.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/tk_ntask.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/udp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/userpass.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/vfsfiles.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/h/webport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/et_arp.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/icmp.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/iface.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ip.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ip_reasm.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ip_reasm.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ipdemux.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ipmc.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ipnet.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ipport.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ipraw.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/iproute.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/ipstart.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/pmtu.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/rtbtree.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ip/udp.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp2.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp2.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp_cmn.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ipmc/igmp_cmn.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ipmc/ipopt.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/ipmc/u_mctest.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/app_ping.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/bsdsock.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/cksum.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/cu_srv.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/dhcsetup.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/genlist.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/in_utils.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/iniche_log.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/iniche_qsort.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/localtime.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/memdev.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/memio.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/memwrap.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/menulib.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/menus.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/msring.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/netmain.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/nextcarg.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/nrmenus.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/nvfsio.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/nvparms.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/parseip.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/pcycles.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/profiler.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/rawiptst.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/reshost.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/rfsim.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/rttest.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/soperr.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/strilib.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/strlib.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/strtol.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/syslog.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/task.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/tcp_echo.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/tcpcksum.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/testmenu.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/tk_crnos.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/ttyio.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/udp_echo.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/misclib/userpass.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/dhcpclnt.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/dhcputil.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/dnsclnt.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/heapbuf.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/ifmap.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/macloop.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/ping.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/pktalloc.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/q.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/slip.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/slip.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/slipif.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/slipport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/net/udp_open.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/nios2/asm_cksum.S create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/nios2/brdutils.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/nios2/osport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/nios2/osportco.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/nios2/targnios.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/nios2/uart.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/in_pcb.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/in_pcb.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/nptcp.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/protosw.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/rawsock.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/sockcall.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/socket.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/socket2.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/soselect.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_fsm.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_in.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_menu.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_out.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_seq.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_subr.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_timr.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_timr.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_usr.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_var.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcp_zio.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcpip.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcpport.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/tcpsack.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tcp/udpsock.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/telnet/telerr.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/telnet/telmenu.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/telnet/telnet.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/telnet/telnet.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/telnet/telparse.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/telnet/telport.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/telnet/telport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftp.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftpcli.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftpmenu.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftpport.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftpport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftpsrv.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftpudp.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/tftp/tftputil.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/vfs/vfsfiles.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/vfs/vfsport.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/vfs/vfsport.h create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/vfs/vfssync.c create mode 100644 FPGA_nios/hit_pat_bsp/iniche/src/vfs/vfsutil.c create mode 100644 FPGA_nios/hit_pat_bsp/linker.h create mode 100644 FPGA_nios/hit_pat_bsp/linker.x create mode 100644 FPGA_nios/hit_pat_bsp/mem_init.mk create mode 100644 FPGA_nios/hit_pat_bsp/memory.gdb create mode 100644 FPGA_nios/hit_pat_bsp/public.mk create mode 100644 FPGA_nios/hit_pat_bsp/settings.bsp create mode 100644 FPGA_nios/hit_pat_bsp/summary.html create mode 100644 FPGA_nios/hit_pat_bsp/system.h create mode 100644 FPGA_nios/hit_pat_software.zip diff --git a/FPGA_firmware/hit20v3.qar b/FPGA_firmware/hit20v3.qar new file mode 100644 index 0000000000000000000000000000000000000000..29a9d90f2141b4b3a2554317ad391ca58c7c9e56 GIT binary patch literal 4332398 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

(DM-%=q(q%{;|ZcJomb>?#LV;c3_hM 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/V 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̳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�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≈vt!B+tjh`oiLt9+K#Q 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◧m@BWF^YCHzyNq2O&v^FWB$P?c)!J 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 z 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

f@?c|)a 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­B) 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ⅈ)_rOo9761VJO@Lg4e}B?Tt~ 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

?q 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�A2O!Ot=WpoJ@HXkJB)=saO+07z+t%c8t! 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

|YgaLv~X+4p!c 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 z≫+8cC2`bEy%$&Sxf7xn{x5%^HG`-+3FNXXnya#)FEeNse?%lcDz%M~SC@Uv(k- z$cn2v;pvT?^XXDlUWpAz^Nhtj)?;u7mJnsMqN(I>*$sf5O5a#r)T>B; z>YdM#q4dgV1FD)ZJ+s!FW*VB8sDixvuk2!!Fy4(7Mt)_T2dWx!CC;h{&@3y?+1nh~ z*~NqvAb%TYgVfpmTmV*8_nu}Re_+l~(Rfu%*j12HEAt6CiEjCA=nuq7>1nVlX zhn7%~R3+&DRpa6278;Imm^1LJ!rMai(UhzX(LvG=sG`b8`9=iM8oLYrHGFw+40m-! zf0VJYdr+L^zwmiXqC$MCBU2H$6;F)MwiSBivAsC}$J1dXGpORzCwrm(M|mkFRJL2V zS1KFs4e~`ACG{rX^qk@}X?(y|$=J^T9hY@IMI-4#D&cn5#AAq5x?+cVA>d+L;wEPQ zVc5hAm41A78kb8$M$zopeC%8RPW(HqJ83@hxA4(sYQil`QB0DSxF7g9bB?6$e@&4g z-@lW5n5O26yS#^&BA%4Y=Qc?7*v^8oAq7eE7t9?i#2$-b_80W&00*5yi3)Q*y$Nh5mh+7Tbe@>q}+ z>s$yJ%;j565pXj4IorPo2$V3mowf$Jp{CcTm?5Mwf32^`BkP*jWuHRk5Z9Kl^k>h1 zV;8dnM;cwLksg|s;C*HHGYs*~FYQ*A%5nKWI!FYywXA+Ck9-4y{A_NNSq9Foo6?dB z{9Bzu!#$I%e6{oI_3zGLyFV;jdXEOqN48P=QRXA>L4Op1pPF@X>b6fqYM6I7+0NOv z$&sOgT@_tbQw#pvBeb@@K-K1{7FUrj4iWt<=J^6p&;)sW4~V|iyZQAEefAq7O#BWk z%*3y!!Po(qB-;=wk9@kQ(NcHHn_~(PRQOqZ^^U{wMpDk{e)uJPDHh~CW8Vw+;yf*K zqSO=oQ8vaH#vhL~xeW+y=ABk6oxw0CX5#U)FiM{v7$KfgycQyxP%|5R3N8##!pAo~ zNLD~mX(#(@TpQClFSZZB&}B_tk`Uy+y8jTqq+XtZt8-Bpo1YvYC7SI*Y(ekYHAzSU z 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

vuLheJM8~5;4mTbXiq#m+Uq3mq}ml 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
t17a=TxZHe?iYy7=Y7QY;~Rv>TYx;UHFXF0lyx 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 z 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%0DJ8){<|Ae#3}k&Oo$iEX1+2{IFR_ZE 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󍱜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

tjt1_!o{%9c?|&x-(Y7k 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

E(}))m&3e+6$2MaRPLy=`CPo$7ot>bPhk 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

a>b0LS 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

X*mc8qX`e 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

U0Y|-l5l=Ld102N0FYQ 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 z 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

-uk`8XG<%wg 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�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

j<9balui6m2|jh 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

Y%jk4UJ+_i;Ha1zJaRV2*pN9 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 Gs#J_p1>fY(Y^@#I#h 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

j3@WH;BtR`c*f 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

;@*6L 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

  • 9NHA|GA~}jP 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

    _K!*Pz2ps$U%GVZL@E^EIqbD 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

    ?E{e?&;kmNW(x@Zxy9hlI&VB%G3_YXm}Zs$#tzs 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

    3SjgOcG>Fg|1xgy4r+_`; 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 Sa<)iTn`HI4iShr`ZXk!*ZR*_s literal 0 HcmV?d00001 diff --git a/FPGA_nios/.gitignore b/FPGA_nios/.gitignore new file mode 100644 index 0000000..3171365 --- /dev/null +++ b/FPGA_nios/.gitignore @@ -0,0 +1,37 @@ +# Eclipse project files +.classpath +.project +.settings/ + +# Build output +Debug/ +Release/ +*.o +*.elf +*.bin +*.hex +*.srec +*.map +*.lst +*.d + +# Other generated files +*.log +*.tmp +*.swp +*.bak + +# Temporary files +*.tmp +*.user + +# Eclipse metadata +.metadata/ + +# OS-specific files +.DS_Store +Thumbs.db + +# Other +*.lst +*.pt diff --git a/FPGA_nios/hit_pat/.cproject b/FPGA_nios/hit_pat/.cproject new file mode 100644 index 0000000..49ceae4 --- /dev/null +++ b/FPGA_nios/hit_pat/.cproject @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wsl + make + mem_init_install + true + false + false + + + wsl + make + mem_init_generate + true + false + false + + + wsl + make + help + true + false + false + + + + + + + + + + diff --git a/FPGA_nios/hit_pat/.force_relink b/FPGA_nios/hit_pat/.force_relink new file mode 100644 index 0000000..e69de29 diff --git a/FPGA_nios/hit_pat/create-this-app b/FPGA_nios/hit_pat/create-this-app new file mode 100644 index 0000000..0bd09c1 --- /dev/null +++ b/FPGA_nios/hit_pat/create-this-app @@ -0,0 +1,131 @@ +#!/bin/bash +# +# This script creates the simple_socket_server application in this directory. + + +BSP_DIR=../hit_pat_bsp +QUARTUS_PROJECT_DIR=../../ +NIOS2_APP_GEN_ARGS="--elf-name hit_pat.elf --set OBJDUMP_INCLUDE_SOURCE 1 --src-files alt_error_handler.c iniche_init.c led.c network_utilities.c simple_socket_server.c tse_my_system.c" + +# If script is launched from Windows through Windows Subsystem for Linux (WSL). +# The adjust-path macro converts absolute windows +# paths into unix style paths (Example: c:/dir -> /c/dir). This will ensure +# paths are readable. +uname=$(uname -r) +if [[ $uname =~ "Microsoft" ]]; then + _IS_WSL=1 + windows_exe=.exe +fi + +adjust_path() { + if [ "${_IS_WSL}" = "1" ] && [[ ! $1 =~ ^\/mnt\/* ]]; then + echo "$(wslpath -u "$1")" + else + echo "$1" + fi +} + +# First, check to see if $SOPC_KIT_NIOS2 environmental variable is set. +# This variable is required for the command line tools to execute correctly. +if [ -z "${SOPC_KIT_NIOS2}" ] +then + echo Required \$SOPC_KIT_NIOS2 Environmental Variable is not set! + exit 1 +fi + + +# Also make sure that the APP has not been created already. Check for +# existence of Makefile in the app directory +if [ -f ./Makefile ] +then + echo Application has already been created! Delete Makefile if you want to create a new application makefile + exit 1 +fi + + +# We are selecting ucosii_net bsp because it supports this application. +# Check to see if the ucosii_net has already been generated by checking for +# existence of the public.mk file. If not, we need to run +# create-this-bsp file to generate the bsp. +if [ ! -f ${BSP_DIR}/public.mk ]; then + # Since BSP doesn't exist, create the BSP + # Pass any command line arguments passed to this script to the BSP. + pushd "$(adjust_path ${BSP_DIR})" >> /dev/null + ./create-this-bsp "$@" || { + echo "create-this-bsp failed" + exit 1 + } + popd >> /dev/null +fi + + +# Don't run make if create-this-app script is called with --no-make arg +SKIP_MAKE= +while [ $# -gt 0 ] +do + case "$1" in + --no-make) + SKIP_MAKE=1 + ;; + esac + shift +done + + +# Now we also need to go copy the sources for this application to the +# local directory. +find "${SOPC_KIT_NIOS2}/examples/software/simple_socket_server/" -name '*.c' -or -name '*.h' -or -name 'hostfs*' | xargs -i cp -L {} ./ || { + echo "failed during copying example source files" + exit 1 +} + +find "${SOPC_KIT_NIOS2}/examples/software/simple_socket_server/" -name 'readme.txt' -or -name 'Readme.txt' | xargs -i cp -L {} ./ || { + echo "failed copying readme file" +} + +if [ -d "${SOPC_KIT_NIOS2}/examples/software/simple_socket_server/system" ] +then + cp -RL "${SOPC_KIT_NIOS2}/examples/software/simple_socket_server/system" . || { + echo "failed during copying project support files" + exit 1 + } +fi + +chmod -R +w . || { + echo "failed during changing file permissions" + exit 1 +} + +cmd="nios2-app-generate-makefile$windows_exe --bsp-dir ${BSP_DIR} --set QUARTUS_PROJECT_DIR=${QUARTUS_PROJECT_DIR} ${NIOS2_APP_GEN_ARGS}" + +echo "create-this-app: Running \"${cmd}\"" +$cmd || { + echo "nios2-app-generate-makefile failed" + exit 1 +} + +if [ -z "$SKIP_MAKE" ]; then + cmd="make" + + echo "create-this-app: Running \"$cmd\"" + $cmd || { + echo "make failed" + exit 1 + } + + echo + echo "To download and run the application:" + echo " 1. Make sure the board is connected to the system." + echo " 2. Run 'nios2-configure-sof ' to configure the FPGA with the hardware design." + echo " 3. If you have a stdio device, run 'nios2-terminal' in a different shell." + echo " 4. Run 'make download-elf' from the application directory." + echo + echo "To debug the application:" + echo " Import the project into Nios II Software Build Tools for Eclipse." + echo " Refer to Nios II Software Build Tools for Eclipse Documentation for more information." + echo + echo -e "" +fi + + +exit 0 diff --git a/FPGA_nios/hit_pat/hit_pat.objdump b/FPGA_nios/hit_pat/hit_pat.objdump new file mode 100644 index 0000000..ae87d1e --- /dev/null +++ b/FPGA_nios/hit_pat/hit_pat.objdump @@ -0,0 +1,106020 @@ + +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 : + +#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 + beq r4, zero, .Lnot_irq + 8000180: 20000226 beq r4,zero,800018c + /* + * Now that all necessary registers have been preserved, call + * alt_irq_handler() to process the interrupts. + */ + + call alt_irq_handler + 8000184: 80001fc0 call 80001fc + + .section .exceptions.irqreturn, "xa" + + br .Lexception_exit + 8000188: 00000706 br 80001a8 + * 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 + * 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 + + /* + * 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 : + * 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 +#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 + { +#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 + } + 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 + + } 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 + + /* + * Notify the operating system that interrupt processing is complete. + */ + + ALT_OS_INT_EXIT(); + 80002a8: 80108180 call 8010818 +} + 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 : + * 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 + * 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 + * (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 + +0800037c : + + /* Wait in infinite loop in case alt_main does return. */ +alt_after_alt_main: + br alt_after_alt_main + 800037c: 003fff06 br 800037c + +08000380 : +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 +} + 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 : + +// **************************** + + //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 + 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 +} + 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 : + +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 + 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(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 : + + //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 + return 0; //bad IP + 800049c: 0005883a mov r2,zero + 80004a0: 00001106 br 80004e8 + + for (int i = 0; i < 6; i++) + 80004a4: e03fff15 stw zero,-4(fp) + 80004a8: 00000b06 br 80004d8 + 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 + return 1; //non-zero MAC + 80004c4: 00800044 movi r2,1 + 80004c8: 00000706 br 80004e8 + 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 + + 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 : + +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 + 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 + + //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 + + struct arptabent * arp_entry = find_oldest_arp(ip); + 80005d4: e0bffa17 ldw r2,-24(fp) + 80005d8: 1009883a mov r4,r2 + 80005dc: 80233bc0 call 80233bc + 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 + { + printf("ARP entry could not be found, pinging!\n"); + 80005ec: 01020134 movhi r4,2052 + 80005f0: 211a7304 addi r4,r4,27084 + 80005f4: 8002d9c0 call 8002d9c + //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 + + 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 + { + TK_SLEEP(10); + 8000624: 010002c4 movi r4,11 + 8000628: 801730c0 call 801730c + arp_entry = find_oldest_arp(ip); + 800062c: e0bffa17 ldw r2,-24(fp) + 8000630: 1009883a mov r4,r2 + 8000634: 80233bc0 call 80233bc + 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 + 8000654: e0bffa17 ldw r2,-24(fp) + 8000658: 100b883a mov r5,r2 + 800065c: e13ffe17 ldw r4,-8(fp) + 8000660: 80004780 call 8000478 + 8000664: 103fef26 beq r2,zero,8000624 + } + + if (pingseq > 10) + 8000668: e0bffd17 ldw r2,-12(fp) + 800066c: 108002d0 cmplti r2,r2,11 + 8000670: 1000041e bne r2,zero,8000684 + { + 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 + break; + 8000680: 00000506 br 8000698 + 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 + 8000694: 103fd526 beq r2,zero,80005ec + } + } + + 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 + + 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((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 + + //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 + 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 + + 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 + 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 +} + 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 : + +// **************************** + + //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 + 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 + return 0; + 8000868: 0005883a mov r2,zero + 800086c: 00000806 br 8000890 + + 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 + *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 : + + //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 + 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 + return 0; + 800091c: 0005883a mov r2,zero + 8000920: 00000606 br 800093c + + *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 : + +// **************************** + +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_delay(); + 8000968: 80003800 call 8000380 + + 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 + while (!control_get_header(&header)) + 8000984: e0bffe04 addi r2,fp,-8 + 8000988: 1009883a mov r4,r2 + 800098c: 800080c0 call 800080c + 8000990: 10803fcc andi r2,r2,255 + 8000994: 103ff426 beq r2,zero,8000968 + 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 + return; + + + //get packet data - at this moment this is blocking! + while (!control_get_data(header->length, &data)) + 80009ac: 00000706 br 80009cc + { + control_delay(); + 80009b0: 80003800 call 8000380 + + 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 + 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 + 80009e8: 10803fcc andi r2,r2,255 + 80009ec: 103ff026 beq r2,zero,80009b0 + { + 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 + + 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 + 8000a24: 10c09448 cmpgei r3,r2,593 + 8000a28: 1800201e bne r3,zero,8000aac + 8000a2c: 10c08420 cmpeqi r3,r2,528 + 8000a30: 1800691e bne r3,zero,8000bd8 + 8000a34: 10c08448 cmpgei r3,r2,529 + 8000a38: 18000e1e bne r3,zero,8000a74 + 8000a3c: 10c00460 cmpeqi r3,r2,17 + 8000a40: 18004a1e bne r3,zero,8000b6c + 8000a44: 10c00488 cmpgei r3,r2,18 + 8000a48: 1800051e bne r3,zero,8000a60 + 8000a4c: 10c00060 cmpeqi r3,r2,1 + 8000a50: 1800361e bne r3,zero,8000b2c + 8000a54: 10800420 cmpeqi r2,r2,16 + 8000a58: 10003b1e bne r2,zero,8000b48 + control_pong(header); + break; + + + default: + break; + 8000a5c: 00017c06 br 8001050 + switch(header->command) + 8000a60: 10c04420 cmpeqi r3,r2,272 + 8000a64: 18004a1e bne r3,zero,8000b90 + 8000a68: 10804460 cmpeqi r2,r2,273 + 8000a6c: 1000511e bne r2,zero,8000bb4 + break; + 8000a70: 00017706 br 8001050 + switch(header->command) + 8000a74: 10c08860 cmpeqi r3,r2,545 + 8000a78: 1800721e bne r3,zero,8000c44 + 8000a7c: 10c08888 cmpgei r3,r2,546 + 8000a80: 1800051e bne r3,zero,8000a98 + 8000a84: 10c08460 cmpeqi r3,r2,529 + 8000a88: 18005c1e bne r3,zero,8000bfc + 8000a8c: 10808820 cmpeqi r2,r2,544 + 8000a90: 1000631e bne r2,zero,8000c20 + break; + 8000a94: 00016e06 br 8001050 + switch(header->command) + 8000a98: 10c08c20 cmpeqi r3,r2,560 + 8000a9c: 1800721e bne r3,zero,8000c68 + 8000aa0: 10809020 cmpeqi r2,r2,576 + 8000aa4: 1000821e bne r2,zero,8000cb0 + break; + 8000aa8: 00016906 br 8001050 + switch(header->command) + 8000aac: 10c0c8a0 cmpeqi r3,r2,802 + 8000ab0: 1800ff1e bne r3,zero,8000eb0 + 8000ab4: 10c0c8c8 cmpgei r3,r2,803 + 8000ab8: 18000e1e bne r3,zero,8000af4 + 8000abc: 10c0c420 cmpeqi r3,r2,784 + 8000ac0: 1800c81e bne r3,zero,8000de4 + 8000ac4: 10c0c448 cmpgei r3,r2,785 + 8000ac8: 1800051e bne r3,zero,8000ae0 + 8000acc: 10c09820 cmpeqi r3,r2,608 + 8000ad0: 18009e1e bne r3,zero,8000d4c + 8000ad4: 10809c20 cmpeqi r2,r2,624 + 8000ad8: 1000af1e bne r2,zero,8000d98 + break; + 8000adc: 00015c06 br 8001050 + switch(header->command) + 8000ae0: 10c0c460 cmpeqi r3,r2,785 + 8000ae4: 1800d01e bne r3,zero,8000e28 + 8000ae8: 1080c860 cmpeqi r2,r2,801 + 8000aec: 1000df1e bne r2,zero,8000e6c + break; + 8000af0: 00015706 br 8001050 + switch(header->command) + 8000af4: 10d00060 cmpeqi r3,r2,16385 + 8000af8: 1801001e bne r3,zero,8000efc + 8000afc: 10d00088 cmpgei r3,r2,16386 + 8000b00: 1800051e bne r3,zero,8000b18 + 8000b04: 10c0cc60 cmpeqi r3,r2,817 + 8000b08: 1800f01e bne r3,zero,8000ecc + 8000b0c: 10810420 cmpeqi r2,r2,1040 + 8000b10: 1000f51e bne r2,zero,8000ee8 + break; + 8000b14: 00014e06 br 8001050 + switch(header->command) + 8000b18: 10d000a0 cmpeqi r3,r2,16386 + 8000b1c: 1801091e bne r3,zero,8000f44 + 8000b20: 109000e0 cmpeqi r2,r2,16387 + 8000b24: 1001191e bne r2,zero,8000f8c + break; + 8000b28: 00014906 br 8001050 + printf("COMMAND_PING\n"); + 8000b2c: 01020134 movhi r4,2052 + 8000b30: 211a9504 addi r4,r4,27220 + 8000b34: 8002d9c0 call 8002d9c + control_pong(header); + 8000b38: e0bffe17 ldw r2,-8(fp) + 8000b3c: 1009883a mov r4,r2 + 8000b40: 80003b00 call 80003b0 + break; + 8000b44: 00014206 br 8001050 + printf("COMMAND_DEBUG_LED_OFF\n"); + 8000b48: 01020134 movhi r4,2052 + 8000b4c: 211a9904 addi r4,r4,27236 + 8000b50: 8002d9c0 call 8002d9c + led_clear(0); + 8000b54: 0009883a mov r4,zero + 8000b58: 8002abc0 call 8002abc + control_pong(header); + 8000b5c: e0bffe17 ldw r2,-8(fp) + 8000b60: 1009883a mov r4,r2 + 8000b64: 80003b00 call 80003b0 + break; + 8000b68: 00013906 br 8001050 + printf("COMMAND_DEBUG_LED_ON\n"); + 8000b6c: 01020134 movhi r4,2052 + 8000b70: 211a9f04 addi r4,r4,27260 + 8000b74: 8002d9c0 call 8002d9c + led_set(0); + 8000b78: 0009883a mov r4,zero + 8000b7c: 8002a700 call 8002a70 + control_pong(header); + 8000b80: e0bffe17 ldw r2,-8(fp) + 8000b84: 1009883a mov r4,r2 + 8000b88: 80003b00 call 80003b0 + break; + 8000b8c: 00013006 br 8001050 + printf("COMMAND_LEDS_DISABLE\n"); + 8000b90: 01020134 movhi r4,2052 + 8000b94: 211aa504 addi r4,r4,27284 + 8000b98: 8002d9c0 call 8002d9c + led4_blink_enable(0); + 8000b9c: 0009883a mov r4,zero + 8000ba0: 8002b7c0 call 8002b7c + control_pong(header); + 8000ba4: e0bffe17 ldw r2,-8(fp) + 8000ba8: 1009883a mov r4,r2 + 8000bac: 80003b00 call 80003b0 + break; + 8000bb0: 00012706 br 8001050 + printf("COMMAND_LEDS_ENABLE\n"); + 8000bb4: 01020134 movhi r4,2052 + 8000bb8: 211aab04 addi r4,r4,27308 + 8000bbc: 8002d9c0 call 8002d9c + led4_blink_enable(1); + 8000bc0: 01000044 movi r4,1 + 8000bc4: 8002b7c0 call 8002b7c + control_pong(header); + 8000bc8: e0bffe17 ldw r2,-8(fp) + 8000bcc: 1009883a mov r4,r2 + 8000bd0: 80003b00 call 80003b0 + break; + 8000bd4: 00011e06 br 8001050 + printf("COMMAND_TRIGGER_DISABLE\n"); + 8000bd8: 01020134 movhi r4,2052 + 8000bdc: 211ab004 addi r4,r4,27328 + 8000be0: 8002d9c0 call 8002d9c + master_clock_enable(0); + 8000be4: 0009883a mov r4,zero + 8000be8: 8002a140 call 8002a14 + control_pong(header); + 8000bec: e0bffe17 ldw r2,-8(fp) + 8000bf0: 1009883a mov r4,r2 + 8000bf4: 80003b00 call 80003b0 + break; + 8000bf8: 00011506 br 8001050 + printf("COMMAND_TRIGGER_ENABLE\n"); + 8000bfc: 01020134 movhi r4,2052 + 8000c00: 211ab604 addi r4,r4,27352 + 8000c04: 8002d9c0 call 8002d9c + master_clock_enable(1); + 8000c08: 01000044 movi r4,1 + 8000c0c: 8002a140 call 8002a14 + control_pong(header); + 8000c10: e0bffe17 ldw r2,-8(fp) + 8000c14: 1009883a mov r4,r2 + 8000c18: 80003b00 call 80003b0 + break; + 8000c1c: 00010c06 br 8001050 + printf("COMMAND_TRIGGER_SET_SLAVE\n"); + 8000c20: 01020134 movhi r4,2052 + 8000c24: 211abc04 addi r4,r4,27376 + 8000c28: 8002d9c0 call 8002d9c + masterslave(TRIGGER_SLAVE); + 8000c2c: 0009883a mov r4,zero + 8000c30: 80029440 call 8002944 + control_pong(header); + 8000c34: e0bffe17 ldw r2,-8(fp) + 8000c38: 1009883a mov r4,r2 + 8000c3c: 80003b00 call 80003b0 + break; + 8000c40: 00010306 br 8001050 + printf("COMMAND_TRIGGER_SET_MASTER\n"); + 8000c44: 01020134 movhi r4,2052 + 8000c48: 211ac304 addi r4,r4,27404 + 8000c4c: 8002d9c0 call 8002d9c + masterslave(TRIGGER_MASTER); + 8000c50: 01000044 movi r4,1 + 8000c54: 80029440 call 8002944 + control_pong(header); + 8000c58: e0bffe17 ldw r2,-8(fp) + 8000c5c: 1009883a mov r4,r2 + 8000c60: 80003b00 call 80003b0 + break; + 8000c64: 0000fa06 br 8001050 + 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 + 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 + 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 + break; + 8000cac: 0000e806 br 8001050 + 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 + 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 + break; + 8000cf4: 0000d606 br 8001050 + 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 + 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 + 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 + break; + 8000d48: 0000c106 br 8001050 + 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 + 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 + 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 + break; + 8000d94: 0000ae06 br 8001050 + 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 + 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 + 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 + break; + 8000de0: 00009b06 br 8001050 + printf("COMMAND_DAQ_DISABLE\n"); + 8000de4: 01020134 movhi r4,2052 + 8000de8: 211af404 addi r4,r4,27600 + 8000dec: 8002d9c0 call 8002d9c + 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 + 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 + control_pong(header); + 8000e18: e0bffe17 ldw r2,-8(fp) + 8000e1c: 1009883a mov r4,r2 + 8000e20: 80003b00 call 80003b0 + break; + 8000e24: 00008a06 br 8001050 + printf("COMMAND_DAQ_ENABLE\n"); + 8000e28: 01020134 movhi r4,2052 + 8000e2c: 211af904 addi r4,r4,27620 + 8000e30: 8002d9c0 call 8002d9c + 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 + 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 + control_pong(header); + 8000e5c: e0bffe17 ldw r2,-8(fp) + 8000e60: 1009883a mov r4,r2 + 8000e64: 80003b00 call 80003b0 + break; + 8000e68: 00007906 br 8001050 + printf("COMMAND_DAQ_RESET_COUNTERS\n"); + 8000e6c: 01020134 movhi r4,2052 + 8000e70: 211afe04 addi r4,r4,27640 + 8000e74: 8002d9c0 call 8002d9c + 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 + 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 + control_pong(header); + 8000ea0: e0bffe17 ldw r2,-8(fp) + 8000ea4: 1009883a mov r4,r2 + 8000ea8: 80003b00 call 80003b0 + break; + 8000eac: 00006806 br 8001050 + printf("COMMAND_DAQ_FLUSH_DATA\n"); + 8000eb0: 01020134 movhi r4,2052 + 8000eb4: 211b0504 addi r4,r4,27668 + 8000eb8: 8002d9c0 call 8002d9c + control_pong(header); + 8000ebc: e0bffe17 ldw r2,-8(fp) + 8000ec0: 1009883a mov r4,r2 + 8000ec4: 80003b00 call 80003b0 + break; + 8000ec8: 00006106 br 8001050 + printf("COMMAND_DAQ_CONFIG_PEER\n"); + 8000ecc: 01020134 movhi r4,2052 + 8000ed0: 211b0b04 addi r4,r4,27692 + 8000ed4: 8002d9c0 call 8002d9c + control_process_config_peer(data); + 8000ed8: e0bffd17 ldw r2,-12(fp) + 8000edc: 1009883a mov r4,r2 + 8000ee0: 80004f80 call 80004f8 + break; + 8000ee4: 00005a06 br 8001050 + printf("COMMAND_SLOWCTRL_SNAPSHOT\n"); + 8000ee8: 01020134 movhi r4,2052 + 8000eec: 211b1104 addi r4,r4,27716 + 8000ef0: 8002d9c0 call 8002d9c + control_process_snapshot(); + 8000ef4: 80004180 call 8000418 + break; + 8000ef8: 00005506 br 8001050 + 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 + 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 + break; + 8000f40: 00004306 br 8001050 + 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 + 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 + break; + 8000f88: 00003106 br 8001050 + 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 + 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 + 8001004: 00000706 br 8001024 + 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 + 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 + break; + 8001038: 00000506 br 8001050 + return; + 800103c: 0001883a nop + 8001040: 00000306 br 8001050 + return; + 8001044: 0001883a nop + 8001048: 00000106 br 8001050 + 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 : + 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 + ethernet_listen(0, CONTROL_PORT); + 8001084: 0143e804 movi r5,4000 + 8001088: 0009883a mov r4,zero + 800108c: 80020d00 call 80020d0 + + sensor_preconfigure(SENSOR_INTERFACE_BASE); + 8001090: 01061034 movhi r4,6208 + 8001094: 210f5404 addi r4,r4,15696 + 8001098: 8001c080 call 8001c08 + + //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 + + + for (alt_u32 i = 0; i < 320; i++) { + 80010a8: e03fff15 stw zero,-4(fp) + 80010ac: 00000b06 br 80010dc + //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 + } + + while(1) + control_step(); + 80010e8: 80009500 call 8000950 + 80010ec: 003ffe06 br 80010e8 + +080010f0 : +} + +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 +} + 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 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 + netmain(); + 800113c: 80278140 call 8027814 + + /* 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 + TK_SLEEP(1); + 8001144: 01000084 movi r4,2 + 8001148: 801730c0 call 801730c + while (!iniche_net_ready){ + 800114c: d0a06f17 ldw r2,-32324(gp) + 8001150: 103ffc26 beq r2,zero,8001144 + + /* 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 + + /* Create tasks */ + ethernet_init(); + 8001160: 80020500 call 8002050 + control_init(); + 8001164: 80010f00 call 80010f0 + //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 + 8001170: e0bfffc5 stb r2,-1(fp) + //alt_uCOSIIErrorHandler(error_code, 0); + + while (1); /* Correct Program Flow should never get here */ + 8001174: 003fff06 br 8001174 + +08001178

    : + +/* 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 + + /* 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 + 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 + + + + while(1); /* Correct Program Flow never gets here. */ + 80011e4: 003fff06 br 80011e4 + +080011e8 : +* 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 + 800120c: e0bfff15 stw r2,-4(fp) + + if(error) + 8001210: e0bfff17 ldw r2,-4(fp) + 8001214: 10000326 beq r2,zero,8001224 + { + /* 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 + 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 : +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 + 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 + 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 + //} + + + /* 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 : +* +* 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 + { + 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 + 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 + 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 + + for(i=0; i<9; i++) + 8001474: e03ffe15 stw zero,-8(fp) + 8001478: 00001d06 br 80014f0 + { + serial_number[i] = getchar(); + 800147c: 8002c380 call 8002c38 + 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 + + /* 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 + 80014d0: e0bffe17 ldw r2,-8(fp) + 80014d4: 10000316 blt r2,zero,80014e4 + { + 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 + } + } + printf("\n"); + 80014fc: 01000284 movi r4,10 + 8001500: 8002cb80 call 8002cb8 + + for(i=0; i<9; i++) + 8001504: e03ffe15 stw zero,-8(fp) + 8001508: 00002406 br 800159c + { + 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 + { + 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 + } + 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 + break; + 800158c: 00000606 br 80015a8 + 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 + while(!ser_num) + 80015a8: e0bfff17 ldw r2,-4(fp) + 80015ac: 103fa826 beq r2,zero,8001450 + } + } + } + + 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 : + * 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 + 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 + printf("static network settings\n\n"); + 80015fc: 01020134 movhi r4,2052 + 8001600: 211bd604 addi r4,r4,28504 + 8001604: 8002d9c0 call 8002d9c + + ser_num = get_serial_number(); + 8001608: 80014340 call 8001434 + 800160c: e0bffe15 stw r2,-8(fp) + + if (ser_num) + 8001610: e0bffe17 ldw r2,-8(fp) + 8001614: 10005426 beq r2,zero,8001768 + { + /* 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 + 8001710: e0bffd15 stw r2,-12(fp) + if (flash_handle) + 8001714: e0bffd17 ldw r2,-12(fp) + 8001718: 10001326 beq r2,zero,8001768 + { + 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 + 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 : + * 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 + printf("a MAC address.\n\n"); + 80017ac: 01020134 movhi r4,2052 + 80017b0: 211bf304 addi r4,r4,28620 + 80017b4: 8002d9c0 call 8002d9c + + ser_num = get_serial_number(); + 80017b8: 80014340 call 8001434 + 80017bc: e0bffe15 stw r2,-8(fp) + + if (ser_num) + 80017c0: e0bffe17 ldw r2,-8(fp) + 80017c4: 10003526 beq r2,zero,800189c + { + /* 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 + + 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 : +* +* 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 + 80018d4: e0bfff15 stw r2,-4(fp) + if (!error) + 80018d8: e0bfff17 ldw r2,-4(fp) + 80018dc: 1000041e bne r2,zero,80018f0 + 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 + { + 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 + { + error = generate_and_store_mac_addr(); + 8001910: 80015c80 call 80015c8 + 8001914: e0bfff15 stw r2,-4(fp) + } + } + + if (!error) + 8001918: e0bfff17 ldw r2,-4(fp) + 800191c: 1000471e bne r2,zero,8001a3c + { + 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 + + } + + 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 : + * 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 + 8001a78: e0bffb15 stw r2,-20(fp) + if (fd <= 0) + 8001a7c: e0bffb17 ldw r2,-20(fp) + 8001a80: 1000021e bne r2,zero,8001a8c + 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 + 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, ®ions, &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 + { + 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 + { + 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 + 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 + } + 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 + *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 : +#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 + 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 + 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 : + + +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 + + 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 : +// ******************************************************** + + + +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 : + +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 : + +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 + + 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 + { + printf("[ss_handle_accept] closing old connection\n"); + 8001dec: 01020134 movhi r4,2052 + 8001df0: 211c1604 addi r4,r4,28760 + 8001df4: 8002d9c0 call 8002d9c + 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 + ss_reset_connection(conn); + 8001e08: e13ff817 ldw r4,-32(fp) + 8001e0c: 8001d1c0 call 8001d1c + } + + 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 + 8001e30: e0bfff15 stw r2,-4(fp) + 8001e34: e0bfff17 ldw r2,-4(fp) + 8001e38: 10000c16 blt r2,zero,8001e6c + //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 + 8001e5c: 100b883a mov r5,r2 + 8001e60: 01020134 movhi r4,2052 + 8001e64: 211c2104 addi r4,r4,28804 + 8001e68: 8002c780 call 8002c78 + inet_ntoa(incoming_addr.sin_addr)); + } + + OSMutexPost(mutex); + 8001e6c: d0a03c17 ldw r2,-32528(gp) + 8001e70: 1009883a mov r4,r2 + 8001e74: 80142380 call 8014238 + 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 : + +/* + * 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 + + 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 + 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 + 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 + //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 + + //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 + 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 + { + 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 + 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 + 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 + } + + if (max_socket == 0) + 8001fb8: e0bfff17 ldw r2,-4(fp) + 8001fbc: 1000031e bne r2,zero,8001fcc + TK_SLEEP(10); //just sleep a bit if nothing to do + 8001fc0: 010002c4 movi r4,11 + 8001fc4: 801730c0 call 801730c + 8001fc8: 003fd606 br 8001f24 + 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 + + for (int ch = 0; ch < NR_CHANNELS; ch++) + 8001fec: e03ffc15 stw zero,-16(fp) + 8001ff0: 00001406 br 8002044 + 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 + 8002018: 10000726 beq r2,zero,8002038 + 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 + 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 + FD_ZERO(&readfds); + 800204c: 003fb506 br 8001f24 + +08002050 : + + +// ****************** 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 + 8002070: d0a03c15 stw r2,-32528(gp) + + + for (int ch = 0; ch < NR_CHANNELS; ch++) + 8002074: e03fff15 stw zero,-4(fp) + 8002078: 00000a06 br 80020a4 + 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 + 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 + + TK_NEWTASK(&sslistenertask); + 80020ac: 01020174 movhi r4,2053 + 80020b0: 212e4e04 addi r4,r4,-18120 + 80020b4: 80290740 call 8029074 + 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 : + +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 + + 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 + 8002154: 1000050e bge r2,zero,800216c + { + //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 + return -1; + 8002164: 00bfffc4 movi r2,-1 + 8002168: 00002306 br 80021f8 + } + + 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 + 800218c: 1000050e bge r2,zero,80021a4 + { + //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 + return -2; + 800219c: 00bfff84 movi r2,-2 + 80021a0: 00001506 br 80021f8 + } + + 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 + 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 + + OSMutexPost(mutex); + 80021e8: d0a03c17 ldw r2,-32528(gp) + 80021ec: 1009883a mov r4,r2 + 80021f0: 80142380 call 8014238 + 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 : + +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 + + 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 + { + OSMutexPost(mutex); + 800225c: d0a03c17 ldw r2,-32528(gp) + 8002260: 1009883a mov r4,r2 + 8002264: 80142380 call 8014238 + return 0; + 8002268: 0005883a mov r2,zero + 800226c: 00002406 br 8002300 + } + + 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 + 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 + { + printf("[ethernet_write] closing connection due to error\n"); + 80022a8: 01020134 movhi r4,2052 + 80022ac: 211c3d04 addi r4,r4,28916 + 80022b0: 8002d9c0 call 8002d9c + 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 + 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 + 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 + 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 : + +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 + + 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 + { + OSMutexPost(mutex); + 8002364: d0a03c17 ldw r2,-32528(gp) + 8002368: 1009883a mov r4,r2 + 800236c: 80142380 call 8014238 + return 0; + 8002370: 0005883a mov r2,zero + 8002374: 00005006 br 80024b8 + } + + //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 + 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 + 80023e8: 10002f26 beq r2,zero,80024a8 + 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 + 8002410: 10002526 beq r2,zero,80024a8 + { + 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 + 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 + { + printf("[ethernet_read] closing connection due to error\n"); + 800244c: 01020134 movhi r4,2052 + 8002450: 211c4a04 addi r4,r4,28968 + 8002454: 8002d9c0 call 8002d9c + 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 + 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 + 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 + return result; + 80024a0: e0bfff17 ldw r2,-4(fp) + 80024a4: 00000406 br 80024b8 + } + + OSMutexPost(mutex); + 80024a8: d0a03c17 ldw r2,-32528(gp) + 80024ac: 1009883a mov r4,r2 + 80024b0: 80142380 call 8014238 + 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 : + +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 + + 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 + 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 + + OSMutexPost(mutex); + 8002530: d0a03c17 ldw r2,-32528(gp) + 8002534: 1009883a mov r4,r2 + 8002538: 80142380 call 8014238 + 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 : + +//******************************************************************* + + +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 + 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 + 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 : + +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 + + 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 + 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_set_dstip_a(UDP_GENERATOR_BASE, dstip); + 80026d0: e03ffe15 stw zero,-8(fp) + 80026d4: 00001006 br 8002718 + 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_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 + 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 +} + 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 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 + { + 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 + } +} + 800282c: 0001883a nop + 8002830: e037883a mov sp,fp + 8002834: df000017 ldw fp,0(sp) + 8002838: dec00104 addi sp,sp,4 + 800283c: f800283a ret + +08002840 : +//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 + { + 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 + 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 + 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 + } +} + 80028f0: 0001883a nop + 80028f4: e037883a mov sp,fp + 80028f8: df000017 ldw fp,0(sp) + 80028fc: dec00104 addi sp,sp,4 + 8002900: f800283a ret + +08002904 : + + //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 + //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 +} + 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 : + +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 + 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 + 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 +} + 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 : + +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 : + +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 + 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 + 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 : + +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 + return; + IOWR_ALTERA_AVALON_PIO_SET_BITS(OUTPUT_PIO_BASE, 1< + 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 : + +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 + return; + IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(OUTPUT_PIO_BASE, 1< + 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 : + +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 + 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< + 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 : + +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 + 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 + 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 : + +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 + 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 : + 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 : + 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 : + 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 + 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 : + 8002d9c: 00820174 movhi r2,2053 + 8002da0: 200b883a mov r5,r4 + 8002da4: 1132af17 ldw r4,-13636(r2) + 8002da8: 8002cd01 jmpi 8002cd0 <_puts_r> + +08002dac : + 8002dac: 208000cc andi r2,r4,3 + 8002db0: 10002026 beq r2,zero,8002e34 + 8002db4: 20800007 ldb r2,0(r4) + 8002db8: 10002026 beq r2,zero,8002e3c + 8002dbc: 2005883a mov r2,r4 + 8002dc0: 00000206 br 8002dcc + 8002dc4: 10c00007 ldb r3,0(r2) + 8002dc8: 18001826 beq r3,zero,8002e2c + 8002dcc: 10800044 addi r2,r2,1 + 8002dd0: 10c000cc andi r3,r2,3 + 8002dd4: 183ffb1e bne r3,zero,8002dc4 + 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 + 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 + 8002e1c: 00000106 br 8002e24 + 8002e20: 10800044 addi r2,r2,1 + 8002e24: 10c00007 ldb r3,0(r2) + 8002e28: 183ffd1e bne r3,zero,8002e20 + 8002e2c: 1105c83a sub r2,r2,r4 + 8002e30: f800283a ret + 8002e34: 2005883a mov r2,r4 + 8002e38: 003fe706 br 8002dd8 + 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 + 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 + 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 + 8003020: 08003200 call 800320 + 8003024: 08003200 call 800320 + 8003028: 08003200 call 800320 + 800302c: 08003200 call 800320 + 8003030: 08003200 call 800320 + 8003034: 08003200 call 800320 + 8003038: 08003200 call 800320 + 800303c: 08003200 call 800320 + 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 + 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 + 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 : + 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 + 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 + 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 + 80052d8: b8800017 ldw r2,0(r23) + 80052dc: 10000b1e bne r2,zero,800530c + 80052e0: b8bfff04 addi r2,r23,-4 + 80052e4: a880082e bgeu r21,r2,8005308 + 80052e8: b8ffff17 ldw r3,-4(r23) + 80052ec: 18000326 beq r3,zero,80052fc + 80052f0: 00000506 br 8005308 + 80052f4: 10c00017 ldw r3,0(r2) + 80052f8: 1800031e bne r3,zero,8005308 + 80052fc: 10bfff04 addi r2,r2,-4 + 8005300: 94bfffc4 addi r18,r18,-1 + 8005304: a8bffb36 bltu r21,r2,80052f4 + 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 + 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 + 8005374: 900690ba slli r3,r18,2 + 8005378: a8c7883a add r3,r21,r3 + 800537c: 18800017 ldw r2,0(r3) + 8005380: 10000b1e bne r2,zero,80053b0 + 8005384: 18bfff04 addi r2,r3,-4 + 8005388: a880082e bgeu r21,r2,80053ac + 800538c: 18ffff17 ldw r3,-4(r3) + 8005390: 18000326 beq r3,zero,80053a0 + 8005394: 00000506 br 80053ac + 8005398: 10c00017 ldw r3,0(r2) + 800539c: 1800031e bne r3,zero,80053ac + 80053a0: 10bfff04 addi r2,r2,-4 + 80053a4: 94bfffc4 addi r18,r18,-1 + 80053a8: a8bffb36 bltu r21,r2,8005398 + 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 + +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 + 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 + 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 + 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 + 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 : + 8006d3c: 200b883a mov r5,r4 + 8006d40: 20000326 beq r4,zero,8006d50 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 : + 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 + 8007b78: 88800e17 ldw r2,56(r17) + 8007b7c: 10000d26 beq r2,zero,8007bb4 + 8007b80: 80800117 ldw r2,4(r16) + 8007b84: 10bfffc4 addi r2,r2,-1 + 8007b88: 80800115 stw r2,4(r16) + 8007b8c: 10000f16 blt r2,zero,8007bcc + 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 + 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 : + 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 : + 80085d0: 208000cc andi r2,r4,3 + 80085d4: 280f883a mov r7,r5 + 80085d8: 10003526 beq r2,zero,80086b0 + 80085dc: 30bfffc4 addi r2,r6,-1 + 80085e0: 30001926 beq r6,zero,8008648 + 80085e4: 20c00003 ldbu r3,0(r4) + 80085e8: 29803fcc andi r6,r5,255 + 80085ec: 30c0061e bne r6,r3,8008608 + 80085f0: 00001706 br 8008650 + 80085f4: 10bfffc4 addi r2,r2,-1 + 80085f8: 10ffffe0 cmpeqi r3,r2,-1 + 80085fc: 1800121e bne r3,zero,8008648 + 8008600: 20c00003 ldbu r3,0(r4) + 8008604: 19801226 beq r3,r6,8008650 + 8008608: 21000044 addi r4,r4,1 + 800860c: 20c000cc andi r3,r4,3 + 8008610: 183ff81e bne r3,zero,80085f4 + 8008614: 10c00128 cmpgeui r3,r2,4 + 8008618: 18000f1e bne r3,zero,8008658 + 800861c: 10000a26 beq r2,zero,8008648 + 8008620: 20c00003 ldbu r3,0(r4) + 8008624: 29403fcc andi r5,r5,255 + 8008628: 19400926 beq r3,r5,8008650 + 800862c: 2085883a add r2,r4,r2 + 8008630: 39403fcc andi r5,r7,255 + 8008634: 00000206 br 8008640 + 8008638: 20c00003 ldbu r3,0(r4) + 800863c: 19400426 beq r3,r5,8008650 + 8008640: 21000044 addi r4,r4,1 + 8008644: 113ffc1e bne r2,r4,8008638 + 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 + 800869c: 10bfff04 addi r2,r2,-4 + 80086a0: 10c00128 cmpgeui r3,r2,4 + 80086a4: 21000104 addi r4,r4,4 + 80086a8: 183ff51e bne r3,zero,8008680 + 80086ac: 003fdb06 br 800861c + 80086b0: 3005883a mov r2,r6 + 80086b4: 003fd706 br 8008614 + +080086b8 : + 80086b8: 30c00430 cmpltui r3,r6,16 + 80086bc: 2005883a mov r2,r4 + 80086c0: 18002d1e bne r3,zero,8008778 + 80086c4: 2906b03a or r3,r5,r4 + 80086c8: 18c000cc andi r3,r3,3 + 80086cc: 1800351e bne r3,zero,80087a4 + 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 + 8008718: 3100030c andi r4,r6,12 + 800871c: 2acb883a add r5,r5,r11 + 8008720: 320003cc andi r8,r6,15 + 8008724: 20002226 beq r4,zero,80087b0 + 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 + 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 + 8008774: f800283a ret + 8008778: 2007883a mov r3,r4 + 800877c: 31ffffc4 addi r7,r6,-1 + 8008780: 303ffc26 beq r6,zero,8008774 + 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 + 80087a0: f800283a ret + 80087a4: 31ffffc4 addi r7,r6,-1 + 80087a8: 2007883a mov r3,r4 + 80087ac: 003ff506 br 8008784 + 80087b0: 400d883a mov r6,r8 + 80087b4: 003ff106 br 800877c + +080087b8 : + 80087b8: 2005883a mov r2,r4 + 80087bc: 29000a2e bgeu r5,r4,80087e8 + 80087c0: 2989883a add r4,r5,r6 + 80087c4: 1100082e bgeu r2,r4,80087e8 + 80087c8: 1187883a add r3,r2,r6 + 80087cc: 30003e26 beq r6,zero,80088c8 + 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 + 80087e4: f800283a ret + 80087e8: 30c00430 cmpltui r3,r6,16 + 80087ec: 18000b26 beq r3,zero,800881c + 80087f0: 1007883a mov r3,r2 + 80087f4: 31ffffc4 addi r7,r6,-1 + 80087f8: 30003726 beq r6,zero,80088d8 + 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 + 8008818: f800283a ret + 800881c: 2886b03a or r3,r5,r2 + 8008820: 18c000cc andi r3,r3,3 + 8008824: 1800291e bne r3,zero,80088cc + 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 + 8008870: 3100030c andi r4,r6,12 + 8008874: 2a4b883a add r5,r5,r9 + 8008878: 320003cc andi r8,r6,15 + 800887c: 20001726 beq r4,zero,80088dc + 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 + 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 + 80088c8: f800283a ret + 80088cc: 31ffffc4 addi r7,r6,-1 + 80088d0: 1007883a mov r3,r2 + 80088d4: 003fc906 br 80087fc + 80088d8: f800283a ret + 80088dc: 400d883a mov r6,r8 + 80088e0: 003fc406 br 80087f4 + +080088e4 : + 80088e4: 20c000cc andi r3,r4,3 + 80088e8: 2005883a mov r2,r4 + 80088ec: 18003626 beq r3,zero,80089c8 + 80088f0: 31ffffc4 addi r7,r6,-1 + 80088f4: 30003326 beq r6,zero,80089c4 + 80088f8: 2811883a mov r8,r5 + 80088fc: 2007883a mov r3,r4 + 8008900: 00000306 br 8008910 + 8008904: 39ffffc4 addi r7,r7,-1 + 8008908: 39bfffe0 cmpeqi r6,r7,-1 + 800890c: 30002d1e bne r6,zero,80089c4 + 8008910: 18c00044 addi r3,r3,1 + 8008914: 1a3fffc5 stb r8,-1(r3) + 8008918: 198000cc andi r6,r3,3 + 800891c: 303ff91e bne r6,zero,8008904 + 8008920: 39000130 cmpltui r4,r7,4 + 8008924: 2000221e bne r4,zero,80089b0 + 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 + 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 + 8008970: 3900030c andi r4,r7,12 + 8008974: 39c003cc andi r7,r7,15 + 8008978: 20000d26 beq r4,zero,80089b0 + 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 + 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 + 80089b4: 19cf883a add r7,r3,r7 + 80089b8: 18c00044 addi r3,r3,1 + 80089bc: 197fffc5 stb r5,-1(r3) + 80089c0: 38fffd1e bne r7,r3,80089b8 + 80089c4: f800283a ret + 80089c8: 2007883a mov r3,r4 + 80089cc: 300f883a mov r7,r6 + 80089d0: 003fd306 br 8008920 + +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 + 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 : + 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 + 80099fc: 80800e17 ldw r2,56(r16) + 8009a00: 10000f26 beq r2,zero,8009a40 + 8009a04: 28800217 ldw r2,8(r5) + 8009a08: 10bfffc4 addi r2,r2,-1 + 8009a0c: 28800215 stw r2,8(r5) + 8009a10: 10001316 blt r2,zero,8009a60 + 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 + 8009a60: 28c00617 ldw r3,24(r5) + 8009a64: 10c00a16 blt r2,r3,8009a90 + 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 + 8009a80: 18800044 addi r2,r3,1 + 8009a84: 28800015 stw r2,0(r5) + 8009a88: 18800003 ldbu r2,0(r3) + 8009a8c: 003fe706 br 8009a2c + 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 + +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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 : + 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 : + 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 + 800bd80: 80800e17 ldw r2,56(r16) + 800bd84: 10001026 beq r2,zero,800bdc8 + 800bd88: 2880030b ldhu r2,12(r5) + 800bd8c: 10c8000c andi r3,r2,8192 + 800bd90: 1800051e bne r3,zero,800bda8 + 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 + +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 + 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 + 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 + 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 + 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 : + 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 + 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 + 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 : + 800c03c: 2080030b ldhu r2,12(r4) + 800c040: 1080024c andi r2,r2,9 + 800c044: 10800258 cmpnei r2,r2,9 + 800c048: 10000226 beq r2,zero,800c054 + 800c04c: 0005883a mov r2,zero + 800c050: f800283a ret + 800c054: 8006d3c1 jmpi 8006d3c + +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 : + 800c224: 2144b03a or r2,r4,r5 + 800c228: 108000cc andi r2,r2,3 + 800c22c: 1000171e bne r2,zero,800c28c + 800c230: 20800017 ldw r2,0(r4) + 800c234: 28c00017 ldw r3,0(r5) + 800c238: 10c0141e bne r2,r3,800c28c + 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 + 800c260: 00002406 br 800c2f4 + 800c264: 1000231e bne r2,zero,800c2f4 + 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 + 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 + 800c2a0: 29800007 ldb r6,0(r5) + 800c2a4: 10803fcc andi r2,r2,255 + 800c2a8: 19800326 beq r3,r6,800c2b8 + 800c2ac: 00000a06 br 800c2d8 + 800c2b0: 29800007 ldb r6,0(r5) + 800c2b4: 11800b1e bne r2,r6,800c2e4 + 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 + 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 : + 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 + 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 + 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 + 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 + +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 + 800e654: 0800e694 ori zero,at,922 + 800e658: 0800e6a4 muli zero,at,922 + 800e65c: 0800e840 call 800e84 + 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 : +#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 + 800f804: e0bfff15 stw r2,-4(fp) + + if ((dev) && dev->open) + 800f808: e0bfff17 ldw r2,-4(fp) + 800f80c: 10000926 beq r2,zero,800f834 + 800f810: e0bfff17 ldw r2,-4(fp) + 800f814: 10800317 ldw r2,12(r2) + 800f818: 10000626 beq r2,zero,800f834 + { + 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 + } + + 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 : + +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 + 800f868: e0bfff17 ldw r2,-4(fp) + 800f86c: 10800417 ldw r2,16(r2) + 800f870: 10000526 beq r2,zero,800f888 + { + 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 : +#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 + 800f8b8: d0a02717 ldw r2,-32612(gp) + 800f8bc: 103ee83a callr r2 + 800f8c0: 00000106 br 800f8c8 + 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 : +} + +#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 + 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 + 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 + { + /* 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 + { + 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 + * 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 + } + } + else + { + ALT_ERRNO = EBADFD; + 800f964: 800f8a00 call 800f8a0 + 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 : +{ + 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 + 800f9a4: d0a02717 ldw r2,-32612(gp) + 800f9a8: 103ee83a callr r2 + 800f9ac: 00000106 br 800f9b4 + 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 : + * + * 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 + 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 + 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 + /* + * 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 + { + return 1; + 800fa1c: 00800044 movi r2,1 + 800fa20: 00000d06 br 800fa58 + * 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 + 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 + } + } + else + { + ALT_ERRNO = EBADFD; + 800fa44: 800f98c0 call 800f98c + 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 : +{ + 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 + 800fa84: d0a02717 ldw r2,-32612(gp) + 800fa88: 103ee83a callr r2 + 800fa8c: 00000106 br 800fa94 + 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 : + * 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 + 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 + 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 + /* + * 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 + { + 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 + * Otherwise return an error. + */ + + else + { + rc = -ENOTSUP; + 800fb2c: 00bfde84 movi r2,-134 + 800fb30: e0bfff15 stw r2,-4(fp) + 800fb34: 00000206 br 800fb40 + } + } + 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 + { + ALT_ERRNO = -rc; + 800fb48: 800fa6c0 call 800fa6c + 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 : + * 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 + + /* 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 + 800fb98: 01000044 movi r4,1 + 800fb9c: 80157740 call 8015774 + 800fba0: d0a04815 stw r2,-32480(gp) + 800fba4: 01000044 movi r4,1 + 800fba8: 80157740 call 8015774 + 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 + 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 + * 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 + /* + * 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 + 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
    + 800fc24: e0bfff15 stw r2,-4(fp) + close(STDOUT_FILENO); + 800fc28: 01000044 movi r4,1 + 800fc2c: 8022a600 call 8022a60 + exit (result); + 800fc30: e13fff17 ldw r4,-4(fp) + 800fc34: 8042abc0 call 8042abc + +0800fc38 : +#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 + 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 + } +#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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + 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 + 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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + 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 + 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 + 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 + 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 + 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 + } + (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 + 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 : +********************************************************************************************************* +*/ +/*$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 + 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 + 801022c: 10c000e0 cmpeqi r3,r2,3 + 8010230: 1800091e bne r3,zero,8010258 + 8010234: 10800060 cmpeqi r2,r2,1 + 8010238: 1000091e bne r2,zero,8010260 +#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 + break; + 8010250: 0001883a nop + 8010254: 00000306 br 8010264 + break; + 8010258: 0001883a nop + 801025c: 00000106 br 8010264 + 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 + } + + 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 + *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 + } + 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 + *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 + 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 + 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 + 801031c: 10c000e0 cmpeqi r3,r2,3 + 8010320: 1800031e bne r3,zero,8010330 + 8010324: 10800060 cmpeqi r2,r2,1 + 8010328: 10001e1e bne r2,zero,80103a4 + 801032c: 00006606 br 80104c8 +#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 + 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 + 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 +#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 + /* ... 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 + 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 +#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 + /* ... 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 + 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 + 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 + 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 + } + 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 + } + + 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 + *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 + } +/*$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 + 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 + 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 + 80105cc: 10800098 cmpnei r2,r2,2 + 80105d0: 1000181e bne r2,zero,8010634 + 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 + *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 + 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 + break; + 8010630: 00000506 br 8010648 + + 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 + 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 + 8010658: 108000a0 cmpeqi r2,r2,2 + 801065c: 1000231e bne r2,zero,80106ec + 8010660: 00002a06 br 801070c + 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 + 8010674: 10c000d0 cmplti r3,r2,3 + 8010678: 1800071e bne r3,zero,8010698 + 801067c: 108000d8 cmpnei r2,r2,3 + 8010680: 10000c1e bne r2,zero,80106b4 +#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 + +#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 + 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 + } + *perr = OS_ERR_NONE; + 80106e0: e0800217 ldw r2,8(fp) + 80106e4: 10000005 stb zero,0(r2) + break; + 80106e8: 00001006 br 801072c + + 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 + + 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 : +* 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 + + OS_InitMisc(); /* Initialize miscellaneous variables */ + 8010790: 80113a00 call 80113a0 + + OS_InitRdyList(); /* Initialize the Ready List */ + 8010794: 80113dc0 call 80113dc + + OS_InitTCBList(); /* Initialize the free list of OS_TCBs */ + 8010798: 80114cc0 call 80114cc + + OS_InitEventList(); /* Initialize the free list of OS_EVENTs */ + 801079c: 80112c00 call 80112c0 + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) + OS_FlagInit(); /* Initialize the event flag structures */ + 80107a0: 8012ed80 call 8012ed8 +#endif + +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) + OS_MemInit(); /* Initialize the memory manager */ + 80107a4: 80136580 call 8013658 +#endif + +#if (OS_Q_EN > 0) && (OS_MAX_QS > 0) + OS_QInit(); /* Initialize the message queue structures */ + 80107a8: 801562c0 call 801562c +#endif + + OS_InitTaskIdle(); /* Create the Idle Task */ + 80107ac: 80114480 call 8011448 + +#if OS_TMR_EN > 0 + OSTmr_Init(); /* Initialize the Timer Manager */ +#endif + + OSInitHookEnd(); /* Call port specific init. code */ + 80107b0: 80386780 call 8038678 + +#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 : +* 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 + 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 + 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 : +* 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 + 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 + 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 + if (OSLockNesting == 0) { /* ... and not locked. */ + 8010880: d0a04b03 ldbu r2,-32468(gp) + 8010884: 10803fcc andi r2,r2,255 + 8010888: 1000151e bne r2,zero,80108e0 + OS_SchedNew(); + 801088c: 80117340 call 8011734 + 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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + 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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + 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 + 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 + 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 + 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 + } + } else { + OS_EXIT_CRITICAL(); + } + } +} + 8010a1c: 00000e06 br 8010a58 + 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 + 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 + 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 : +* 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 + OS_SchedNew(); /* Find highest priority's task priority number */ + 8010a8c: 80117340 call 8011734 + 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 + } +} + 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 : +* 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 + 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 + } + 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 + 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 + 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 + /* 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 + 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 + } 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 + 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 + 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 : +* 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 : +********************************************************************************************************* +*/ + +#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 : +* 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 + 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 +#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_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 + 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 : +* 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 + 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 : +* 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 + 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 + } + + 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 + 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 : +********************************************************************************************************* +*/ +#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 + 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 : +********************************************************************************************************* +*/ +#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 + 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 + 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 + } +} + 8011244: 0001883a nop + 8011248: e037883a mov sp,fp + 801124c: df000017 ldw fp,0(sp) + 8011250: dec00104 addi sp,sp,4 + 8011254: f800283a ret + +08011258 : +* 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 + *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 + } +} + 80112ac: 0001883a nop + 80112b0: e037883a mov sp,fp + 80112b4: df000017 ldw fp,0(sp) + 80112b8: dec00104 addi sp,sp,4 + 80112bc: f800283a ret + +080112c0 : +* 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 + 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 + 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 + } + 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 : +* 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 : +* 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 + *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 + } + + 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 : +* 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 + 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 +#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 : +* 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((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 + 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 + 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 + } + 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 : +* 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 + *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 + } +} + 80115f0: 0001883a nop + 80115f4: e037883a mov sp,fp + 80115f8: df000017 ldw fp,0(sp) + 80115fc: dec00104 addi sp,sp,4 + 8011600: f800283a ret + +08011604 : +* 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 + *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 + } +} + 8011658: 0001883a nop + 801165c: e037883a mov sp,fp + 8011660: df000017 ldw fp,0(sp) + 8011664: dec00104 addi sp,sp,4 + 8011668: f800283a ret + +0801166c : +* 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 + 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_SchedNew(); + 80116b8: 80117340 call 8011734 + 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 + 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 + 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 : +* 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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + *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 : +********************************************************************************************************* +*/ + +#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 + 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 + } + 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 : +* 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 + OS_ENTER_CRITICAL(); + 80118c0: 003fef06 br 8011880 + +080118c4 : +* 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 + 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 + + OSTaskCreateHook(ptcb); /* Call user defined hook */ + 8011a88: e13ffe17 ldw r4,-8(fp) + 8011a8c: 80385a40 call 80385a4 + 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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + 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 + 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 + } 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 + 8011c54: 10c00088 cmpgei r3,r2,2 + 8011c58: 1800021e bne r3,zero,8011c64 + 8011c5c: 10003f26 beq r2,zero,8011d5c + 8011c60: 00007706 br 8011e40 + 8011c64: 10c000a0 cmpeqi r3,r2,2 + 8011c68: 1800031e bne r3,zero,8011c78 + 8011c6c: 108000e0 cmpeqi r2,r2,3 + 8011c70: 10001e1e bne r2,zero,8011cec + 8011c74: 00007206 br 8011e40 + 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 + 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 + 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 + } + } 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 + + 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 + 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 + 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 + } + } 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 + +#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 + 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 + 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 + } + } 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 + + 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 + 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 + 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 + } + } 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 + 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 : +* 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 + *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 + 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 + /* 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + 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 + *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 + 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 + tasks_waiting = OS_TRUE; /* Yes */ + 8012008: 00800044 movi r2,1 + 801200c: e0bfffc5 stb r2,-1(fp) + 8012010: 00000106 br 8012018 + } 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 + 8012020: 10800060 cmpeqi r2,r2,1 + 8012024: 1000231e bne r2,zero,80120b4 + 8012028: 00004806 br 801214c + 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 +#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 + 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 + + 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 + (void)OS_FlagTaskRdy(pnode, (OS_FLAGS)0); + 80120c4: 000b883a mov r5,zero + 80120c8: e13ffe17 ldw r4,-8(fp) + 80120cc: 8012fb80 call 8012fb8 + 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 + } +#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 + OS_Sched(); /* Find highest priority task ready to run */ + 8012138: 801166c0 call 801166c + } + *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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 + } + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 + } + len = OS_StrLen(pname); /* Can we fit the string in the storage area? */ + 80122fc: e13ff817 ldw r4,-32(fp) + 8012300: 80118140 call 8011814 + 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 + 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 + } + (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 + 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 : +* 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 + *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 + } + 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 + *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 + } + 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 + *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 + } + 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 + 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 + } 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 + 8012478: 10c00088 cmpgei r3,r2,2 + 801247c: 1800021e bne r3,zero,8012488 + 8012480: 10006126 beq r2,zero,8012608 + 8012484: 0000bb06 br 8012774 + 8012488: 10c000a0 cmpeqi r3,r2,2 + 801248c: 1800031e bne r3,zero,801249c + 8012490: 108000e0 cmpeqi r2,r2,3 + 8012494: 10002f1e bne r2,zero,8012554 + 8012498: 0000b606 br 8012774 + 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 + 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 + 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 + } 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 + 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 + + 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 + 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 + 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 + } 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 + 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 + +#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 + 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 + 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 + } 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 + 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 + + 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 + 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 + 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 + } 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 + 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 + 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 + } +/*$PAGE*/ + OS_Sched(); /* Find next HPT ready to run */ + 801279c: 801166c0 call 801166c + 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 + 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 + 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 + 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 + + 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 + } + 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 + switch (wait_type) { + 8012858: e0bfe603 ldbu r2,-104(fp) + 801285c: 10001616 blt r2,zero,80128b8 + 8012860: 10c00090 cmplti r3,r2,2 + 8012864: 18000c1e bne r3,zero,8012898 + 8012868: 10800108 cmpgei r2,r2,4 + 801286c: 1000121e bne r2,zero,80128b8 + 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 + +#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 + 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 + } + } + 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 : +* 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 : +* 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 + *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 + 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 + 80129f0: 10800060 cmpeqi r2,r2,1 + 80129f4: 10000b1e bne r2,zero,8012a24 + 80129f8: 00001206 br 8012a44 + 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 + + 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 + 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 + } + 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 + 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 + 8012a90: 10c00088 cmpgei r3,r2,2 + 8012a94: 1800021e bne r3,zero,8012aa0 + 8012a98: 10002f26 beq r2,zero,8012b58 + 8012a9c: 00005b06 br 8012c0c + 8012aa0: 10c000a0 cmpeqi r3,r2,2 + 8012aa4: 1800031e bne r3,zero,8012ab4 + 8012aa8: 108000e0 cmpeqi r2,r2,3 + 8012aac: 1000171e bne r2,zero,8012b0c + 8012ab0: 00005606 br 8012c0c + 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 + 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 + 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 + sched = OS_TRUE; /* When done we will reschedule */ + 8012b00: 00800044 movi r2,1 + 8012b04: e0bffec5 stb r2,-5(fp) + } + } + break; + 8012b08: 00004906 br 8012c30 + + 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 + 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 + 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 + sched = OS_TRUE; /* When done we will reschedule */ + 8012b4c: 00800044 movi r2,1 + 8012b50: e0bffec5 stb r2,-5(fp) + } + } + break; + 8012b54: 00003806 br 8012c38 + +#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 + 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 + 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 + sched = OS_TRUE; /* When done we will reschedule */ + 8012bac: 00800044 movi r2,1 + 8012bb0: e0bffec5 stb r2,-5(fp) + } + } + break; + 8012bb4: 00002206 br 8012c40 + + 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 + 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 + 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 + sched = OS_TRUE; /* When done we will reschedule */ + 8012c00: 00800044 movi r2,1 + 8012c04: e0bffec5 stb r2,-5(fp) + } + } + break; + 8012c08: 00000f06 br 8012c48 + 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 + break; + 8012c30: 0001883a nop + 8012c34: 00000506 br 8012c4c + break; + 8012c38: 0001883a nop + 8012c3c: 00000306 br 8012c4c + break; + 8012c40: 0001883a nop + 8012c44: 00000106 br 8012c4c + 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 + 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 + OS_Sched(); + 8012c7c: 801166c0 call 801166c + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 : +* 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 + 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 + 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 : +* 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 + 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 + 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 + } + 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 : +* 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 + 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 + } else { + sched = OS_FALSE; + 8013088: e03fffc5 stb zero,-1(fp) + } + OS_FlagUnlink(pnode); + 801308c: e13ffd17 ldw r4,-12(fp) + 8013090: 80130ac0 call 80130ac + 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 : +* 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 + 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 + 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 + } + } 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 + 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 : +* 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 + 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 + *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 + } + 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 + *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 + } + *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 : +* 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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 + 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 + } + (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 + 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 : +* 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 + 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 + } + *(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 : +********************************************************************************************************* +*/ + +#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 : +* 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 + 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 + 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 + } + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + 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 + *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 + 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 + 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 + 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 + 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 + 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 : +* 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 + *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 + 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 + 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 + } + 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 + 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 + } + 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 + *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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + 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 + *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 + 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 + tasks_waiting = OS_TRUE; /* Yes */ + 8013ab8: 00800044 movi r2,1 + 8013abc: e0bfffc5 stb r2,-1(fp) + 8013ac0: 00000106 br 8013ac8 + } 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 + 8013ad0: 10800060 cmpeqi r2,r2,1 + 8013ad4: 10002d1e bne r2,zero,8013b8c + 8013ad8: 00007006 br 8013c9c + 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 +#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 + 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 + + 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 + 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 + 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 + } + } + while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for mutex */ + 8013be4: 00000506 br 8013bfc + (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 + 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 + } +#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 + OS_Sched(); /* Find highest priority task ready to run */ + 8013c88: 801166c0 call 801166c + } + *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 + 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 : +* 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 + *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 + } + 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 + *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 + } + 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 + *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 + 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 + 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 + 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 + 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 + } + 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 + 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 + 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 + 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 + 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 + } 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 + 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 + 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 + 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 + } 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 + 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 + 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 + 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 + 80141ac: 108000a0 cmpeqi r2,r2,2 + 80141b0: 1000041e bne r2,zero,80141c4 + 80141b4: 00000706 br 80141d4 + 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 + + 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 + + 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 + *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 : +* 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 + return (OS_ERR_POST_ISR); /* ... can't POST mutex from an ISR */ + 801425c: 00800144 movi r2,5 + 8014260: 00006e06 br 801441c +#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 + return (OS_ERR_EVENT_TYPE); + 8014278: 00800044 movi r2,1 + 801427c: 00006706 br 801441c + 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 + 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 + } + 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 + 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 + } + 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 + /* 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 + 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 + 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 + return (OS_ERR_PIP_LOWER); + 80143c4: 00801e04 movi r2,120 + 80143c8: 00001406 br 801441c + 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 + return (OS_ERR_NONE); + 80143e0: 0005883a mov r2,zero + 80143e4: 00000d06 br 801441c + } + } + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_QUERY_ISR); /* ... can't QUERY mutex from an ISR */ + 8014454: 00800184 movi r2,6 + 8014458: 00004406 br 801456c + } + 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 + return (OS_ERR_EVENT_TYPE); + 8014470: 00800044 movi r2,1 + 8014474: 00003d06 br 801456c + 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 + 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 + } 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 + *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 + 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 : +* 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 + 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 + } 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 : +* == (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 + return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */ + 8014844: 0005883a mov r2,zero + 8014848: 00005706 br 80149a8 + 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 + 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 + 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 + 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 + 8014978: 00000a06 br 80149a4 + } 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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + 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 + *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 + 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 + tasks_waiting = OS_TRUE; /* Yes */ + 8014a58: 00800044 movi r2,1 + 8014a5c: e0bfffc5 stb r2,-1(fp) + 8014a60: 00000106 br 8014a68 + } 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 + 8014a70: 10800060 cmpeqi r2,r2,1 + 8014a74: 1000301e bne r2,zero,8014b38 + 8014a78: 00005506 br 8014bd0 + 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 +#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 + 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 + + 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 + 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 + } +#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 + OS_Sched(); /* Find highest priority task ready to run */ + 8014bbc: 801166c0 call 801166c + } + *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 + 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 : +********************************************************************************************************* +*/ + +#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 : +* 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 + *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 + } + 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 + *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 + } + 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 + *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 + 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 + 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 + 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 + } + 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 + 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 + 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 + 8014e50: 108000a0 cmpeqi r2,r2,2 + 8014e54: 1000071e bne r2,zero,8014e74 + 8014e58: 00000b06 br 8014e88 + 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 + + 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 + + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 + 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 + (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 + 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 + } + break; + 8014fbc: 00000906 br 8014fe4 + + 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 + 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 + *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 + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_EVENT_TYPE); + 801506c: 00800044 movi r2,1 + 8015070: 00004306 br 8015180 + 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 + /* 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 + 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 + return (OS_ERR_NONE); + 80150cc: 0005883a mov r2,zero + 80150d0: 00002b06 br 8015180 + } + 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 + 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 + } + *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 + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_EVENT_TYPE); + 80151c4: 00800044 movi r2,1 + 80151c8: 00004506 br 80152e0 + 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 + /* 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 + 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 + return (OS_ERR_NONE); + 8015224: 0005883a mov r2,zero + 8015228: 00002d06 br 80152e0 + } + 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 + 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 + } + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_EVENT_TYPE); + 801532c: 00800044 movi r2,1 + 8015330: 00006a06 br 80154dc + 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 + 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 + while (pevent->OSEventGrp != 0) { /* Yes, Post to ALL tasks waiting on queue */ + 8015370: 00000506 br 8015388 + (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 + 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 + 8015398: 00000506 br 80153b0 + } + } 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 + 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 + OS_Sched(); /* Find highest priority task ready to run */ + 80153cc: 801166c0 call 801166c + } + return (OS_ERR_NONE); + 80153d0: 0005883a mov r2,zero + 80153d4: 00004106 br 80154dc + } + 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 + 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 + } + 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 + 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 + 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 + } 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 + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_EVENT_TYPE); + 801551c: 00800044 movi r2,1 + 8015520: 00003e06 br 801561c + 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 + *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 + } + 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 + 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 + } 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 : +* 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 + 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 + 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 + } + 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 : +********************************************************************************************************* +*/ + +#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 + return (0); + 80156fc: 0005883a mov r2,zero + 8015700: 00001806 br 8015764 + 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 + 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 : +* == (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 + return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */ + 801579c: 0005883a mov r2,zero + 80157a0: 00002506 br 8015838 + 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 + 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 + 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 + } + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + } + 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 + *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 + 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 + tasks_waiting = OS_TRUE; /* Yes */ + 80158e8: 00800044 movi r2,1 + 80158ec: e0bfffc5 stb r2,-1(fp) + 80158f0: 00000106 br 80158f8 + } 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 + 8015900: 10800060 cmpeqi r2,r2,1 + 8015904: 1000281e bne r2,zero,80159a8 + 8015908: 00004506 br 8015a20 + 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 +#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 + 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 + + 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 + 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 + } +#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 + OS_Sched(); /* Find highest priority task ready to run */ + 8015a0c: 801166c0 call 801166c + } + *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 + 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 : +* 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 + *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 + } + 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 + *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 + } + 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 + *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 + 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 + 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 + } + /* 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 + 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 + 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 + 8015bb8: 108000a0 cmpeqi r2,r2,2 + 8015bbc: 1000041e bne r2,zero,8015bd0 + 8015bc0: 00000706 br 8015be0 + 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 + + 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 + + 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 + *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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 + 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 + (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 + 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 + } + break; + 8015d04: 00000906 br 8015d2c + + 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 + 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 + *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 + 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 : +* 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 + return (OS_ERR_EVENT_TYPE); + 8015db0: 00800044 movi r2,1 + 8015db4: 00002e06 br 8015e70 + 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 + /* 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 + 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 + return (OS_ERR_NONE); + 8015e10: 0005883a mov r2,zero + 8015e14: 00001606 br 8015e70 + } + 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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_EVENT_TYPE); + 8015eb0: 00800044 movi r2,1 + 8015eb4: 00002b06 br 8015f64 + 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 + *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 + } + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 + } 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 + 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 + } 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 : +********************************************************************************************************* +*/ + +#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 + 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 + } + 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 + 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 + 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 + } + 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 + 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 + } +#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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + } + } +#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 + OS_Sched(); /* Find new highest priority task */ + 80164b0: 801166c0 call 801166c + } + 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 : +********************************************************************************************************* +*/ + +#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 + 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 + } + 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 + 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 + 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 + 80165b4: e0bffdc5 stb r2,-9(fp) + if (err == OS_ERR_NONE) { + 80165b8: e0bffdc3 ldbu r2,-9(fp) + 80165bc: 1000061e bne r2,zero,80165d8 + 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 + OS_Sched(); + 80165d0: 801166c0 call 801166c + 80165d4: 00001106 br 801661c + 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 + 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 : + 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 + 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 + } + 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 + 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 + 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 + 8016758: e0bffdc5 stb r2,-9(fp) + if (err == OS_ERR_NONE) { + 801675c: e0bffdc3 ldbu r2,-9(fp) + 8016760: 1000061e bne r2,zero,801677c + 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 + OS_Sched(); + 8016774: 801166c0 call 801166c + 8016778: 00001106 br 80167c0 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_TASK_DEL_ISR); + 8016818: 00801004 movi r2,64 + 801681c: 0000b406 br 8016af0 + } + 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 + return (OS_ERR_TASK_DEL_IDLE); + 801682c: 00800f84 movi r2,62 + 8016830: 0000af06 br 8016af0 + 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 + 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 + 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 + } + 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 + 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 + } + + 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 + 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 + 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 + } +#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 + 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 + } +#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 + OS_FlagUnlink(pnode); /* Remove from wait list */ + 80169a0: e13ffd17 ldw r4,-12(fp) + 80169a4: 80130ac0 call 80130ac + } +#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 + 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 + 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 + 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 + 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 + 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 + } 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 + OS_Sched(); /* Find new highest priority task */ + 8016ae8: 801166c0 call 801166c + } + 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 : +********************************************************************************************************* +*/ +/*$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 + return (OS_ERR_TASK_DEL_IDLE); + 8016b28: 00800f84 movi r2,62 + 8016b2c: 00003b06 br 8016c1c + 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 + 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 + 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 + 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 + } + 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 + 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 + } + 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 : +********************************************************************************************************* +*/ + +#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 + *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 + 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 + 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 + 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 + } + 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 + 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 + } + 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 + 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 : +* 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 + *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 + 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 + 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 + 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 + } + 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 + 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 + } + len = OS_StrLen(pname); /* Yes, Can we fit the string in the TCB? */ + 8016e48: e13ff617 ldw r4,-40(fp) + 8016e4c: 80118140 call 8011814 + 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 + 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 + } + (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 + 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 : +********************************************************************************************************* +*/ + +#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 + 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 + } + 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 + 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 + } + 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 + 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 + 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 + 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 + OS_Sched(); /* Find new highest priority task */ + 801701c: 801166c0 call 801166c + 8017020: 00000906 br 8017048 + 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 + 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 + 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 : +********************************************************************************************************* +*/ + +#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 + 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 + } 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 + self = OS_TRUE; + 80170ec: 00800044 movi r2,1 + 80170f0: e0bfffc5 stb r2,-1(fp) + 80170f4: 00000106 br 80170fc + } 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 + 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 + } + 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 + 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 + } + 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 + 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 + OS_Sched(); /* Find new highest priority task */ + 8017204: 801166c0 call 801166c + } + 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 : +********************************************************************************************************* +*/ + +#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 + 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 + 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 + } + 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 + 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 + } + /* 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 + 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 : +* 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 + return; + } + if (ticks > 0) { /* 0 means no delay! */ + 8017334: e0bffb0b ldhu r2,-20(fp) + 8017338: 10003026 beq r2,zero,80173fc + 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 + 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 + 80173f4: 00000106 br 80173fc + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_TIME_DLY_ISR); + 8017458: 00801544 movi r2,85 + 801745c: 00002506 br 80174f4 + 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 + while (loops > 0) { + 80174c8: 00000706 br 80174e8 + OSTimeDly((INT16U)32768u); + 80174cc: 01200014 movui r4,32768 + 80174d0: 801730c0 call 801730c + OSTimeDly((INT16U)32768u); + 80174d4: 01200014 movui r4,32768 + 80174d8: 801730c0 call 801730c + 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 + } + 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 : +********************************************************************************************************* +*/ + +#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 + return (OS_ERR_PRIO_INVALID); + 8017534: 00800a84 movi r2,42 + 8017538: 00006206 br 80176c4 + 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 + 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 + } + if (ptcb == OS_TCB_RESERVED) { + 8017594: e0bffe17 ldw r2,-8(fp) + 8017598: 10800058 cmpnei r2,r2,1 + 801759c: 1000061e bne r2,zero,80175b8 + 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 + } + 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 + 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 + } + + 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 + 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 + } 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 + 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 + 80176ac: 00000406 br 80176c0 + 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 : +********************************************************************************************************* +*/ + +#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 : +********************************************************************************************************* +*/ + +#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 : + */ + +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 +} + 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 : + * 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 + 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 : + * 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 + 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 + 8017840: 01020174 movhi r4,2053 + 8017844: 21310804 addi r4,r4,-15328 + 8017848: 80177940 call 8017794 + 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 + 8017860: 00800044 movi r2,1 + 8017864: e0bffe15 stw r2,-8(fp) + 8017868: e03fff15 stw zero,-4(fp) + 801786c: 00004e06 br 80179a8 + 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 + 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_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 + 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 + ALTERA_ONCHIP_FLASH_INIT ( ONCHIP_FLASH, onchip_flash); + 8017a08: 01020174 movhi r4,2053 + 8017a0c: 2131ac04 addi r4,r4,-14672 + 8017a10: 8020a800 call 8020a80 +} + 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 : +#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 + 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 : + * 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_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 + 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 : +#include +#include +#include +#include + +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 : + +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 : + * @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 + 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_dprintf(4, "WARNING : TX MSGDMA Timeout\n"); + 8017bec: 01020134 movhi r4,2052 + 8017bf0: 211e3404 addi r4,r4,30928 + 8017bf4: 8002d9c0 call 8002d9c + return ENP_RESOURCE; // avoid being stuck here + 8017bf8: 00bffa84 movi r2,-22 + 8017bfc: 00001906 br 8017c64 + 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 + } + } + + // 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 + 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 + 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_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 + return -1; + 8017c58: 00bfffc4 movi r2,-1 + 8017c5c: 00000106 br 8017c64 + } + + 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 : + * 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 + 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 + 8017cc8: 00bfffc4 movi r2,-1 + 8017ccc: 00000106 br 8017cd4 + + 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 : + * + */ +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 + 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 + 8017d38: 00bfffc4 movi r2,-1 + 8017d3c: 00000106 br 8017d44 + + 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 : + * 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 + 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 + 8017db0: e0bfff17 ldw r2,-4(fp) + 8017db4: 1089c410 cmplti r2,r2,10000 + 8017db8: 103ff51e bne r2,zero,8017d90 + + 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 : + * 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 : + * 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 : + * @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 + { + 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 + 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 + { + 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 + 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 + 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 + } + } + + /* 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 + 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 + 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 + return ALTERA_TSE_MALLOC_FAILED; + 8017fa0: 00bfffc4 movi r2,-1 + 8017fa4: 00001e06 br 8018020 + } + + /* 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 + 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 + + 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_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 + loop_end = 1; + 8018094: 00800044 movi r2,1 + 8018098: e0bff915 stw r2,-28(fp) + 801809c: 00000e06 br 80180d8 + } + 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 + 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 + } + 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 + return ALTERA_TSE_SYSTEM_DEF_ERROR; + 80180d0: 00bfffc4 movi r2,-1 + 80180d4: 00020306 br 80188e4 + } + + for(i = 0; i < loop_end; i++) { + 80180d8: e03ffa15 stw zero,-24(fp) + 80180dc: 0001fd06 br 80188d4 + + /* 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 + 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 + 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 + } + + /* Add MAC info to alt_tse_system_info structure */ + if(pmac == 0) { + 8018128: e0bff817 ldw r2,-32(fp) + 801812c: 1000081e bne r2,zero,8018150 + tse_dprintf(2, "ERROR : MAC system structure == NULL\n"); + 8018130: 01020134 movhi r4,2052 + 8018134: 211eb304 addi r4,r4,31436 + 8018138: 8002d9c0 call 8002d9c + 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 + return ALTERA_TSE_SYSTEM_DEF_ERROR; + 8018148: 00bfffc4 movi r2,-1 + 801814c: 0001e506 br 80188e4 + } + + 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 + tse_dprintf(2, "ERROR : MSGDMA system structure == NULL\n"); + 8018350: 01020134 movhi r4,2052 + 8018354: 211ecf04 addi r4,r4,31548 + 8018358: 8002d9c0 call 8002d9c + 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 + return ALTERA_TSE_SYSTEM_DEF_ERROR; + 801837c: 00bfffc4 movi r2,-1 + 8018380: 00015806 br 80188e4 + } + + 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 + 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 + 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 + 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 + return ALTERA_TSE_MALLOC_FAILED; + 8018408: 00bfffc4 movi r2,-1 + 801840c: 00013506 br 80188e4 + } + 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 + + 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 + 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 + 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 + 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 + return ALTERA_TSE_MALLOC_FAILED; + 80184c8: 00bfffc4 movi r2,-1 + 80184cc: 00010506 br 80188e4 + } + 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 + + 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 + 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 + } + 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 + 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 + } + 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 + 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 + } + 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 + 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 + 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 + 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 + } + + 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 : + * @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 + 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 + tse_dprintf(2, "ERROR : MAC system structure == NULL\n"); + 8018940: 01020134 movhi r4,2052 + 8018944: 211eb304 addi r4,r4,31436 + 8018948: 8002d9c0 call 8002d9c + 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 + return ALTERA_TSE_SYSTEM_DEF_ERROR; + 8018958: 00bfffc4 movi r2,-1 + 801895c: 00003306 br 8018a2c + } + + for(j = 0; j < max_mac_system; j++) { + 8018960: e03ffe15 stw zero,-8(fp) + 8018964: 00002606 br 8018a00 + + 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 + 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 + 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 + 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 + return ALTERA_TSE_SYSTEM_DEF_ERROR; + 80189bc: 00bfffc4 movi r2,-1 + 80189c0: 00001a06 br 8018a2c + } + + 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 + 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 + } + } + } + + 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 : +/* @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 + 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 +} + 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 : + * @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 + 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 +} + 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 : +/* @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 + 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 + return i; + 8018afc: e0bfff17 ldw r2,-4(fp) + 8018b00: 00000806 br 8018b24 + 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 + } + } + 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 : +/* @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 + 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 + return i; + 8018b68: e0bfff17 ldw r2,-4(fp) + 8018b6c: 00000806 br 8018b90 + 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 + } + } + 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 : +/* @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 + 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 + return i; + 8018bdc: e0bfff17 ldw r2,-4(fp) + 8018be0: 00000a06 br 8018c0c + 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 + } + } + + 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 : +/* @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 + 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 + 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 + return pmac_info; + 8018c90: e0bffc17 ldw r2,-16(fp) + 8018c94: 00001006 br 8018cd8 + 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 + 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 + } + } + } + + 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 : + * @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 + 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 + } + /* 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 + 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 + } + /* 10 Mbps */ + else if(speed == TSE_PHY_SPEED_10) { + 8018d74: e0bffd03 ldbu r2,-12(fp) + 8018d78: 1000081e bne r2,zero,8018d9c + 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 + } + else { + return ENP_PARAM; + 8018d9c: 00bffd84 movi r2,-10 + 8018da0: 00000506 br 8018db8 + } + + 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 : + * @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 + 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 + } + /* 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 + 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 + } + else { + return ENP_PARAM; + 8018e28: 00bffd84 movi r2,-10 + 8018e2c: 00000506 br 8018e44 + } + + 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 : + (((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 + 8018e8c: 00800084 movi r2,2 + 8018e90: 00000106 br 8018e98 + 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 + 8018ea8: 00800104 movi r2,4 + 8018eac: 00000106 br 8018eb4 + 8018eb0: 0005883a mov r2,zero + 8018eb4: 10c6b03a or r3,r2,r3 + 8018eb8: e0bffec3 ldbu r2,-5(fp) + 8018ebc: 1000021e bne r2,zero,8018ec8 + 8018ec0: 00800204 movi r2,8 + 8018ec4: 00000106 br 8018ecc + 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 + 8018edc: 00800074 movhi r2,1 + 8018ee0: 00000106 br 8018ee8 + 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 + alt_tse_phy_init(); + 8018f14: 801ae0c0 call 801ae0c + 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 + 8018f28: e0bffc15 stw r2,-16(fp) + + if(pmac_info == 0) { + 8018f2c: e0bffc17 ldw r2,-16(fp) + 8018f30: 1000481e bne r2,zero,8019054 + 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 + 8018f58: 00800084 movi r2,2 + 8018f5c: 00000106 br 8018f64 + 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 + 8018f74: 00800104 movi r2,4 + 8018f78: 00000106 br 8018f80 + 8018f7c: 0005883a mov r2,zero + 8018f80: 10c6b03a or r3,r2,r3 + 8018f84: e0bffec3 ldbu r2,-5(fp) + 8018f88: 1000021e bne r2,zero,8018f94 + 8018f8c: 00800204 movi r2,8 + 8018f90: 00000106 br 8018f98 + 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 + 8018fa8: 00800074 movhi r2,1 + 8018fac: 00000106 br 8018fb4 + 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 + 8018fcc: e0bffec3 ldbu r2,-5(fp) + 8018fd0: 10800060 cmpeqi r2,r2,1 + 8018fd4: 1000081e bne r2,zero,8018ff8 + 8018fd8: e0bffec3 ldbu r2,-5(fp) + 8018fdc: 1000031e bne r2,zero,8018fec + 8018fe0: 00820134 movhi r2,2052 + 8018fe4: 109f4c04 addi r2,r2,32048 + 8018fe8: 00000806 br 801900c + 8018fec: 00820134 movhi r2,2052 + 8018ff0: 109f4d04 addi r2,r2,32052 + 8018ff4: 00000506 br 801900c + 8018ff8: 00820134 movhi r2,2052 + 8018ffc: 109f4f04 addi r2,r2,32060 + 8019000: 00000206 br 801900c + 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 + 8019018: 00c20134 movhi r3,2052 + 801901c: 18df5204 addi r3,r3,32072 + 8019020: 00000206 br 801902c + 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 + 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 + return result; + 801904c: e0bfff17 ldw r2,-4(fp) + 8019050: 00021906 br 80198b8 + } + + 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 + 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 + 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 + { + 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 + 80190cc: 00800084 movi r2,2 + 80190d0: 00000106 br 80190d8 + 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 + 80190e8: 00800104 movi r2,4 + 80190ec: 00000106 br 80190f4 + 80190f0: 0005883a mov r2,zero + 80190f4: 10c6b03a or r3,r2,r3 + 80190f8: e0bffec3 ldbu r2,-5(fp) + 80190fc: 1000021e bne r2,zero,8019108 + 8019100: 00800204 movi r2,8 + 8019104: 00000106 br 801910c + 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 + 801911c: 00800074 movhi r2,1 + 8019120: 00000106 br 8019128 + 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 + if(psys->tse_phy_cfg) { + 8019140: e0bffa17 ldw r2,-24(fp) + 8019144: 10801217 ldw r2,72(r2) + 8019148: 10000d26 beq r2,zero,8019180 + 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 + 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 + } + 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 + 8019190: e0bffec3 ldbu r2,-5(fp) + 8019194: 10800060 cmpeqi r2,r2,1 + 8019198: 1000081e bne r2,zero,80191bc + 801919c: e0bffec3 ldbu r2,-5(fp) + 80191a0: 1000031e bne r2,zero,80191b0 + 80191a4: 00820134 movhi r2,2052 + 80191a8: 109f4c04 addi r2,r2,32048 + 80191ac: 00000806 br 80191d0 + 80191b0: 00820134 movhi r2,2052 + 80191b4: 109f4d04 addi r2,r2,32052 + 80191b8: 00000506 br 80191d0 + 80191bc: 00820134 movhi r2,2052 + 80191c0: 109f4f04 addi r2,r2,32060 + 80191c4: 00000206 br 80191d0 + 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 + 80191dc: 00c20134 movhi r3,2052 + 80191e0: 18df5204 addi r3,r3,32072 + 80191e4: 00000206 br 80191f0 + 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 + 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 + + /* 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 + 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 + 8019250: 00800084 movi r2,2 + 8019254: 00000106 br 801925c + 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 + 801926c: 00800104 movi r2,4 + 8019270: 00000106 br 8019278 + 8019274: 0005883a mov r2,zero + 8019278: 10c6b03a or r3,r2,r3 + 801927c: e0bffec3 ldbu r2,-5(fp) + 8019280: 1000021e bne r2,zero,801928c + 8019284: 00800204 movi r2,8 + 8019288: 00000106 br 8019290 + 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 + 80192a0: 00800074 movhi r2,1 + 80192a4: 00000106 br 80192ac + 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 + 80192cc: e0bffec3 ldbu r2,-5(fp) + 80192d0: 10800060 cmpeqi r2,r2,1 + 80192d4: 1000081e bne r2,zero,80192f8 + 80192d8: e0bffec3 ldbu r2,-5(fp) + 80192dc: 1000031e bne r2,zero,80192ec + 80192e0: 00820134 movhi r2,2052 + 80192e4: 109f4c04 addi r2,r2,32048 + 80192e8: 00000806 br 801930c + 80192ec: 00820134 movhi r2,2052 + 80192f0: 109f4d04 addi r2,r2,32052 + 80192f4: 00000506 br 801930c + 80192f8: 00820134 movhi r2,2052 + 80192fc: 109f4f04 addi r2,r2,32060 + 8019300: 00000206 br 801930c + 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 + 8019318: 00c20134 movhi r3,2052 + 801931c: 18df5204 addi r3,r3,32072 + 8019320: 00000206 br 801932c + 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 + 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 + } + + /* 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 + 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_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD); + 8019370: 01427104 movi r5,2500 + 8019374: e13ffd17 ldw r4,-12(fp) + 8019378: 801af180 call 801af18 + 801937c: 00000e06 br 80193b8 + } + 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 + 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_10(pphy, 0); + 80193a0: 000b883a mov r5,zero + 80193a4: e13ffd17 ldw r4,-12(fp) + 80193a8: 801bc080 call 801bc08 + 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 + } + + /* 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 + 80193c4: 10bfffd8 cmpnei r2,r2,-1 + 80193c8: 1000491e bne r2,zero,80194f0 + 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 + 80193f0: 00800084 movi r2,2 + 80193f4: 00000106 br 80193fc + 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 + 801940c: 00800104 movi r2,4 + 8019410: 00000106 br 8019418 + 8019414: 0005883a mov r2,zero + 8019418: 10c6b03a or r3,r2,r3 + 801941c: e0bffec3 ldbu r2,-5(fp) + 8019420: 1000021e bne r2,zero,801942c + 8019424: 00800204 movi r2,8 + 8019428: 00000106 br 8019430 + 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 + 8019440: 00800074 movhi r2,1 + 8019444: 00000106 br 801944c + 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 + 801946c: e0bffec3 ldbu r2,-5(fp) + 8019470: 10800060 cmpeqi r2,r2,1 + 8019474: 1000081e bne r2,zero,8019498 + 8019478: e0bffec3 ldbu r2,-5(fp) + 801947c: 1000031e bne r2,zero,801948c + 8019480: 00820134 movhi r2,2052 + 8019484: 109f4c04 addi r2,r2,32048 + 8019488: 00000806 br 80194ac + 801948c: 00820134 movhi r2,2052 + 8019490: 109f4d04 addi r2,r2,32052 + 8019494: 00000506 br 80194ac + 8019498: 00820134 movhi r2,2052 + 801949c: 109f4f04 addi r2,r2,32060 + 80194a0: 00000206 br 80194ac + 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 + 80194b8: 00c20134 movhi r3,2052 + 80194bc: 18df5204 addi r3,r3,32072 + 80194c0: 00000206 br 80194cc + 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 + 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 + } + + 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 + #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 + 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 + 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 + 801956c: 00800084 movi r2,2 + 8019570: 00000106 br 8019578 + 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 + 8019588: 00800104 movi r2,4 + 801958c: 00000106 br 8019594 + 8019590: 0005883a mov r2,zero + 8019594: 10c6b03a or r3,r2,r3 + 8019598: e0bffec3 ldbu r2,-5(fp) + 801959c: 1000021e bne r2,zero,80195a8 + 80195a0: 00800204 movi r2,8 + 80195a4: 00000106 br 80195ac + 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 + 80195bc: 00800074 movhi r2,1 + 80195c0: 00000106 br 80195c8 + 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 + } + // 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 + { + 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 + (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 + (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 + 8019624: 0005883a mov r2,zero + 8019628: 00000506 br 8019640 + 801962c: 008000c4 movi r2,3 + 8019630: 00000306 br 8019640 + 8019634: 00800044 movi r2,1 + 8019638: 00000106 br 8019640 + 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 + { + 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 + 8019678: 00006a06 br 8019824 + } + } + 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 + { + 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 + 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 + 80196d0: 00800084 movi r2,2 + 80196d4: 00000106 br 80196dc + 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 + 80196ec: 00800104 movi r2,4 + 80196f0: 00000106 br 80196f8 + 80196f4: 0005883a mov r2,zero + 80196f8: 10c6b03a or r3,r2,r3 + 80196fc: e0bffec3 ldbu r2,-5(fp) + 8019700: 1000021e bne r2,zero,801970c + 8019704: 00800204 movi r2,8 + 8019708: 00000106 br 8019710 + 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 + 8019720: 00800074 movhi r2,1 + 8019724: 00000106 br 801972c + 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 + } + 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 + 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 + 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 + 80197c0: 00800084 movi r2,2 + 80197c4: 00000106 br 80197cc + 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 + 80197dc: 00800104 movi r2,4 + 80197e0: 00000106 br 80197e8 + 80197e4: 0005883a mov r2,zero + 80197e8: 10c6b03a or r3,r2,r3 + 80197ec: e0bffec3 ldbu r2,-5(fp) + 80197f0: 1000021e bne r2,zero,80197fc + 80197f4: 00800204 movi r2,8 + 80197f8: 00000106 br 8019800 + 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 + 8019810: 00800074 movhi r2,1 + 8019814: 00000106 br 801981c + 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 + 8019838: e0bffec3 ldbu r2,-5(fp) + 801983c: 10800060 cmpeqi r2,r2,1 + 8019840: 1000081e bne r2,zero,8019864 + 8019844: e0bffec3 ldbu r2,-5(fp) + 8019848: 1000031e bne r2,zero,8019858 + 801984c: 00820134 movhi r2,2052 + 8019850: 109f4c04 addi r2,r2,32048 + 8019854: 00000806 br 8019878 + 8019858: 00820134 movhi r2,2052 + 801985c: 109f4d04 addi r2,r2,32052 + 8019860: 00000506 br 8019878 + 8019864: 00820134 movhi r2,2052 + 8019868: 109f4f04 addi r2,r2,32060 + 801986c: 00000206 br 8019878 + 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 + 8019884: 00c20134 movhi r3,2052 + 8019888: 18df5204 addi r3,r3,32072 + 801988c: 00000206 br 8019898 + 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 + 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 : +/* @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 : + * @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 : + * @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 + { + 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 + } + + /* 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 : + * @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 + { + 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 + } + + /* 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 : + * @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 + 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 + 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 + 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 + 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 + 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 + + /* -------------------------------------- */ + /* 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 + &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(&MV88E1145); + 8019de4: e0bfce04 addi r2,fp,-200 + 8019de8: 1009883a mov r4,r2 + 8019dec: 8017e840 call 8017e84 + 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(&DP83848C); + 8019dfc: e0bf9c04 addi r2,fp,-400 + 8019e00: 1009883a mov r4,r2 + 8019e04: 8017e840 call 8017e84 + alt_tse_phy_add_profile(&PEF7071); + 8019e08: e0bf8304 addi r2,fp,-500 + 8019e0c: 1009883a mov r4,r2 + 8019e10: 8017e840 call 8017e84 + + + 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 : +/* @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 + + for(i = 0; i < phy_profile_count; i++) + 8019e58: e03fffc5 stb zero,-1(fp) + 8019e5c: 00005d06 br 8019fd4 + { + 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 + 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 + + 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 + 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 + 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 + + 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 + + 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 + + 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 + + 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 + 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 + + } + + 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 : + * @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 + 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 + 801a04c: e0bffc17 ldw r2,-16(fp) + 801a050: 10800717 ldw r2,28(r2) + 801a054: 10018326 beq r2,zero,801a664 + 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 + + /* 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 + 801a084: e0bffd15 stw r2,-12(fp) + if(!pmac_group) { + 801a088: e0bffd17 ldw r2,-12(fp) + 801a08c: 1000081e bne r2,zero,801a0b0 + 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 + return ALTERA_TSE_MALLOC_FAILED; + 801a0a8: 00bfffc4 movi r2,-1 + 801a0ac: 00017506 br 801a684 + } + + /* 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 + 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 + 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 + tse_dprintf(6, "INFO : MDIO Shared = Yes\n"); + 801a0f8: 01020174 movhi r4,2053 + 801a0fc: 2120b004 addi r4,r4,-32064 + 801a100: 8002d9c0 call 8002d9c + 801a104: 00001f06 br 801a184 + } + 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 + 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 + tse_dprintf(6, "INFO : MDIO Shared = Yes\n"); + 801a134: 01020174 movhi r4,2053 + 801a138: 2120b004 addi r4,r4,-32064 + 801a13c: 8002d9c0 call 8002d9c + 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 + 801a15c: 00000906 br 801a184 + } + 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 + tse_dprintf(6, "INFO : MDIO Shared = No\n"); + 801a178: 01020174 movhi r4,2053 + 801a17c: 2120d004 addi r4,r4,-31936 + 801a180: 8002d9c0 call 8002d9c + } + + for(j = 0; j < pmac_group->channel; j++) { + 801a184: e03ffe85 stb zero,-6(fp) + 801a188: 00012106 br 801a610 + /* 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 + 801a194: e0bfff15 stw r2,-4(fp) + if(!pmac_info) { + 801a198: e0bfff17 ldw r2,-4(fp) + 801a19c: 10000a1e bne r2,zero,801a1c8 + 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 + return ALTERA_TSE_MALLOC_FAILED; + 801a1c0: 00bfffc4 movi r2,-1 + 801a1c4: 00012f06 br 801a684 + } + + 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 + 801a210: e0bfff17 ldw r2,-4(fp) + 801a214: 10800217 ldw r2,8(r2) + 801a218: 10800717 ldw r2,28(r2) + 801a21c: 1000091e bne r2,zero,801a244 + 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 + return ALTERA_TSE_SYSTEM_DEF_ERROR; + 801a23c: 00bfffc4 movi r2,-1 + 801a240: 00011006 br 801a684 + } + + /* 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 + 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 + 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 + } + 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 + } + } + 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 + 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 + 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 + 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 + + 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 + 801a318: 10c000a0 cmpeqi r3,r2,2 + 801a31c: 1800021e bne r3,zero,801a328 + 801a320: 10001126 beq r2,zero,801a368 + 801a324: 00001806 br 801a388 + 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 + break; + 801a344: 00001806 br 801a3a8 + 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 + break; + 801a364: 00001006 br 801a3a8 + 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 + break; + 801a384: 00000806 br 801a3a8 + 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 + 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 + 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 + 801a3d4: 00820174 movhi r2,2053 + 801a3d8: 10a13304 addi r2,r2,-31540 + 801a3dc: 00000206 br 801a3e8 + 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 + 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 + 801a414: 00820174 movhi r2,2053 + 801a418: 10a13304 addi r2,r2,-31540 + 801a41c: 00000206 br 801a428 + 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 + if(pmac_info->psys_info->tse_pcs_ena) { + 801a43c: 00006a06 br 801a5e8 + } + } + 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 + 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 + 801a45c: 10c000a0 cmpeqi r3,r2,2 + 801a460: 1800021e bne r3,zero,801a46c + 801a464: 10000d26 beq r2,zero,801a49c + 801a468: 00001206 br 801a4b4 + 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 + break; + 801a480: 00001206 br 801a4cc + 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 + break; + 801a498: 00000c06 br 801a4cc + 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 + break; + 801a4b0: 00000606 br 801a4cc + 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 + 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 + 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 + 801a4f4: 00820174 movhi r2,2053 + 801a4f8: 10a13304 addi r2,r2,-31540 + 801a4fc: 00000206 br 801a508 + 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 + 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 + 801a52c: 00820174 movhi r2,2053 + 801a530: 10a13304 addi r2,r2,-31540 + 801a534: 00000206 br 801a540 + 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 + } + } + + 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 + 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 + 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 + 801a5ac: 00000e06 br 801a5e8 + } + 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 + 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 + } + } + + /* 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 + } + + /* 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 + + } + } + 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 : +/* @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 + 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 + { + 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 + { + pphy = (alt_tse_phy_info *) malloc(sizeof(alt_tse_phy_info)); + 801a738: 01000704 movi r4,28 + 801a73c: 8042c980 call 8042c98 + 801a740: e0bff915 stw r2,-28(fp) + if(!pphy) { + 801a744: e0bff917 ldw r2,-28(fp) + 801a748: 1000091e bne r2,zero,801a770 + 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 + return ALTERA_TSE_MALLOC_FAILED; + 801a768: 00bfffc4 movi r2,-1 + 801a76c: 0000c806 br 801aa90 + } + + /* 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 + + /* 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 + 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 + { + 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 + is_phy_in_profile = 1; + 801a858: 00800044 movi r2,1 + 801a85c: e0bffac5 stb r2,-21(fp) + break; + 801a860: 00000706 br 801a880 + 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 + } + } + /* PHY not found in PHY profile */ + if(is_phy_in_profile == 0) { + 801a880: e0bffac3 ldbu r2,-21(fp) + 801a884: 10000f1e bne r2,zero,801a8c4 + 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 + 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 + 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 + 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 + 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 + + /* 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 + 801a90c: 1000341e bne r2,zero,801a9e0 + + 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 + + /* 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_100(pphy, 1); + 801a94c: 01400044 movi r5,1 + 801a950: e13ff917 ldw r4,-28(fp) + 801a954: 801b9b40 call 801b9b4 + alt_tse_phy_set_adv_10(pphy, 1); + 801a958: 01400044 movi r5,1 + 801a95c: e13ff917 ldw r4,-28(fp) + 801a960: 801bc080 call 801bc08 + + /* 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 + + /* 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 + 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 + 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 + 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 + 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 + 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 + + 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 + } + } + + TK_SLEEP(100); //Wait a little bit for PHY reset after specific configuration + 801aa14: 01001944 movi r4,101 + 801aa18: 801730c0 call 801730c + + + /* 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 + if(phy_info_count == 0) { + 801aa30: e0bffec7 ldb r2,-5(fp) + 801aa34: 1000061e bne r2,zero,801aa50 + 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 + 801aa4c: 00000b06 br 801aa7c + } + 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 + } + } + + /* 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 : + * @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 + 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 + 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 + mac_info_index = alt_tse_get_mac_info_index(pmac_info); + 801ab28: e13ffb17 ldw r4,-20(fp) + 801ab2c: 8018ba00 call 8018ba0 + 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 + 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 + is_mapped = 1; + 801ab7c: 00800044 movi r2,1 + 801ab80: e0bfffc5 stb r2,-1(fp) + break; + 801ab84: 00000806 br 801aba8 + 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 + } + } + + /* 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 + for(i = 0; i < pmac_group->channel; i++) { + 801abb0: e03ffe15 stw zero,-8(fp) + 801abb4: 00003506 br 801ac8c + 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 + 801abec: e0bffc17 ldw r2,-16(fp) + 801abf0: 10800717 ldw r2,28(r2) + 801abf4: 10002126 beq r2,zero,801ac7c + 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 + mac_info_index = alt_tse_get_mac_info_index(pmac_info); + 801ac08: e13ffb17 ldw r4,-20(fp) + 801ac0c: 8018ba00 call 8018ba0 + 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 + 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 + is_mapped = 1; + 801ac70: 00800044 movi r2,1 + 801ac74: e0bfffc5 stb r2,-1(fp) + break; + 801ac78: 00000906 br 801aca0 + 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 + } + } + } + + /* Still cannot find any matched MAC-PHY */ + if(is_mapped == 0) { + 801aca0: e0bfffc3 ldbu r2,-1(fp) + 801aca4: 1000091e bne r2,zero,801accc + 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 + 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 : +/* @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 + 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 + 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 + 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 + + 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 + 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 + 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 + } + 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 + 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 : +/* @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 + + /* display PHY in profile */ + alt_tse_phy_print_profile(); + 801ae30: 8019e300 call 8019e30 + + alt_tse_mac_group_init(); + 801ae34: 801a0000 call 801a000 + + /* 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 + 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 + + /* get connected PHYs */ + alt_tse_mac_get_phy(pmac_group); + 801ae70: e13ffe17 ldw r4,-8(fp) + 801ae74: 801a6980 call 801a698 + 801ae78: 00000706 br 801ae98 + } + 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 + } + + /* 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 + 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 + 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 + 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 + } + } + + 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 : + * 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 + 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 + 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 + 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 + + 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 + 801af98: 10000d1e bne r2,zero,801afd0 + 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 + + /* 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 + + return TSE_PHY_AN_NOT_CAPABLE; + 801afc8: 00bfff84 movi r2,-2 + 801afcc: 00003e06 br 801b0c8 + } + + /* 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 + + /* 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 + 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 + + 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 + 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 + 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 + + /* 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 + + return TSE_PHY_AN_NOT_COMPLETE; + 801b070: 00bfffc4 movi r2,-1 + 801b074: 00001406 br 801b0c8 + } + usleep(1000); + 801b078: 0100fa04 movi r4,1000 + 801b07c: 803811c0 call 803811c + 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 + 801b094: 103fe526 beq r2,zero,801b02c + } + 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 + + /* 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 + + 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 : + * 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 + 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 + 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 + 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 + /* 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 + 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_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 + { + 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 + /* 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 + 801b1ac: 10bfffd8 cmpnei r2,r2,-1 + 801b1b0: 10000d1e bne r2,zero,801b1e8 + { + 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 + + /* 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 + + return TSE_PHY_AN_NOT_COMPLETE; + 801b1e0: 00bfffc4 movi r2,-1 + 801b1e4: 00001a06 br 801b250 + } + } + usleep(1000); + 801b1e8: 0100fa04 movi r4,1000 + 801b1ec: 803811c0 call 803811c + 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 + 801b204: 103fd91e bne r2,zero,801b16c + ((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 + 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 + } + 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 + + /* 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 + + 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 : + * @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 + 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 + 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 + 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 + + 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 + 801b2e4: 10000d1e bne r2,zero,801b31c + 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 + + /* 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 + + return TSE_PHY_AN_NOT_CAPABLE; + 801b314: 00bfff84 movi r2,-2 + 801b318: 00013006 br 801b7dc + } + + /* 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 + + 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 + 801b33c: 1000021e bne r2,zero,801b348 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + tse_dprintf(6, "\n"); + 801b6d8: 01000284 movi r4,10 + 801b6dc: 8002cb80 call 8002cb8 + + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + tse_dprintf(6, "\n"); + 801b7c0: 01000284 movi r4,10 + 801b7c4: 8002cb80 call 8002cb8 + + /* 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 + + 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 : + * @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 + 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 + 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 + 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 + + /* if enable = 1, set advertisement based on PHY capability */ + if(enable) { + 801b860: e0bff903 ldbu r2,-28(fp) + 801b864: 10002d26 beq r2,zero,801b91c + 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 + 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 + 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 + + /* 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 + 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 + 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 + 801b918: 00001c06 br 801b98c + } + /* 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 + 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 + + /* 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 + 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 + } + + /* 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 + + 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 : + * @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 + 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 + 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 + 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 + + /* if enable = 1, set advertisement based on PHY capability */ + if(enable) { + 801ba24: e0bffb03 ldbu r2,-20(fp) + 801ba28: 10004326 beq r2,zero,801bb38 + 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 + 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 + 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 + + 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 + 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 + 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 + + 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 + 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 + 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 + 801bb34: 00002a06 br 801bbe0 + } + /* 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 + 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 + + 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 + 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 + + 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 + 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 + } + + /* 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 + + 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 : + * @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 + 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 + 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 + 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 + + /* if enable = 1, set advertisement based on PHY capability */ + if(enable) { + 801bc78: e0bff803 ldbu r2,-32(fp) + 801bc7c: 10002926 beq r2,zero,801bd24 + 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 + 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 + 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 + + 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 + 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 + 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 + 801bd20: 00001806 br 801bd84 + } + /* 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 + 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 + + 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 + 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 + } + + /* 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 + + 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 : +/* @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 + 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 + 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_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_100(pphy, 1); + 801be3c: 01400044 movi r5,1 + 801be40: e13ff917 ldw r4,-28(fp) + 801be44: 801b9b40 call 801b9b4 + alt_tse_phy_set_adv_10(pphy, 1); + 801be48: 01400044 movi r5,1 + 801be4c: e13ff917 ldw r4,-28(fp) + 801be50: 801bc080 call 801bc08 + } + tse_dprintf(6, "\n"); + 801be54: 01000284 movi r4,10 + 801be58: 8002cb80 call 8002cb8 + 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 + } + + /* loop through every PHY connected */ + for(i = 0; i < pmac_group->channel; i++) { + 801be7c: e03ffe15 stw zero,-8(fp) + 801be80: 00005506 br 801bfd8 + + 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 + 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 + 801bebc: 1000421e bne r2,zero,801bfc8 + 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 + common_1000 = 0; + 801bed8: e03fffc5 stb zero,-1(fp) + 801bedc: 00000706 br 801befc + } + 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 + 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 + continue; + 801bfc0: 0001883a nop + 801bfc4: 00000106 br 801bfcc + 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 + + } + + /* 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 + 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 + 801c014: 00002706 br 801c0b4 + } + else if(common_1000) { + 801c018: e0bfffc3 ldbu r2,-1(fp) + 801c01c: 10000926 beq r2,zero,801c044 + 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 + 801c040: 00001c06 br 801c0b4 + } + else if(common_100) { + 801c044: e0bffdc3 ldbu r2,-9(fp) + 801c048: 10000926 beq r2,zero,801c070 + 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 + 801c06c: 00001106 br 801c0b4 + } + else if(common_10) { + 801c070: e0bffd83 ldbu r2,-10(fp) + 801c074: 10000826 beq r2,zero,801c098 + 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 + 801c094: 00000706 br 801c0b4 + } + 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 + + 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 : + * @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 + 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 + 801c134: e0bff317 ldw r2,-52(fp) + 801c138: 108000d0 cmplti r2,r2,3 + 801c13c: 10000c1e bne r2,zero,801c170 + 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 + /* 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 + } + + /* loop through every PHY connected */ + for(i = 0; i < pmac_group->channel; i++) { + 801c170: e03ffc15 stw zero,-16(fp) + 801c174: 0000da06 br 801c4e0 + 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 + 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 + 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 + + /* 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 + 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 + 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 + 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 + 801c218: 00800044 movi r2,1 + 801c21c: 00000106 br 801c224 + 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 + 801c230: e0bff317 ldw r2,-52(fp) + 801c234: 10800098 cmpnei r2,r2,2 + 801c238: 10000d1e bne r2,zero,801c270 + 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 + /* 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 + } + + /* 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 + 801c284: 1000141e bne r2,zero,801c2d8 + + /* 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_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 + } + /* 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 + + /* continue to next PHY */ + continue; + 801c2d4: 00007f06 br 801c4d4 + } + + /* 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_adv_1000(pphy, 1); + 801c2e4: 01400044 movi r5,1 + 801c2e8: e13ffb17 ldw r4,-20(fp) + 801c2ec: 801b7f00 call 801b7f0 + 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_10(pphy, 1); + 801c2fc: 01400044 movi r5,1 + 801c300: e13ffb17 ldw r4,-20(fp) + 801c304: 801bc080 call 801bc08 + 801c308: 00002206 br 801c394 + } + 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_adv_1000(pphy, 0); + 801c318: 000b883a mov r5,zero + 801c31c: e13ffb17 ldw r4,-20(fp) + 801c320: 801b7f00 call 801b7f0 + 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_10(pphy, 1); + 801c330: 01400044 movi r5,1 + 801c334: e13ffb17 ldw r4,-20(fp) + 801c338: 801bc080 call 801bc08 + 801c33c: 00001506 br 801c394 + } + else if(common_speed == TSE_PHY_SPEED_10) { + 801c340: e0bff317 ldw r2,-52(fp) + 801c344: 10000a1e bne r2,zero,801c370 + 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_100(pphy, 0); + 801c354: 000b883a mov r5,zero + 801c358: e13ffb17 ldw r4,-20(fp) + 801c35c: 801b9b40 call 801b9b4 + alt_tse_phy_set_adv_10(pphy, 1); + 801c360: 01400044 movi r5,1 + 801c364: e13ffb17 ldw r4,-20(fp) + 801c368: 801bc080 call 801bc08 + 801c36c: 00000906 br 801c394 + } + 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_100(pphy, 0); + 801c37c: 000b883a mov r5,zero + 801c380: e13ffb17 ldw r4,-20(fp) + 801c384: 801b9b40 call 801b9b4 + alt_tse_phy_set_adv_10(pphy, 0); + 801c388: 000b883a mov r5,zero + 801c38c: e13ffb17 ldw r4,-20(fp) + 801c390: 801bc080 call 801bc08 + } + + /* 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 + 801c3a8: 10800058 cmpnei r2,r2,1 + 801c3ac: 10003a1e bne r2,zero,801c498 + + /* 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 + + /* 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 + 801c3ec: e0bffdc5 stb r2,-9(fp) + 801c3f0: 00000e06 br 801c42c + } + + /* 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 + 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_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD); + 801c438: 01427104 movi r5,2500 + 801c43c: e13ffb17 ldw r4,-20(fp) + 801c440: 801af180 call 801af18 + } + + /* 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 + 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 + + } + 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 + 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 + 801c4cc: 00000106 br 801c4d4 + 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 + } + 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 + 801c504: e0bff317 ldw r2,-52(fp) + 801c508: 10800058 cmpnei r2,r2,1 + 801c50c: 1000021e bne r2,zero,801c518 + 801c510: 00801904 movi r2,100 + 801c514: 00000306 br 801c524 + 801c518: 00800284 movi r2,10 + 801c51c: 00000106 br 801c524 + 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 + + /* 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 + + /* 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 : + +/* @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 + tse_dprintf(5, "MARVELL : Enabling auto crossover\n"); + 801c5a4: 01020174 movhi r4,2053 + 801c5a8: 2124fc04 addi r4,r4,-27664 + 801c5ac: 8002d9c0 call 8002d9c + 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 + 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 : + +/* @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 + 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 + 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 + 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 : + +/* @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 + 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 + 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 + 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 : + +/* @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 + 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 + 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 + 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 : + +/* @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 + 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 + } + /* 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 + 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 : +/* @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 : +/* @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 + 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 + 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 + 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 + 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 : + * + */ + +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 + 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 : + +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 + 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 : + +#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 +} + 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 : + 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 + 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 + 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 + 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 + 801cbec: 0005883a mov r2,zero + 801cbf0: 00000106 br 801cbf8 + 801cbf4: 00bfffc4 movi r2,-1 + error = ALT_FLAG_CREATE (&sp->events, 0) || + 801cbf8: 1000121e bne r2,zero,801cc44 + 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 + 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 + 801cc34: 0005883a mov r2,zero + 801cc38: 00000106 br 801cc40 + 801cc3c: 00bfffc4 movi r2,-1 + ALT_SEM_CREATE (&sp->read_lock, 1) || + 801cc40: 10000226 beq r2,zero,801cc4c + 801cc44: 00800044 movi r2,1 + 801cc48: 00000106 br 801cc50 + 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 + { + /* 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 + 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 : +#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_rxirq(sp, status); + 801cd10: e17ffd17 ldw r5,-12(fp) + 801cd14: e13fff17 ldw r4,-4(fp) + 801cd18: 801cd4c0 call 801cd4c + } + + /* 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_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 + } + + +} + 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 : + * 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 + * 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 + { + 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 + { + 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 + } + + /* 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 + { + 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 + 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 : + * 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 + /* + * 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 + (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 + * 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 + { + 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 + 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 + 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 + * 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 + { + 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 + { + 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 : + * 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 + if (flags & O_NONBLOCK) { + 801d038: e0bffe17 ldw r2,-8(fp) + 801d03c: 1090000c andi r2,r2,16384 + 801d040: 10000226 beq r2,zero,801d04c + return -EWOULDBLOCK; + 801d044: 00bffd44 movi r2,-11 + 801d048: 00000606 br 801d064 + 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 + } + } + + 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 : +{ + 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 + 801d08c: d0a02717 ldw r2,-32612(gp) + 801d090: 103ee83a callr r2 + 801d094: 00000106 br 801d09c + 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 : + */ + +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 + /* + * 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 + { + 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 + 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 + /* + * 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 + 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 + { + if (!block) + 801d1a0: e0bffd17 ldw r2,-12(fp) + 801d1a4: 1000071e bne r2,zero,801d1c4 + { + /* Set errno to indicate the reason we're not returning any data */ + + ALT_ERRNO = EWOULDBLOCK; + 801d1a8: 801d0740 call 801d074 + 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 + 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 + 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 + OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME, + 0); + } + } + } + while (!count && len); + 801d274: e0bffe17 ldw r2,-8(fp) + 801d278: 1000021e bne r2,zero,801d284 + 801d27c: e0bfef17 ldw r2,-68(fp) + 801d280: 103fb81e bne r2,zero,801d164 + /* + * 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 + 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 + return -EWOULDBLOCK; + 801d2f8: 00bffd44 movi r2,-11 + 801d2fc: 00000106 br 801d304 + } + 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 : +{ + 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 + 801d330: d0a02717 ldw r2,-32612(gp) + 801d334: 103ee83a callr r2 + 801d338: 00000106 br 801d340 + 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 : + */ + +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 + * 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 + { + /* 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 + { + if (no_block) + 801d3d8: e0bffe17 ldw r2,-8(fp) + 801d3dc: 10000526 beq r2,zero,801d3f4 + { + /* Set errno to indicate why this function returned early */ + + ALT_ERRNO = EWOULDBLOCK; + 801d3e0: 801d3180 call 801d318 + 801d3e4: 1007883a mov r3,r2 + 801d3e8: 008002c4 movi r2,11 + 801d3ec: 18800015 stw r2,0(r3) + break; + 801d3f0: 00004206 br 801d4fc + 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 + 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 + 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 + } + } + + 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 + /* + * 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 + 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 : + +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 +} + 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 : + * -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 + { + return -EINVAL; + 801d5ec: 00bffa84 movi r2,-22 + 801d5f0: 00003106 br 801d6b8 + } + + 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 + 801d634: e0bffc15 stw r2,-16(fp) + if(status != 0) + 801d638: e0bffc17 ldw r2,-16(fp) + 801d63c: 10000226 beq r2,zero,801d648 + { + return status; + 801d640: e0bffc17 ldw r2,-16(fp) + 801d644: 00001c06 br 801d6b8 + } + + 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 + { + return -ENOLCK; + 801d6ac: 00bff484 movi r2,-46 + 801d6b0: 00000106 br 801d6b8 + } + + 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_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 + 801d6f0: e0bffd17 ldw r2,-12(fp) + 801d6f4: 10000226 beq r2,zero,801d700 + 801d6f8: e0bffc17 ldw r2,-16(fp) + 801d6fc: 1000021e bne r2,zero,801d708 + { + return -EINVAL; + 801d700: 00bffa84 movi r2,-22 + 801d704: 00001006 br 801d748 + } + + 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 + { + return -EIO; + 801d72c: 00bffec4 movi r2,-5 + 801d730: 00000506 br 801d748 + } + 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 : + * 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 + { + return -EINVAL; + 801d788: 00bffa84 movi r2,-22 + 801d78c: 00003606 br 801d868 + } + + 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 + || (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 + || (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 + { + return -EINVAL; + 801d7c8: 00bffa84 movi r2,-22 + 801d7cc: 00002606 br 801d868 + } + + /* 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 + 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 + } + + 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 : + 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 + || data_offset < 0 + 801d8c0: e0bff617 ldw r2,-40(fp) + 801d8c4: 10001c16 blt r2,zero,801d938 + || NULL == flash_info + 801d8c8: e0bff817 ldw r2,-32(fp) + 801d8cc: 10001a26 beq r2,zero,801d938 + || NULL == data + 801d8d0: e0bff517 ldw r2,-44(fp) + 801d8d4: 10001826 beq r2,zero,801d938 + || 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 + || 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 + || 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 + || length < 0 + 801d918: e0800217 ldw r2,8(fp) + 801d91c: 10000616 blt r2,zero,801d938 + || (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 + { + return -EINVAL; + 801d938: 00bffa84 movi r2,-22 + 801d93c: 00004e06 br 801da78 + * 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 + { + /* + * 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 + { + 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 + { + return -EINVAL; + 801d9ac: 00bffa84 movi r2,-22 + 801d9b0: 00003106 br 801da78 + } + } + 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 + { + 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 + + /* 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 + 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 + } + + /* 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 + } + + 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_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 + 801dad4: e0bff417 ldw r2,-48(fp) + 801dad8: 1000021e bne r2,zero,801dae4 + { + return -EINVAL; + 801dadc: 00bffa84 movi r2,-22 + 801dae0: 00005f06 br 801dc60 + } + + 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 + 801db04: e0bfff15 stw r2,-4(fp) + + if(0 != ret_code) + 801db08: e0bfff17 ldw r2,-4(fp) + 801db0c: 10000226 beq r2,zero,801db18 + { + return ret_code; + 801db10: e0bfff17 ldw r2,-4(fp) + 801db14: 00005206 br 801dc60 + + /* + * 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_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 + { + 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 + { + 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 + 801db90: e0bfff15 stw r2,-4(fp) + + if(0 != ret_code) + 801db94: e0bfff17 ldw r2,-4(fp) + 801db98: 10000226 beq r2,zero,801dba4 + { + return ret_code; + 801db9c: e0bfff17 ldw r2,-4(fp) + 801dba0: 00002f06 br 801dc60 + } + + /* 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 + 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 + 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 + { + return ret_code; + 801dc00: e0bfff17 ldw r2,-4(fp) + 801dc04: 00001606 br 801dc60 + } + + /* 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 + 801dc54: 00000106 br 801dc5c + 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_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 + 801dca4: e0bffb17 ldw r2,-20(fp) + 801dca8: 1000021e bne r2,zero,801dcb4 + { + return -EINVAL; + 801dcac: 00bffa84 movi r2,-22 + 801dcb0: 00001606 br 801dd0c + } + + 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 + 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 + { + 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 + } + + 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 : + * 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 + { + return -EINVAL; + 801dd48: 00bffa84 movi r2,-22 + 801dd4c: 00008406 br 801df60 + } + + /* 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 + { + return -ENODEV; + 801dd5c: 00bffb44 movi r2,-19 + 801dd60: 00007f06 br 801df60 + * + * 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 + { + /* 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 + 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 + 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 + } + 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 + } + 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 + } + 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 + } + 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 + } + 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 + } + 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 + } + default: + { + return -ENODEV; + 801de3c: 00bffb44 movi r2,-19 + 801de40: 00004706 br 801df60 + } + } + } + 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 + 801de70: e0bfff17 ldw r2,-4(fp) + 801de74: 10800620 cmpeqi r2,r2,24 + 801de78: 1000091e bne r2,zero,801dea0 + 801de7c: e0bfff17 ldw r2,-4(fp) + 801de80: 10800518 cmpnei r2,r2,20 + 801de84: 1000091e bne r2,zero,801deac + { + 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 + } + 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 + } + 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 + } + default: + { + return -ENODEV; + 801deac: 00bffb44 movi r2,-19 + 801deb0: 00002b06 br 801df60 + } + } + } + + /* 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 + 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 + { + 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 + } + 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 + + + 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_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 + { + return -EINVAL; + 801dfa0: 00bffa84 movi r2,-22 + 801dfa4: 00001606 br 801e000 + } + + 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 + 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 + length < 0 + ) + { + return -EINVAL; + 801dff4: 00bffa84 movi r2,-22 + 801dff8: 00000106 br 801e000 + } + + 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 : + * 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 + { + return -EINVAL; + 801e03c: 00bffa84 movi r2,-22 + 801e040: 00001106 br 801e088 + /* 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 +#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 + { + return -ETIME; + 801e058: 00bff084 movi r2,-62 + 801e05c: 00000a06 br 801e088 + } + + 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 +#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 : +{ + 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 + 801e0b4: d0a02717 ldw r2,-32612(gp) + 801e0b8: 103ee83a callr r2 + 801e0bc: 00000106 br 801e0c4 + 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 : + */ +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 + 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 + } + + 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 : + */ +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 + 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 + } + + 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() + * + * 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 + { + 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_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 + 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 + { + 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 + 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_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 + 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 + ) + { + return -EINVAL; + 801e458: 00bffa84 movi r2,-22 + 801e45c: 00000e06 br 801e498 + } + 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_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 + 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 + 801e51c: 58c0011e bne r11,r3,801e524 + 801e520: 12800f36 bltu r2,r10,801e560 + 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 + 801e544: 48c0011e bne r9,r3,801e54c + 801e548: 12000536 bltu r2,r8,801e560 + 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 + ) + { + return -EINVAL; + 801e560: 00bffa84 movi r2,-22 + 801e564: 00002106 br 801e5ec + } + + 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 : + */ +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 + (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 + { + /*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 + + /* + * 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 + + /* 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 + 801e714: e0bfef17 ldw r2,-68(fp) + 801e718: 10001c1e bne r2,zero,801e78c + { + /*writing descriptor structure to the dispatcher, wait until descriptor + write is succeed*/ + while(0 != alt_msgdma_write_standard_descriptor ( + 801e71c: 00001106 br 801e764 + dev->csr_base, dev->descriptor_base, standard_desc)) + { + alt_busy_sleep(1); /* delay 1us */ + 801e720: 01000044 movi r4,1 + 801e724: 8036f5c0 call 8036f5c + 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_printf("time out after 5 msec while waiting" + 801e734: 01020174 movhi r4,2053 + 801e738: 21254e04 addi r4,r4,-27336 + 801e73c: 8037a9c0 call 8037a9c + /* + * 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 + + return -ETIME; + 801e750: 00bff084 movi r2,-62 + 801e754: 00007306 br 801e924 + } + 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 + 801e784: 103fe61e bne r2,zero,801e720 + if (NULL != standard_desc && NULL == extended_desc) + 801e788: 00002706 br 801e828 + } + } + else if (NULL == standard_desc && NULL != extended_desc) + 801e78c: e0bff017 ldw r2,-64(fp) + 801e790: 10001f1e bne r2,zero,801e810 + 801e794: e0bfef17 ldw r2,-68(fp) + 801e798: 10001d26 beq r2,zero,801e810 + { + 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 + dev->csr_base, + dev->descriptor_base, + extended_desc)) + { + alt_busy_sleep(1); /* delay 1us */ + 801e7a4: 01000044 movi r4,1 + 801e7a8: 8036f5c0 call 8036f5c + 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_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 + /* + * 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 + + return -ETIME; + 801e7d4: 00bff084 movi r2,-62 + 801e7d8: 00005206 br 801e924 + } + 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 + 801e808: 103fe61e bne r2,zero,801e7a4 + else if (NULL == standard_desc && NULL != extended_desc) + 801e80c: 00000606 br 801e828 + { + /* + * 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 + + /* operation not permitted due to descriptor type conflict */ + return -EPERM; + 801e820: 00bfffc4 movi r2,-1 + 801e824: 00003f06 br 801e924 + * 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 + { + + 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 + * - 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 + + 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 : + */ +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 + (dev->descriptor_fifo_depth <= fifo_read_fill_level)) + { + alt_busy_sleep(1); /* delay 1us */ + 801e9a4: 01000044 movi r4,1 + 801e9a8: 8036f5c0 call 8036f5c + 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_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 + " for storing descriptor\n"); + return -ETIME; + 801e9c4: 00bff084 movi r2,-62 + 801e9c8: 0000d806 br 801ed2c + } + 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 + (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 + + /* + * 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 + 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 + 801eaa8: e0bfef17 ldw r2,-68(fp) + 801eaac: 10001d1e bne r2,zero,801eb24 + { + 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 + dev->csr_base, dev->descriptor_base, standard_desc)) + { + alt_busy_sleep(1); /* delay 1us */ + 801eab8: 01000044 movi r4,1 + 801eabc: 8036f5c0 call 8036f5c + 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_printf("time out after 5 msec while writing standard" + 801eacc: 01020174 movhi r4,2053 + 801ead0: 21258e04 addi r4,r4,-27080 + 801ead4: 8037a9c0 call 8037a9c + /* + * 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 + + return -ETIME; + 801eae8: 00bff084 movi r2,-62 + 801eaec: 00008f06 br 801ed2c + } + 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 + 801eb1c: 103fe61e bne r2,zero,801eab8 + if (NULL != standard_desc && NULL == extended_desc) + 801eb20: 00002706 br 801ebc0 + } + } + else if (NULL == standard_desc && NULL != extended_desc) + 801eb24: e0bff017 ldw r2,-64(fp) + 801eb28: 10001f1e bne r2,zero,801eba8 + 801eb2c: e0bfef17 ldw r2,-68(fp) + 801eb30: 10001d26 beq r2,zero,801eba8 + { + 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 + dev->csr_base, dev->descriptor_base, extended_desc)) + { + alt_busy_sleep(1); /* delay 1us */ + 801eb3c: 01000044 movi r4,1 + 801eb40: 8036f5c0 call 8036f5c + 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_printf("time out after 5 msec while writing extended" + 801eb50: 01020174 movhi r4,2053 + 801eb54: 21259f04 addi r4,r4,-27012 + 801eb58: 8037a9c0 call 8037a9c + /* + * 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 + + return -ETIME; + 801eb6c: 00bff084 movi r2,-62 + 801eb70: 00006e06 br 801ed2c + } + 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 + 801eba0: 103fe61e bne r2,zero,801eb3c + else if (NULL == standard_desc && NULL != extended_desc) + 801eba4: 00000606 br 801ebc0 + { + /* + * 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 + + /* operation not permitted due to descriptor type conflict */ + return -EPERM; + 801ebb8: 00bfffc4 movi r2,-1 + 801ebbc: 00005b06 br 801ed2c + * 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_busy_sleep(1); /* delay 1us */ + 801ec0c: 01000044 movi r4,1 + 801ec10: 8036f5c0 call 8036f5c + 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_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 + + /* + * 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 + + return -ETIME; + 801ec3c: 00bff084 movi r2,-62 + 801ec40: 00003a06 br 801ed2c + } + 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 + 801ec70: e0bfff17 ldw r2,-4(fp) + 801ec74: 1080004c andi r2,r2,1 + 801ec78: 103fe41e bne r2,zero,801ec0c + } + + + /*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 + { + /* + * 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 + + return error; + 801ec9c: e0bff917 ldw r2,-28(fp) + 801eca0: 00002206 br 801ed2c + } + + /* 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 + + 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 : + */ +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 + 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_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 + 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_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 + 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_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 + 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_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 + 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_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 + 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_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 + 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 + ) + { + return -EINVAL; + 801f04c: 00bffa84 movi r2,-22 + 801f050: 00001406 br 801f0a4 + } + 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_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 + 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 + 801f128: 58c0011e bne r11,r3,801f130 + 801f12c: 12800f36 bltu r2,r10,801f16c + 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 + 801f150: 48c0011e bne r9,r3,801f158 + 801f154: 12000536 bltu r2,r8,801f16c + 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 + ) + { + return -EINVAL; + 801f16c: 00bffa84 movi r2,-22 + 801f170: 00003106 br 801f238 + } + + 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_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 + 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_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 + 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_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 + 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_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 + 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_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 + 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_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 + 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 : + * 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 + { + return -EINVAL; /* this descriptor cannot be NULL */ + 801f55c: 00bffa84 movi r2,-22 + 801f560: 00002f06 br 801f620 + } + 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 + { + return -EINVAL; /* descriptor.next_ptr must point to itself */ + 801f574: 00bffa84 movi r2,-22 + 801f578: 00002906 br 801f620 + } + if (*list == NULL) + 801f57c: e0bffe17 ldw r2,-8(fp) + 801f580: 10800017 ldw r2,0(r2) + 801f584: 1000051e bne r2,zero,801f59c + { + *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 + } + 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 + { + return -EINVAL; /* this descriptor cannot already be root-node */ + 801f5ac: 00bffa84 movi r2,-22 + 801f5b0: 00001b06 br 801f620 + } + + /* 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 + { + 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 + { + return -EINVAL; /* descriptor cannot already be in the list */ + 801f5d4: 00bffa84 movi r2,-22 + 801f5d8: 00001106 br 801f620 + } + 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 + } + /* 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 : + +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 + { + return -EINVAL; /* this descriptor cannot be NULL */ + 801f64c: 00bffa84 movi r2,-22 + 801f650: 00005906 br 801f7b8 + } + + 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 + (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 + { + return -EINVAL; /* descriptor.next_ptr must point to itself */ + 801f688: 00bffa84 movi r2,-22 + 801f68c: 00004a06 br 801f7b8 + } + + if (*list == NULL) + 801f690: e13ffa17 ldw r4,-24(fp) + 801f694: 21000017 ldw r4,0(r4) + 801f698: 2000051e bne r4,zero,801f6b0 + { + *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 + } + 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 + { + return -EINVAL; /* this descriptor cannot already be root-node */ + 801f6c0: 00bffa84 movi r2,-22 + 801f6c4: 00003c06 br 801f7b8 + } + + /* 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 + || (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 + && (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 + { + return -EINVAL; /* descriptor cannot already be in the list */ + 801f724: 00bffa84 movi r2,-22 + 801f728: 00002306 br 801f7b8 + } + /* 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 + || (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 + } + /* 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 : + */ +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 + { + return -EINVAL; /* this list cannot be empty */ + 801f800: 00bffa84 movi r2,-22 + 801f804: 00002f06 br 801f8c4 + } + + /* 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 + { + /* 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 + } + /* 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 + { + 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 + } + 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_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 + } + + 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 : + */ +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 + { + return -EINVAL; /* this list cannot be empty */ + 801f910: 00bffa84 movi r2,-22 + 801f914: 00003e06 br 801fa10 + } + + /* 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 + || (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 + || (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 + } + /* 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 + { + 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 + } + 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_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 + } + + 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 : +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 + + /* 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 + /* 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 + return -EBUSY; + 801fac0: 00bffc04 movi r2,-16 + 801fac4: 00009606 br 801fd20 + } + + /* 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 + { + 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 + * - 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 + 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 + } + 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 + 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 + 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 + 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 + + 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_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 + 801fd90: 10000226 beq r2,zero,801fd9c + { + return -EINVAL; + 801fd94: 00bffa84 movi r2,-22 + 801fd98: 00000b06 br 801fdc8 + } + + 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 + 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_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 + 801fe40: 10000226 beq r2,zero,801fe4c + { + return -EINVAL; + 801fe44: 00bffa84 movi r2,-22 + 801fe48: 00000b06 br 801fe78 + } + + 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 + 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 : + * 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 + 801feb8: e0bfff15 stw r2,-4(fp) + + if (NULL == dev) + 801febc: e0bfff17 ldw r2,-4(fp) + 801fec0: 1000041e bne r2,zero,801fed4 + { + ALT_ERRNO = ENODEV; + 801fec4: 801e09c0 call 801e09c + 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 : + * 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 + { + /* 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 + } + + /* 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 + * 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 + { + /* 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 + + /* + * 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 + 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 + 8020038: 0005883a mov r2,zero + 802003c: 00000106 br 8020044 + 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 + { + /* 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 + else + { + alt_printf("failed to create semaphores\n"); + } + + return; + 802006c: 00000406 br 8020080 + alt_printf("failed to create semaphores\n"); + 8020070: 01020174 movhi r4,2053 + 8020074: 2125c204 addi r4,r4,-26872 + 8020078: 8037a9c0 call 8037a9c + 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 : +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 : + * -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 + +} + 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 : + * -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 +} + 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 : + * 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 +} + 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 : + * 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 +} + 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 : +{ + 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 +} + 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_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 + 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 + return -EFAULT; + 8020260: 00bffc84 movi r2,-14 + 8020264: 00001706 br 80202c4 + } + + 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 + + if (NULL != flash->csr_base) { + 802028c: e0bffe17 ldw r2,-8(fp) + 8020290: 10802f17 ldw r2,188(r2) + 8020294: 10000a26 beq r2,zero,80202c0 + 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 + /* 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_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 + { + /* 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 + { + ret_code = -ENOMEM; + 8020320: 00bffd04 movi r2,-12 + 8020324: e0bfff15 stw r2,-4(fp) + 8020328: 00000d06 br 8020360 + } + 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 + { + ret_code = -EFAULT; + 802033c: 00bffc84 movi r2,-14 + 8020340: e0bfff15 stw r2,-4(fp) + 8020344: 00000606 br 8020360 + } + else + { + if (NULL != info) + 8020348: e0bffc17 ldw r2,-16(fp) + 802034c: 10000426 beq r2,zero,8020360 + { + /* 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 : +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 + return -EFAULT; + 80203a8: 00bffc84 movi r2,-14 + 80203ac: 00004606 br 80204c8 + } + + /* 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 + 80203bc: e0bffe17 ldw r2,-8(fp) + 80203c0: 10802e17 ldw r2,184(r2) + 80203c4: 10000226 beq r2,zero,80203d0 + return -ENODEV; + 80203c8: 00bffb44 movi r2,-19 + 80203cc: 00003e06 br 80204c8 + } + + /* 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 + { + /* The address is not aligned */ + return -EINVAL; + 80203e8: 00bffa84 movi r2,-22 + 80203ec: 00003606 br 80204c8 + } + + /* 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 + 80203f8: e0bfff15 stw r2,-4(fp) + if (ret_code != 0) + 80203fc: e0bfff17 ldw r2,-4(fp) + 8020400: 10000226 beq r2,zero,802040c + { + return ret_code; + 8020404: e0bfff17 ldw r2,-4(fp) + 8020408: 00002f06 br 80204c8 + } + + /* 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 + 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 + 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 + 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 : + 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 + (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 + (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 + ) { + return -EFAULT; + 802054c: 00bffc84 movi r2,-14 + 8020550: 00009306 br 80207a0 + } + + /* 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 + 8020560: e0bffb17 ldw r2,-20(fp) + 8020564: 10802e17 ldw r2,184(r2) + 8020568: 10000226 beq r2,zero,8020574 + return -ENODEV; + 802056c: 00bffb44 movi r2,-19 + 8020570: 00008b06 br 80207a0 + } + + /* 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 + 802057c: e0bfff15 stw r2,-4(fp) + if (ret_code != 0) + 8020580: e0bfff17 ldw r2,-4(fp) + 8020584: 10000226 beq r2,zero,8020590 + { + return ret_code; + 8020588: e0bfff17 ldw r2,-4(fp) + 802058c: 00008406 br 80207a0 + } + + /* 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 + { + /* 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 + { + /* 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 + 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 + 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 + } 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 + 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 + 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 + 8020730: e0bfff15 stw r2,-4(fp) + if (ret_code != 0) + 8020734: e0bfff17 ldw r2,-4(fp) + 8020738: 10000a1e bne r2,zero,8020764 + { + 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 + 8020744: e0bfff15 stw r2,-4(fp) + if (ret_code != 0) + 8020748: e0bfff17 ldw r2,-4(fp) + 802074c: 1000071e bne r2,zero,802076c + { + 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 + 8020760: 00000306 br 8020770 + break; + 8020764: 0001883a nop + 8020768: 00000106 br 8020770 + 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_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 + 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 + { + return -EFAULT; + 8020818: 00bffc84 movi r2,-14 + 802081c: 00009306 br 8020a6c + } + + /* + * First and foremost which sectors are affected? + */ + for(i=0;idev.number_of_regions;i++) + 8020820: e03ffe15 stw zero,-8(fp) + 8020824: 00008206 br 8020a30 + { + /* 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 + (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 + { + 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;jdev.region_info[i].number_of_blocks;j++) + 8020890: e03ffd15 stw zero,-12(fp) + 8020894: 00005c06 br 8020a08 + { + if ((offset >= current_offset ) && + 8020898: e0fff617 ldw r3,-40(fp) + 802089c: e0bffc17 ldw r2,-16(fp) + 80208a0: 18804d16 blt r3,r2,80209d8 + (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 + { + /* + * 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 + 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 + 8020930: 10001326 beq r2,zero,8020980 + { + 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 + { + 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 + 802098c: e0bfff17 ldw r2,-4(fp) + 8020990: 10002c1e bne r2,zero,8020a44 + { + 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;jdev.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 + for(i=0;idev.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 + } + } + } + +finished: + 8020a40: 00000106 br 8020a48 + 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 + 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 : +**/ +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 + 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 + 8020b3c: e0bffd17 ldw r2,-12(fp) + 8020b40: 10800820 cmpeqi r2,r2,32 + 8020b44: 1000291e bne r2,zero,8020bec + + 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 + 8020bfc: e0bffc17 ldw r2,-16(fp) + 8020c00: 10801020 cmpeqi r2,r2,64 + 8020c04: 1000291e bne r2,zero,8020cac + + 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 + 8020cbc: e0bffb17 ldw r2,-20(fp) + 8020cc0: 10802020 cmpeqi r2,r2,128 + 8020cc4: 1000291e bne r2,zero,8020d6c + + 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 + 8020d7c: e0bffa17 ldw r2,-24(fp) + 8020d80: 10804020 cmpeqi r2,r2,256 + 8020d84: 1000291e bne r2,zero,8020e2c + + 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 + 8020e3c: e0bff917 ldw r2,-28(fp) + 8020e40: 10808020 cmpeqi r2,r2,512 + 8020e44: 1000291e bne r2,zero,8020eec + + 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 +} + 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 : +**/ +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 + (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 + + /* If timeout value is zero, it will never timeout. */ + if (timeout != 0) { + 8020f5c: e0bffd17 ldw r2,-12(fp) + 8020f60: 10000826 beq r2,zero,8020f84 + 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 + /* Timeout */ + ret_code = -ETIMEDOUT; + 8020f78: 00bfe304 movi r2,-116 + 8020f7c: e0bfff15 stw r2,-4(fp) + break; + 8020f80: 00000506 br 8020f98 + (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 + } + } + } + + 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 : +**/ +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 + (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 + + /* If timeout value is zero, it will never timeout. */ + if (timeout != 0) { + 8020fec: e0bffd17 ldw r2,-12(fp) + 8020ff0: 10000826 beq r2,zero,8021014 + 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 + /* Timeout */ + ret_code = -ETIMEDOUT; + 8021008: 00bfe304 movi r2,-116 + 802100c: e0bfff15 stw r2,-4(fp) + break; + 8021010: 00000606 br 802102c + (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 + } + } + } + + 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 : +**/ +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 + (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 + + /* If timeout value is zero, it will never timeout. */ + if (timeout != 0) { + 8021080: e0bffd17 ldw r2,-12(fp) + 8021084: 10000826 beq r2,zero,80210a8 + 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 + /* Timeout */ + ret_code = -ETIMEDOUT; + 802109c: 00bfe304 movi r2,-116 + 80210a0: e0bfff15 stw r2,-4(fp) + break; + 80210a4: 00000606 br 80210c0 + (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 + } + } + } + + 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 : + * @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 + + /* 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 + 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 + 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 + } + } + /* If pointer could not found */ + if(p_driver_data == 0) { + 8021164: e0bffe17 ldw r2,-8(fp) + 8021168: 1000021e bne r2,zero,8021174 + return ENP_HARDWARE; + 802116c: 00bff744 movi r2,-35 + 8021170: 00002606 br 802120c + } + + /* 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 + 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 + 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 + } + } + /* If pointer could not found */ + if(psys_info == 0) { + 80211d0: e0bffd17 ldw r2,-12(fp) + 80211d4: 1000021e bne r2,zero,80211e0 + return ENP_HARDWARE; + 80211d8: 00bff744 movi r2,-35 + 80211dc: 00000b06 br 802120c + } + + 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 + + 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 : + * @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 + { + 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 + #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 : + +//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 + */ + + /* 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 + +} + 80214b0: 0001883a nop + 80214b4: e037883a mov sp,fp + 80214b8: df000017 ldw fp,0(sp) + 80214bc: dec00104 addi sp,sp,4 + 80214c0: f800283a ret + +080214c4 : + * @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 + + 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[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 + } + 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 + 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[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[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 + 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[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[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 + 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[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 + } + + /* 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 + 80216d8: e0bff915 stw r2,-28(fp) + + if(!msgdma_tx_dev) { + 80216dc: e0bff917 ldw r2,-28(fp) + 80216e0: 1000051e bne r2,zero,80216f8 + 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 + return ENP_RESOURCE; + 80216f0: 00bffa84 movi r2,-22 + 80216f4: 00020706 br 8021f14 + } + + 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 + 8021708: e0bff815 stw r2,-32(fp) + if(!msgdma_rx_dev) { + 802170c: e0bff817 ldw r2,-32(fp) + 8021710: 1000051e bne r2,zero,8021728 + 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 + return ENP_RESOURCE; + 8021720: 00bffa84 movi r2,-22 + 8021724: 0001fb06 br 8021f14 + } + + /* Initialize mtip_mac_trans_info structure with values from */ + 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 + (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 + 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 + 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 + 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 + 8021804: 00000106 br 802180c + 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 + dprintf("TSEMAC SW reset bit never cleared!\n"); + 8021818: 01020174 movhi r4,2053 + 802181c: 2125f804 addi r4,r4,-26656 + 8021820: 8002d9c0 call 8002d9c + } + + 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 + 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 + 8021860: 00000506 br 8021878 + } + 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 + + /* 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 + 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 + for (mac_loop = 0; mac_loop < pmac_groups[channel_loop]->channel; mac_loop ++) { + 802189c: e03ffb15 stw zero,-20(fp) + 80218a0: 00001606 br 80218fc + 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[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 + 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 + } + } + } + /* 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 + 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 + } + 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 + 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 + 8021b5c: 00000b06 br 8021b8c + 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 + return ENP_LOGIC; + 8021b84: 00bffd44 movi r2,-11 + 8021b88: 0000e206 br 8021f14 + { + 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 + 8021bbc: 00000b06 br 8021bec + 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 + return ENP_LOGIC; + 8021be4: 00bffd44 movi r2,-11 + 8021be8: 0000ca06 br 8021f14 + 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 + } + /* 100 Mbps */ + else if(speed == 0x02) { + 8021c10: e0bff617 ldw r2,-40(fp) + 8021c14: 10800098 cmpnei r2,r2,2 + 8021c18: 10000a1e bne r2,zero,8021c44 + 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 + } + /* 10 Mbps */ + else if(speed == 0x04) { + 8021c44: e0bff617 ldw r2,-40(fp) + 8021c48: 10800118 cmpnei r2,r2,4 + 8021c4c: 1000081e bne r2,zero,8021c70 + 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 + } + /* 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 + 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 + } + /* 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 + + +#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 + + /* 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 + + 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 + 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 + 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 + 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 + 8021f04: 01020174 movhi r4,2053 + 8021f08: 21265904 addi r4,r4,-26268 + 8021f0c: 8002d9c0 call 8002d9c + + 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 : + * + * @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 + { + + /* 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 + 8021f68: e0bfff17 ldw r2,-4(fp) + 8021f6c: 10900014 ori r2,r2,16384 + 8021f70: e0bfff15 stw r2,-4(fp) + 8021f74: 00000306 br 8021f84 + 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 + 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 + 8021fc8: 00bfffc4 movi r2,-1 + 8021fcc: 00001906 br 8022034 + + if (desc_index==0) tse_ptr->txdesc_list = NULL; + 8021fd0: e0bffe17 ldw r2,-8(fp) + 8021fd4: 1000021e bne r2,zero,8021fe0 + 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 + 8022004: e0bffd15 stw r2,-12(fp) + if (rc!=0) return -1; + 8022008: e0bffd17 ldw r2,-12(fp) + 802200c: 10000226 beq r2,zero,8022018 + 8022010: 00bfffc4 movi r2,-1 + 8022014: 00000706 br 8022034 + 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 + + } + + 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 : + * @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 + { + dprintf("raw_send CALLED AGAIN!!!\n"); + 80220b0: 01020174 movhi r4,2053 + 80220b4: 21265e04 addi r4,r4,-26248 + 80220b8: 8002d9c0 call 8002d9c + 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_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 + 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 + 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 + 8022158: e0bffa15 stw r2,-24(fp) + if(rc < 0) /* MSGDMA not available */ + 802215c: e0bffa17 ldw r2,-24(fp) + 8022160: 1000120e bge r2,zero,80221ac + { + 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 + 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 + } + 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 */ + 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 : + * @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 + { + /* Handle received packet */ + tse_mac_rcv(tse_ptr); + 802227c: e13ffe17 ldw r4,-8(fp) + 8022280: 80227f80 call 80227f8 + + /* 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 + { + /* 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_mac_rcv(tse_ptr); + 80222cc: e13ffe17 ldw r4,-8(fp) + 80222d0: 80227f80 call 80227f8 + 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 + } + + /* 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 + 8022318: 00c00044 movi r3,1 + 802231c: 008201b4 movhi r2,2054 + 8022320: 10f5d515 stw r3,-10412(r2) + 8022324: 00000206 br 8022330 + 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 + + /* allocate storage for the non active chain */ + allocate_rx_descriptor_chain(tse_ptr); + 802235c: e13ffe17 ldw r4,-8(fp) + 8022360: 80226c00 call 80226c0 + } + + /* 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 + SignalPktDemux(); + 8022374: d0a08017 ldw r2,-32256(gp) + 8022378: 1009883a mov r4,r2 + 802237c: 8015d840 call 8015d84 + } + } /* if (no error) */ + else { dprintf("RX ERROR\n"); } + +} + 8022380: 00000306 br 8022390 + else { dprintf("RX ERROR\n"); } + 8022384: 01020174 movhi r4,2053 + 8022388: 21267204 addi r4,r4,-26168 + 802238c: 8002d9c0 call 8002d9c +} + 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 : + * + * @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 + dprintf("TX STOPPED\n"); + 80223e4: 01020174 movhi r4,2053 + 80223e8: 21267504 addi r4,r4,-26156 + 80223ec: 8002d9c0 call 8002d9c + +} + 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 : + * + * @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 + 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_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 + { + 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_ptr->pkt_array_rx[chain_index][desc_index] = pk_alloc(ALTERA_TSE_PKT_INIT_LEN); + 8022484: 01017e04 movi r4,1528 + 8022488: 80284340 call 8028434 + 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 + { + 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 + 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 + } + + // 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 + 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 + } + + /* 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 + 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 + 80225b0: 00bfffc4 movi r2,-1 + 80225b4: 00003d06 br 80226ac + + if (desc_index==0) tse_ptr->rxdesc_list[chain_index] = NULL; + 80225b8: e0bffe17 ldw r2,-8(fp) + 80225bc: 1000061e bne r2,zero,80225d8 + 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 + 8022618: e0bffa15 stw r2,-24(fp) + if (rc!=0) return -1; + 802261c: e0bffa17 ldw r2,-24(fp) + 8022620: 10000226 beq r2,zero,802262c + 8022624: 00bfffc4 movi r2,-1 + 8022628: 00002006 br 80226ac + 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 + 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 + } + + } + + 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 + + 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 + + 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 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 + { + replacement_pkt = pk_alloc(ALTERA_TSE_PKT_INIT_LEN); + 80226dc: 01017e04 movi r4,1528 + 80226e0: 80284340 call 8028434 + 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 + dprintf("No free buffers for rx\n"); + 80226f0: 01020174 movhi r4,2053 + 80226f4: 21269a04 addi r4,r4,-26008 + 80226f8: 8002d9c0 call 8002d9c + return 1; + 80226fc: 00800044 movi r2,1 + 8022700: 00003806 br 80227e4 + } + 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 + 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 + 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 + } + } + + 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 : + * @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 + + 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 : + +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 + 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 : + * @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 + + /* 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 : + * (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 + 8022a80: e13fff17 ldw r4,-4(fp) + 8022a84: 80370f00 call 80370f0 + 8022a88: 00000206 br 8022a94 + 8022a8c: e13fff17 ldw r4,-4(fp) + 8022a90: 802ce700 call 802ce70 +} + 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 : + * 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 + { + /* 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 + 8022b4c: 10001026 beq r2,zero,8022b90 + */ + 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 + } + + 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 : + * (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 + 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 + : recvfrom(fd, ptr, len, 0, NULL, NULL); + 8022c04: 00000806 br 8022c28 + 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 +} + 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 : + * 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 + { + 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 + 8022c74: 00000606 br 8022c90 + } + 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 + } +} + 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 : + * 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 + 8022cbc: 10000526 beq r2,zero,8022cd4 + { +#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 +#endif + return (1); + 8022ccc: 00800044 movi r2,1 + 8022cd0: 00000106 br 8022cd8 + } + 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 : + * 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 + panic("et_send: prepend"); + 8022d68: 01020174 movhi r4,2053 + 8022d6c: 2126b804 addi r4,r4,-25888 + 8022d70: 80271780 call 8027178 + + 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(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 + + /* 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_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 + 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 + 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 + pk_free(pkt); + 8022e44: e13ffc17 ldw r4,-16(fp) + 8022e48: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8022e4c: 01000084 movi r4,2 + 8022e50: 8028ff40 call 8028ff4 + } + + 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 : + * 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 + + /* free all pending packets */ + while (tmppkt) + 8022e9c: 00000906 br 8022ec4 + { + 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 + 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 + } + + 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 +} + 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 : + * 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 + { + 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 + 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 + } +} + 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 : + * 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 + ((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 + || (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 + ((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 + 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 +#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 + 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 + { + /* 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 + 80230ec: 0000ae06 br 80233a8 + + /* 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 + ((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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 802311c: 01000084 movi r4,2 + 8023120: 8028f380 call 8028f38 + pk_free(pkt); + 8023124: e13ff717 ldw r4,-36(fp) + 8023128: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802312c: 01000084 movi r4,2 + 8023130: 8028ff40 call 8028ff4 + return ENP_NO_ROUTE; + 8023134: 00bff7c4 movi r2,-33 + 8023138: 00009b06 br 80233a8 + } + + /* not broadcasting, so get a packet for an ARP request */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 802313c: 01000084 movi r4,2 + 8023140: 8028f380 call 8028f38 + arppkt = pk_alloc(arpsize); + 8023144: 01000c04 movi r4,48 + 8023148: 80284340 call 8028434 + 802314c: e0bffd15 stw r2,-12(fp) + if (!arppkt) + 8023150: e0bffd17 ldw r2,-12(fp) + 8023154: 1000061e bne r2,zero,8023170 + { + pk_free(pkt); + 8023158: e13ff717 ldw r4,-36(fp) + 802315c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023160: 01000084 movi r4,2 + 8023164: 8028ff40 call 8028ff4 + return ENP_RESOURCE; + 8023168: 00bffa84 movi r2,-22 + 802316c: 00008e06 br 80233a8 + } + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023170: 01000084 movi r4,2 + 8023174: 8028ff40 call 8028ff4 + 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 + 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 + 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 + 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 + 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(&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(&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(&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 + } +#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 + 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 + 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 + pk_free(arppkt); + 8023388: e13ffd17 ldw r4,-12(fp) + 802338c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023390: 01000084 movi r4,2 + 8023394: 8028ff40 call 8028ff4 + } + 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 : + * 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 + { + /* 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 + { + /* 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 + { + arp_free_pending(tp); /* free pending packets */ + 8023418: e13fff17 ldw r4,-4(fp) + 802341c: 8022e6c0 call 8022e6c + 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 + } + } + 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 + ((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 + ((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 + { + /* 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 + { + exact = tp; + 8023484: e0bfff17 ldw r2,-4(fp) + 8023488: e0bffe15 stw r2,-8(fp) + 802348c: 00001106 br 80234d4 + } + 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 + { + if (!oldest || (tp->lasttime < oldest->lasttime)) + 802349c: e0bffd17 ldw r2,-12(fp) + 80234a0: 10000526 beq r2,zero,80234b8 + 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 + oldest = tp; + 80234b8: e0bfff17 ldw r2,-4(fp) + 80234bc: e0bffd15 stw r2,-12(fp) + 80234c0: 00000406 br 80234d4 + } + else if (!empty) + 80234c4: e0bffc17 ldw r2,-16(fp) + 80234c8: 1000021e bne r2,zero,80234d4 + 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 + } + + return ((exact) ? exact : ((empty) ? empty : oldest)); + 80234f0: e0bffe17 ldw r2,-8(fp) + 80234f4: 1000061e bne r2,zero,8023510 + 80234f8: e0bffc17 ldw r2,-16(fp) + 80234fc: 10000226 beq r2,zero,8023508 + 8023500: e0bffc17 ldw r2,-16(fp) + 8023504: 00000306 br 8023514 + 8023508: e0bffd17 ldw r2,-12(fp) + 802350c: 00000106 br 8023514 + 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 : + * 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 + 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 + 8023560: e0bffe17 ldw r2,-8(fp) + 8023564: 10800017 ldw r2,0(r2) + 8023568: e0fffd17 ldw r3,-12(fp) + 802356c: 18800226 beq r3,r2,8023578 + { + arp_free_pending(oldest); + 8023570: e13ffe17 ldw r4,-8(fp) + 8023574: 8022e6c0 call 8022e6c + } + + /* 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 + 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 + { + 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 + 80235e8: d0a05d15 stw r2,-32396(gp) + 80235ec: 00000706 br 802360c + } + 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 : + * 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 + outpkt = pk_alloc(arpsize); + 8023640: 01000c04 movi r4,48 + 8023644: 80284340 call 8028434 + 8023648: e0bfff15 stw r2,-4(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802364c: 01000084 movi r4,2 + 8023650: 8028ff40 call 8028ff4 + + if (!outpkt) + 8023654: e0bfff17 ldw r2,-4(fp) + 8023658: 1000021e bne r2,zero,8023664 + { + dtrap(); + 802365c: 8028cd40 call 8028cd4 + return; + 8023660: 00009b06 br 80238d0 + } + + 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(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 + + /* 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(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 + +#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(&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(&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(&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 + } +#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 + { + 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 + } + 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 + pk_free(outpkt); + 80238b4: e13fff17 ldw r4,-4(fp) + 80238b8: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 80238bc: 01000084 movi r4,2 + 80238c0: 8028ff40 call 8028ff4 + } + /* 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 : + * 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(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(&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(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 +#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 + (!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 +#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 + pk_free(pkt); /* not for us, dump & ret (proxy here later?) */ + 8023a0c: e13ffb17 ldw r4,-20(fp) + 8023a10: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023a14: 01000084 movi r4,2 + 8023a18: 8028ff40 call 8028ff4 + return (ENP_NOT_MINE); + 8023a1c: 00800084 movi r2,2 + 8023a20: 00004406 br 8023b34 + } + + 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 + { + 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 + /* 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 + 8023a68: 00000306 br 8023a78 + /* 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 + { + 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 + 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 + 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 + { + arp_send_pending(tp); + 8023ad4: e13fff17 ldw r4,-4(fp) + 8023ad8: 8022ef40 call 8022ef4 + } + LOCK_NET_RESOURCE(FREEQ_RESID); + 8023adc: 01000084 movi r4,2 + 8023ae0: 8028f380 call 8028f38 + pk_free(pkt); + 8023ae4: e13ffb17 ldw r4,-20(fp) + 8023ae8: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023aec: 01000084 movi r4,2 + 8023af0: 8028ff40 call 8028ff4 + + return (0); + 8023af4: 0005883a mov r2,zero + 8023af8: 00000e06 br 8023b34 + 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 + +#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 + pk_free(pkt); + 8023b20: e13ffb17 ldw r4,-20(fp) + 8023b24: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023b28: 01000084 movi r4,2 + 8023b2c: 8028ff40 call 8028ff4 + + 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 : + * 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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 8023b70: 01000084 movi r4,2 + 8023b74: 8028f380 call 8028f38 + pk_free(pkt); + 8023b78: e13ffb17 ldw r4,-20(fp) + 8023b7c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023b80: 01000084 movi r4,2 + 8023b84: 8028ff40 call 8028ff4 + return SEND_DROPPED; + 8023b88: 00bffa84 movi r2,-22 + 8023b8c: 00004806 br 8023cb0 + } + + /* 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 + 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 + 8023bb0: d0a05e17 ldw r2,-32392(gp) + 8023bb4: 10800017 ldw r2,0(r2) + 8023bb8: e0fffa17 ldw r3,-24(fp) + 8023bbc: 1880031e bne r3,r2,8023bcc + tp = arpcache; + 8023bc0: d0a05e17 ldw r2,-32392(gp) + 8023bc4: e0bfff15 stw r2,-4(fp) + 8023bc8: 00000306 br 8023bd8 + else + { + /* scan arp table for an existing entry */ + tp = find_oldest_arp(dest_ip); + 8023bcc: e13ffa17 ldw r4,-24(fp) + 8023bd0: 80233bc0 call 80233bc + 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 + { + 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 + { + 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 + { + /* 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 + pk_free(pkt); /* sorry, we have to dump this one.. */ + 8023c0c: e13ffb17 ldw r4,-20(fp) + 8023c10: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023c14: 01000084 movi r4,2 + 8023c18: 8028ff40 call 8028ff4 + 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 + } + 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 + 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 + 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 + { + dtrap(); /* chain of pkts to be sent ??? */ + 8023c68: 8028cd40 call 8028cd4 + } + err = ENP_SEND_PENDING; /* packet queued pending ARP reply */ + 8023c6c: 00800044 movi r2,1 + 8023c70: e0bffe15 stw r2,-8(fp) + 8023c74: 00000d06 br 8023cac + } + } + 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 + 8023c94: e0bffe15 stw r2,-8(fp) + 8023c98: 00000406 br 8023cac + } + } + 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 + 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 : + * + * 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 + { + if (tp->t_pro_addr != 0) + 8023cf4: e0bfff17 ldw r2,-4(fp) + 8023cf8: 10800017 ldw r2,0(r2) + 8023cfc: 10002126 beq r2,zero,8023d84 + { + /* 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 + 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 + { + /* 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 + 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 + } + 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 + ((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 + { + /* 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 + } + 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 + } + } + + /* 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 + { + in_timerkill(arp_timer); + 8023da8: d0a05d17 ldw r2,-32396(gp) + 8023dac: 1009883a mov r4,r2 + 8023db0: 8038da00 call 8038da0 + 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 : + * 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 + arppkt = pk_alloc(arpsize); + 8023dfc: 01000c04 movi r4,48 + 8023e00: 80284340 call 8028434 + 8023e04: e0bffe15 stw r2,-8(fp) + if (!arppkt) + 8023e08: e0bffe17 ldw r2,-8(fp) + 8023e0c: 1000041e bne r2,zero,8023e20 + { + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023e10: 01000084 movi r4,2 + 8023e14: 8028ff40 call 8028ff4 + return ENP_RESOURCE; + 8023e18: 00bffa84 movi r2,-22 + 8023e1c: 00009506 br 8024074 + } + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8023e20: 01000084 movi r4,2 + 8023e24: 8028ff40 call 8028ff4 + 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 + /* 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 + 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 + 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 + 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 + 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(&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 + + /* ARP req? */ + if (flag == 0) + 8023f9c: e0bff917 ldw r2,-28(fp) + 8023fa0: 1000091e bne r2,zero,8023fc8 + /* 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 + 8023fc4: 00000806 br 8023fe8 + 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(&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 + } +#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 + 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 + 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 + pk_free(arppkt); + 8024054: e13ffe17 ldw r4,-8(fp) + 8024058: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802405c: 01000084 movi r4,2 + 8024060: 8028ff40 call 8028ff4 + } + 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 : + * 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(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 + return ifp; + 80240bc: e0bfff17 ldw r2,-4(fp) + 80240c0: 00000706 br 80240e0 + 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 + } + dtrap(); + 80240d8: 8028cd40 call 8028cd4 + 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 : + * 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 + { + /* 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 + return(FALSE); + 8024128: 0005883a mov r2,zero + 802412c: 00002206 br 80241b8 + 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 + return FALSE; + 8024144: 0005883a mov r2,zero + 8024148: 00001b06 br 80241b8 +#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 + return FALSE; + 802415c: 0005883a mov r2,zero + 8024160: 00001506 br 80241b8 + + /* 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 + return(FALSE); + 802417c: 0005883a mov r2,zero + 8024180: 00000d06 br 80241b8 + } + + /* 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 + (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 + { + return FALSE; + 80241ac: 0005883a mov r2,zero + 80241b0: 00000106 br 80241b8 + } + + /* 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 : + * 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 + { + 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 + { + 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 + return e; /* bails out if error */ + 8024220: e0bffe17 ldw r2,-8(fp) + 8024224: 00000606 br 8024240 + 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 + } + } + 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 : + */ + + /* 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(so->so_pcb) + 8024278: e0bfff17 ldw r2,-4(fp) + 802427c: 10800117 ldw r2,4(r2) + 8024280: 10000526 beq r2,zero,8024298 + 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 + 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 + { + /* 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 + } + 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 + } +} + 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 : + * 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 + { + /* 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 + { + 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 + 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 + { +#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 + 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 + 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 + } + + /* 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 + e = pk_init(); + 8024444: 80281a80 call 80281a8 + 8024448: e0bffe15 stw r2,-8(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802444c: 01000084 movi r4,2 + 8024450: 8028ff40 call 8028ff4 + if (e) /* report error (memory ran out?) */ + 8024454: e0bffe17 ldw r2,-8(fp) + 8024458: 10000226 beq r2,zero,8024464 + return e; + 802445c: e0bffe17 ldw r2,-8(fp) + 8024460: 0000cf06 br 80247a0 + + /* 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 + + /* now do the per-IP interface initializations */ + for (i = 0; i < (int)ifNumber; i++) + 8024470: e03fff15 stw zero,-4(fp) + 8024474: 0000c506 br 802478c + { + 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 + { + 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 + { + 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 + 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 + } + /* 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 + 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 + { + 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 + { + 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 + } + 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 + + /* 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 + { + 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 +#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 : + * 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 + 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 + smask = 0xFF000000L; + 8024804: 00bfc034 movhi r2,65280 + 8024808: e0bfff15 stw r2,-4(fp) + 802480c: 00001b06 br 802487c + 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 + smask = 0xFFFF0000L; + 8024834: 00bffff4 movhi r2,65535 + 8024838: e0bfff15 stw r2,-4(fp) + 802483c: 00000f06 br 802487c + 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 + smask = 0xFFFFFF00L; + 8024864: 00bfc004 movi r2,-256 + 8024868: e0bfff15 stw r2,-4(fp) + 802486c: 00000306 br 802487c + else + { + dtrap(); /* bad logic or setup values */ + 8024870: 8028cd40 call 8028cd4 + 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 + 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 : + * 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 + 8024904: 01020174 movhi r4,2053 + 8024908: 2126c404 addi r4,r4,-25840 + 802490c: 8002d9c0 call 8002d9c +#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 + { + if (ifp->n_close) + 8024920: e0bfff17 ldw r2,-4(fp) + 8024924: 10800517 ldw r2,20(r2) + 8024928: 10000f26 beq r2,zero,8024968 + { + 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 + (*(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 + } + 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 + 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 +#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 + } + } +} + 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 : + * 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 + { + /* 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 + { +#ifdef SUPERLOOP + return; /* don't hog stack on superloop */ +#else /* SUPERLOOP */ + tk_yield(); /* let application tasks process received packets */ + 80249f4: 8027ce40 call 8027ce4 + 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 + pkt = (PACKET)q_deq(&rcvdq); + 8024a04: 010201b4 movhi r4,2054 + 8024a08: 2136ab04 addi r4,r4,-9556 + 8024a0c: 80288d80 call 80288d8 + 8024a10: e0bffe15 stw r2,-8(fp) + UNLOCK_NET_RESOURCE(RXQ_RESID); + 8024a14: 01000044 movi r4,1 + 8024a18: 8028ff40 call 8028ff4 + if (!pkt) panic("pktdemux: got null pkt"); + 8024a1c: e0bffe17 ldw r2,-8(fp) + 8024a20: 1000031e bne r2,zero,8024a30 + 8024a24: 01020174 movhi r4,2053 + 8024a28: 2126d704 addi r4,r4,-25764 + 8024a2c: 80271780 call 8027178 + 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 + 8024a60: 10000626 beq r2,zero,8024a7c + 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 + 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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 8024aa0: 01000084 movi r4,2 + 8024aa4: 8028f380 call 8028f38 + pk_free(pkt); /* dump packet from downed interface */ + 8024aa8: e13ffe17 ldw r4,-8(fp) + 8024aac: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8024ab0: 01000084 movi r4,2 + 8024ab4: 8028ff40 call 8028ff4 + 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 + } + +#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 + *(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 + { + dtrap(); + 8024b20: 8028cd40 call 8028cd4 + panic("pktdemux: corrupt pkt"); + 8024b24: 01020174 movhi r4,2053 + 8024b28: 2126dd04 addi r4,r4,-25740 + 8024b2c: 80271780 call 8027178 + } + } +#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 + * 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 + { + 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 + 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 + LOCK_NET_RESOURCE(FREEQ_RESID); + 8024c48: 01000084 movi r4,2 + 8024c4c: 8028f380 call 8028f38 + pk_free(pkt); + 8024c50: e13ffe17 ldw r4,-8(fp) + 8024c54: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8024c58: 01000084 movi r4,2 + 8024c5c: 8028ff40 call 8028ff4 + continue; + 8024c60: 00003706 br 8024d40 + } + } + 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 + 8024c7c: 10818220 cmpeqi r2,r2,1544 + 8024c80: 1000081e bne r2,zero,8024ca4 + 8024c84: 00000e06 br 8024cc0 + { + case IPTP: /* IP type */ + LOCK_NET_RESOURCE(NET_RESID); + 8024c88: 0009883a mov r4,zero + 8024c8c: 8028f380 call 8028f38 +#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 + /* 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 + break; + 8024ca0: 00002606 br 8024d3c +#ifdef INCLUDE_ARP + case ARPTP: /* ARP type */ + LOCK_NET_RESOURCE(NET_RESID); + 8024ca4: 0009883a mov r4,zero + 8024ca8: 8028f380 call 8028f38 + arprcv(pkt); + 8024cac: e13ffe17 ldw r4,-8(fp) + 8024cb0: 80238e40 call 80238e4 + UNLOCK_NET_RESOURCE(NET_RESID); + 8024cb4: 0009883a mov r4,zero + 8024cb8: 8028ff40 call 8028ff4 + break; + 8024cbc: 00001f06 br 8024d3c + 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 + 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 +#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 + pk_free(pkt); /* return to free buffer */ + 8024d28: e13ffe17 ldw r4,-8(fp) + 8024d2c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8024d30: 01000084 movi r4,2 + 8024d34: 8028ff40 call 8028ff4 + 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 + } +} + 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 : + * 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 + (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 + (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 + (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 + (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 + { + if (ct1 < ct2) + 8024db0: e0ffff17 ldw r3,-4(fp) + 8024db4: e0bffe17 ldw r2,-8(fp) + 8024db8: 1880022e bgeu r3,r2,8024dc4 + return(ct1); /* then smaller is oldest */ + 8024dbc: e0bfff17 ldw r2,-4(fp) + 8024dc0: 00000806 br 8024de4 + else + return(ct2); + 8024dc4: e0bffe17 ldw r2,-8(fp) + 8024dc8: 00000606 br 8024de4 + } + + /* 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 + return(ct1); + 8024dd8: e0bfff17 ldw r2,-4(fp) + 8024ddc: 00000106 br 8024de4 + 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 : + */ + +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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 8024e2c: 01000084 movi r4,2 + 8024e30: 8028f380 call 8028f38 + pk_free(pkt); + 8024e34: e13ffe17 ldw r4,-8(fp) + 8024e38: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8024e3c: 01000084 movi r4,2 + 8024e40: 8028ff40 call 8028ff4 + return(ENP_NO_ROUTE); + 8024e44: 00bff7c4 movi r2,-33 + 8024e48: 00004806 br 8024f6c + 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 + (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 + (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 + { + 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 + 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 + 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 + pk_free(pkt); + 8024f08: e13ffe17 ldw r4,-8(fp) + 8024f0c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8024f10: 01000084 movi r4,2 + 8024f14: 8028ff40 call 8028ff4 + } + return(SUCCESS); + 8024f18: 0005883a mov r2,zero + 8024f1c: 00001306 br 8024f6c + } + + /* 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 + { + 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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 8024f40: 01000084 movi r4,2 + 8024f44: 8028f380 call 8028f38 + pk_free(pkt); + 8024f48: e13ffe17 ldw r4,-8(fp) + 8024f4c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8024f50: 01000084 movi r4,2 + 8024f54: 8028ff40 call 8028ff4 + return ENP_SENDERR; + 8024f58: 00bff884 movi r2,-30 + 8024f5c: 00000306 br 8024f6c + } + } + +#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 +#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 : + * 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 + { + 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 + 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 + } + + /* 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 + 8025038: d0a06715 stw r2,-32356(gp) + + if (ifNumber < 1) /* no static interfaces? */ + 802503c: d0a06717 ldw r2,-32356(gp) + 8025040: 1000031e bne r2,zero,8025050 +#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 +#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 + { + 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 + 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 + /* 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 + exit_hook(clock_c); + 80250b0: 010200f4 movhi r4,2051 + 80250b4: 21238604 addi r4,r4,-29160 + 80250b8: 80251e40 call 80251e4 + + e = Netinit(); /* start net interface(s) */ + 80250bc: 80242e40 call 80242e4 + 80250c0: e0bffe15 stw r2,-8(fp) + if (e) + 80250c4: e0bffe17 ldw r2,-8(fp) + 80250c8: 10000326 beq r2,zero,80250d8 + { + return("unable to initialize net"); + 80250cc: 00820174 movhi r2,2053 + 80250d0: 10a70604 addi r2,r2,-25576 + 80250d4: 00003e06 br 80251d0 + } + +#ifdef INCLUDE_ARP + e = etainit(); /* startup ARP layer */ + 80250d8: 8022ca40 call 8022ca4 + 80250dc: e0bffe15 stw r2,-8(fp) + if (e) + 80250e0: e0bffe17 ldw r2,-8(fp) + 80250e4: 10000426 beq r2,zero,80250f8 + { + ip_exit(); + 80250e8: 802524c0 call 802524c + return("unable to initialize arp"); + 80250ec: 00820174 movhi r2,2053 + 80250f0: 10a70d04 addi r2,r2,-25548 + 80250f4: 00003606 br 80251d0 + } +#endif + +#ifdef IP_V4 + e = ip_init(); /* start up IP layer */ + 80250f8: 803a0700 call 803a070 + 80250fc: e0bffe15 stw r2,-8(fp) + if (e) + 8025100: e0bffe17 ldw r2,-8(fp) + 8025104: 10000426 beq r2,zero,8025118 + { + ip_exit(); + 8025108: 802524c0 call 802524c + return("unable to initialize IP"); + 802510c: 00820174 movhi r2,2053 + 8025110: 10a71404 addi r2,r2,-25520 + 8025114: 00002e06 br 80251d0 + +#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 + 802511c: e0bffe15 stw r2,-8(fp) + if (e) + 8025120: e0bffe17 ldw r2,-8(fp) + 8025124: 10000326 beq r2,zero,8025134 + { + ip_exit(); + 8025128: 802524c0 call 802524c + return(ipmcfail_str); + 802512c: d0a01217 ldw r2,-32696(gp) + 8025130: 00002706 br 80251d0 + } + + for (i = 0; i < (int)ifNumber; i++) + 8025134: e03fff15 stw zero,-4(fp) + 8025138: 00001706 br 8025198 + { + 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 + 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 + 802517c: 1000031e bne r2,zero,802518c + { + ip_exit(); + 8025180: 802524c0 call 802524c + return(ipmcfail_str); + 8025184: d0a01217 ldw r2,-32696(gp) + 8025188: 00001106 br 80251d0 + 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 + } + } +#endif /* IP_MULTICAST and (IGMPv1 or IGMPv2) */ + +#ifdef INCLUDE_TCP + e = tcpinit(); + 80251a8: 803637c0 call 803637c + 80251ac: e0bffe15 stw r2,-8(fp) + if (e) + 80251b0: e0bffe17 ldw r2,-8(fp) + 80251b4: 10000426 beq r2,zero,80251c8 + { + ip_exit(); + 80251b8: 802524c0 call 802524c + return("unable to initialize TCP"); + 80251bc: 00820174 movhi r2,2053 + 80251c0: 10a71a04 addi r2,r2,-25496 + 80251c4: 00000206 br 80251d0 + /* 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 + 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 : + * 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 + panic("exit_hook"); + 8025204: 01020174 movhi r4,2053 + 8025208: 21272104 addi r4,r4,-25468 + 802520c: 80271780 call 8027178 + + 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 : + * 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 + { +#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 +#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 + { + (*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 + } + } +} + 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 : + * 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(ifp == nptr) + 8025324: e0fffe17 ldw r3,-8(fp) + 8025328: e0bffd17 ldw r2,-12(fp) + 802532c: 1880021e bne r3,r2,8025338 + return (int)i; + 8025330: e0bfff17 ldw r2,-4(fp) + 8025334: 00000c06 br 8025368 + 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 + } + + panic("bad net ptr"); + 8025358: 01020174 movhi r4,2053 + 802535c: 21272b04 addi r4,r4,-25428 + 8025360: 80271780 call 8027178 + 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 : + * + * 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 + { + 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 + { + 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 + } + 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 + } + + /* + * 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 : + * 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 + 802544c: e0bfff15 stw r2,-4(fp) + 8025450: e0bfff17 ldw r2,-4(fp) + 8025454: 1000181e bne r2,zero,80254b8 + + /* 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 + 8025474: 108000a0 cmpeqi r2,r2,2 + 8025478: 1000041e bne r2,zero,802548c + 802547c: 00000606 br 8025498 + { +#ifdef IGMP_V1 + case IGMP_MODE_V1: + return (igmpv1_input (p)); + 8025480: e13ffd17 ldw r4,-12(fp) + 8025484: 803ddfc0 call 803ddfc + 8025488: 00001306 br 80254d8 +#endif +#ifdef IGMP_V2 + case IGMP_MODE_V2: + return (igmpv2_input (p)); + 802548c: e13ffd17 ldw r4,-12(fp) + 8025490: 803e0640 call 803e064 + 8025494: 00001006 br 80254d8 +#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 + 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 + pk_free(p); + 80254c4: e13ffd17 ldw r4,-12(fp) + 80254c8: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 80254cc: 01000084 movi r4,2 + 80254d0: 8028ff40 call 8028ff4 + + 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 : + * + * 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 + + /* + * 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 + { + UNLOCK_NET_RESOURCE (NET_RESID); + 802550c: 0009883a mov r4,zero + 8025510: 8028ff40 call 8028ff4 + return; + 8025514: 00004c06 br 8025648 + } + + 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 + { + 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 + { + /* 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 + 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 + { + /* 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 + { + /* 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 + { + /* 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 + 802558c: 00000306 br 802559c + } + else + { + igmp_send (IGMPv2_MEMBERSHIP_REPORT, inm); + 8025590: e17fff17 ldw r5,-4(fp) + 8025594: 01000584 movi r4,22 + 8025598: 802565c0 call 802565c + + /* 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 + { + 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 + { + 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 + /* 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 + 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 + 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 + } + } + + /* 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 + + 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 : + * + * 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 + 802569c: e0bfe103 ldbu r2,-124(fp) + 80256a0: 10800598 cmpnei r2,r2,22 + 80256a4: 1000031e bne r2,zero,80256b4 + (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 + p = pk_alloc (reqd_len); + 80256bc: e0bffdc3 ldbu r2,-9(fp) + 80256c0: 1009883a mov r4,r2 + 80256c4: 80284340 call 8028434 + 80256c8: e0bffc15 stw r2,-16(fp) + UNLOCK_NET_RESOURCE (FREEQ_RESID); + 80256cc: 01000084 movi r4,2 + 80256d0: 8028ff40 call 8028ff4 + + /* log an error and return if the allocation fails */ + if (!p) + 80256d4: e0bffc17 ldw r2,-16(fp) + 80256d8: 1000061e bne r2,zero,80256f4 + { + ++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 + 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_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 + } + 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 + 802576c: e0bfe103 ldbu r2,-124(fp) + 8025770: 10800598 cmpnei r2,r2,22 + 8025774: 1000061e bne r2,zero,8025790 + (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 + } + /* 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 + 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 + 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 + + if (type == IGMPv2_LEAVE_GROUP) + 802585c: e0bfe103 ldbu r2,-124(fp) + 8025860: 108005d8 cmpnei r2,r2,23 + 8025864: 1000061e bne r2,zero,8025880 + ++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 + else if (type == IGMPv2_MEMBERSHIP_REPORT) + 8025880: e0bfe103 ldbu r2,-124(fp) + 8025884: 10800598 cmpnei r2,r2,22 + 8025888: 1000061e bne r2,zero,80258a4 + ++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 + 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 + ++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 : + * + * 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 + { + 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 + 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_send (IGMP_HOST_MEMBERSHIP_REPORT, inm); + 8025924: e17ffe17 ldw r5,-8(fp) + 8025928: 01000484 movi r4,18 + 802592c: 802565c0 call 802565c + 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_send (IGMPv2_MEMBERSHIP_REPORT, inm); + 80259f4: e17ffe17 ldw r5,-8(fp) + 80259f8: 01000584 movi r4,22 + 80259fc: 802565c0 call 802565c + 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 + 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 : + * + * 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 + !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 + { + 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_send (IGMPv2_LEAVE_GROUP, inm); + 8025b5c: e17ffe17 ldw r5,-8(fp) + 8025b60: 010005c4 movi r4,23 + 8025b64: 802565c0 call 802565c + } + + 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 : + * 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 + { + ++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 + } + + /* 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 + 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->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 + } + + /* 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 + { + if ((resp_time == 0) || /* IGMPv1 Query */ + 8025ce0: e0bff9c3 ldbu r2,-25(fp) + 8025ce4: 10000426 beq r2,zero,8025cf8 + 8025ce8: e0bff9c3 ldbu r2,-25(fp) + 8025cec: 10000d26 beq r2,zero,8025d24 + ((resp_time > 0) && (mcgrp_addr == 0))) /* IGMPv2 General Query */ + 8025cf0: e0bffa17 ldw r2,-24(fp) + 8025cf4: 10000b1e bne r2,zero,8025d24 + { + /* 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 + { + ++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 + } + } + + if ((resp_time > 0) && (mcgrp_addr != 0)) + 8025d24: e0bff9c3 ldbu r2,-25(fp) + 8025d28: 10001926 beq r2,zero,8025d90 + 8025d2c: e0bffa17 ldw r2,-24(fp) + 8025d30: 10001726 beq r2,zero,8025d90 + { + /* 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 + { + /* IGMPv1 code does not understand a IGMPv2 Group- + * Specific Query */ + return ENP_BAD_HEADER; + 8025d4c: 00bff804 movi r2,-32 + 8025d50: 00003e06 br 8025e4c + /* 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_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 + { + ++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 + + /* 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 + 8025d9c: e0bffbc3 ldbu r2,-17(fp) + 8025da0: 10800598 cmpnei r2,r2,22 + 8025da4: 1000101e bne r2,zero,8025de8 + (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 + (!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 + { + ++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 + + * 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 + 8025df4: e0bffbc3 ldbu r2,-17(fp) + 8025df8: 108005a0 cmpeqi r2,r2,22 + 8025dfc: 1000071e bne r2,zero,8025e1c + (type == IGMPv2_MEMBERSHIP_REPORT) || + 8025e00: e0bffbc3 ldbu r2,-17(fp) + 8025e04: 10800458 cmpnei r2,r2,17 + 8025e08: 10000f1e bne r2,zero,8025e48 + ((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 + + { + if (!igmpv2_chk4_rtr_alert_opt (pip)) + 8025e1c: e13fff17 ldw r4,-4(fp) + 8025e20: 803e5740 call 803e574 + 8025e24: 10803fcc andi r2,r2,255 + 8025e28: 1000071e bne r2,zero,8025e48 + { + ++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 + } + } +#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 : + * + * 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 + { + 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 + 8025eac: 00820174 movhi r2,2053 + 8025eb0: 10a72e04 addi r2,r2,-25416 + 8025eb4: 00000206 br 8025ec0 + 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 + /* 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 + { + 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 + 8025f10: 00820174 movhi r2,2053 + 8025f14: 10a73504 addi r2,r2,-25388 + 8025f18: 00000206 br 8025f24 + 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 + 8025f50: 00000406 br 8025f64 + 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 + 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 + } + + /* 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 (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 (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 (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 (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 (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 (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 (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 (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 + + /* 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 (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 + + /* 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 + + 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 : + * 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 + 8026250: e0ffff17 ldw r3,-4(fp) + 8026254: e0bffe17 ldw r2,-8(fp) + 8026258: 18800626 beq r3,r2,8026274 + 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 + 8026270: 00000106 br 8026278 + 8026274: 0001883a nop + 8026278: e0ffff17 ldw r3,-4(fp) + 802627c: e0bffe17 ldw r2,-8(fp) + 8026280: 18800326 beq r3,r2,8026290 + 8026284: 8028cd40 call 8028cd4 + 8026288: 00bfffc4 movi r2,-1 + 802628c: 00002406 br 8026320 + + /* 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 + { + if (addrlen == 0) + 8026298: e0bff617 ldw r2,-40(fp) + 802629c: 1000051e bne r2,zero,80262b4 + { + 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 + } + } + + 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 + 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 + 80262d8: e0bff717 ldw r2,-36(fp) + 80262dc: 10000f26 beq r2,zero,802631c + { + 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 + *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 + } + + 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 : + * 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 + 8026370: e0ffff17 ldw r3,-4(fp) + 8026374: e0bffe17 ldw r2,-8(fp) + 8026378: 18800626 beq r3,r2,8026394 + 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 + 8026390: 00000106 br 8026398 + 8026394: 0001883a nop + 8026398: e0ffff17 ldw r3,-4(fp) + 802639c: e0bffe17 ldw r2,-8(fp) + 80263a0: 18800326 beq r3,r2,80263b0 + 80263a4: 8028cd40 call 8028cd4 + 80263a8: 00bfffc4 movi r2,-1 + 80263ac: 00002406 br 8026440 + + /* if the buffer length is bogus, fail */ + if (namelen == NULL) + 80263b0: e0bff517 ldw r2,-44(fp) + 80263b4: 1000051e bne r2,zero,80263cc + { + 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 + } + 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 + 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 + { +#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 + 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 + *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 : + * 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 + 8026490: e0ffff17 ldw r3,-4(fp) + 8026494: e0bffe17 ldw r2,-8(fp) + 8026498: 18800626 beq r3,r2,80264b4 + 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 + 80264b0: 00000106 br 80264b8 + 80264b4: 0001883a nop + 80264b8: e0ffff17 ldw r3,-4(fp) + 80264bc: e0bffe17 ldw r2,-8(fp) + 80264c0: 18800326 beq r3,r2,80264d0 + 80264c4: 8028cd40 call 8028cd4 + 80264c8: 00bfffc4 movi r2,-1 + 80264cc: 00002406 br 8026560 + + /* if the buffer length is bogus, fail */ + if (namelen == NULL) + 80264d0: e0bff517 ldw r2,-44(fp) + 80264d4: 1000051e bne r2,zero,80264ec + { + 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 + } + 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 + 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 + { +#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 + 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 + *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 : + * 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 + 8026594: e0bffe17 ldw r2,-8(fp) + 8026598: 10802048 cmpgei r2,r2,129 + 802659c: 1000251e bne r2,zero,8026634 + 80265a0: e0bffe17 ldw r2,-8(fp) + 80265a4: 10800308 cmpgei r2,r2,12 + 80265a8: 1000141e bne r2,zero,80265fc + 80265ac: e0bffe17 ldw r2,-8(fp) + 80265b0: 10800288 cmpgei r2,r2,10 + 80265b4: 1000481e bne r2,zero,80266d8 + 80265b8: e0bffe17 ldw r2,-8(fp) + 80265bc: 10800120 cmpeqi r2,r2,4 + 80265c0: 1000411e bne r2,zero,80266c8 + 80265c4: e0bffe17 ldw r2,-8(fp) + 80265c8: 10800148 cmpgei r2,r2,5 + 80265cc: 1000041e bne r2,zero,80265e0 + 80265d0: e0bffe17 ldw r2,-8(fp) + 80265d4: 108000e0 cmpeqi r2,r2,3 + 80265d8: 1000431e bne r2,zero,80266e8 + 80265dc: 00004406 br 80266f0 + 80265e0: e0bffe17 ldw r2,-8(fp) + 80265e4: 10800220 cmpeqi r2,r2,8 + 80265e8: 1000371e bne r2,zero,80266c8 + 80265ec: e0bffe17 ldw r2,-8(fp) + 80265f0: 10800260 cmpeqi r2,r2,9 + 80265f4: 1000361e bne r2,zero,80266d0 + 80265f8: 00003d06 br 80266f0 + 80265fc: e0bffe17 ldw r2,-8(fp) + 8026600: 10800420 cmpeqi r2,r2,16 + 8026604: 1000301e bne r2,zero,80266c8 + 8026608: e0bffe17 ldw r2,-8(fp) + 802660c: 10800448 cmpgei r2,r2,17 + 8026610: 1000041e bne r2,zero,8026624 + 8026614: e0bffe17 ldw r2,-8(fp) + 8026618: 10800388 cmpgei r2,r2,14 + 802661c: 1000341e bne r2,zero,80266f0 + 8026620: 00002f06 br 80266e0 + 8026624: e0bffe17 ldw r2,-8(fp) + 8026628: 10800820 cmpeqi r2,r2,32 + 802662c: 1000261e bne r2,zero,80266c8 + 8026630: 00002f06 br 80266f0 + 8026634: e0bffe17 ldw r2,-8(fp) + 8026638: 108401c8 cmpgei r2,r2,4103 + 802663c: 10000e1e bne r2,zero,8026678 + 8026640: e0bffe17 ldw r2,-8(fp) + 8026644: 10840148 cmpgei r2,r2,4101 + 8026648: 10001d1e bne r2,zero,80266c0 + 802664c: e0bffe17 ldw r2,-8(fp) + 8026650: 10804020 cmpeqi r2,r2,256 + 8026654: 10001c1e bne r2,zero,80266c8 + 8026658: e0bffe17 ldw r2,-8(fp) + 802665c: 10804010 cmplti r2,r2,256 + 8026660: 1000231e bne r2,zero,80266f0 + 8026664: e0bffe17 ldw r2,-8(fp) + 8026668: 10bbffc4 addi r2,r2,-4097 + 802666c: 108000a8 cmpgeui r2,r2,2 + 8026670: 10001f1e bne r2,zero,80266f0 + 8026674: 00001406 br 80266c8 + 8026678: e0bffe17 ldw r2,-8(fp) + 802667c: 10840588 cmpgei r2,r2,4118 + 8026680: 1000071e bne r2,zero,80266a0 + 8026684: e0bffe17 ldw r2,-8(fp) + 8026688: 10840508 cmpgei r2,r2,4116 + 802668c: 1000081e bne r2,zero,80266b0 + 8026690: e0bffe17 ldw r2,-8(fp) + 8026694: 10840248 cmpgei r2,r2,4105 + 8026698: 1000151e bne r2,zero,80266f0 + 802669c: 00000a06 br 80266c8 + 80266a0: e0bffe17 ldw r2,-8(fp) + 80266a4: 108405a0 cmpeqi r2,r2,4118 + 80266a8: 1000071e bne r2,zero,80266c8 + 80266ac: 00001006 br 80266f0 + { + case SO_BIO: + case SO_NBIO: + /* these don't use an option value */ + return 0; + 80266b0: 0005883a mov r2,zero + 80266b4: 00000f06 br 80266f4 + case SO_LINGER: + /* this option is a struct linger */ + return sizeof(struct linger); + 80266b8: 00800204 movi r2,8 + 80266bc: 00000d06 br 80266f4 + case SO_RCVTIMEO: + case SO_SNDTIMEO: + /* these options are type short */ + return sizeof(short); + 80266c0: 00800084 movi r2,2 + 80266c4: 00000b06 br 80266f4 + 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 + 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 + 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 + 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 + * 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 + 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 : +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 + 8026744: e0ffff17 ldw r3,-4(fp) + 8026748: e0bffe17 ldw r2,-8(fp) + 802674c: 18800626 beq r3,r2,8026768 + 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 + 8026764: 00000106 br 802676c + 8026768: 0001883a nop + 802676c: e0ffff17 ldw r3,-4(fp) + 8026770: e0bffe17 ldw r2,-8(fp) + 8026774: 18800326 beq r3,r2,8026784 + 8026778: 8028cd40 call 8028cd4 + 802677c: 00bfffc4 movi r2,-1 + 8026780: 00001d06 br 80267f8 + + /* 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 + 8026790: e0bffd15 stw r2,-12(fp) + if ((optlen == NULL) || (*optlen < loptlen)) + 8026794: e0800217 ldw r2,8(fp) + 8026798: 10000426 beq r2,zero,80267ac + 802679c: e0800217 ldw r2,8(fp) + 80267a0: 10c00017 ldw r3,0(r2) + 80267a4: e0bffd17 ldw r2,-12(fp) + 80267a8: 1880050e bge r3,r2,80267c0 + { + 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 + } + + 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 + 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 + { + *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 : + * 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 + 802684c: e0ffff17 ldw r3,-4(fp) + 8026850: e0bffe17 ldw r2,-8(fp) + 8026854: 18800626 beq r3,r2,8026870 + 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 + 802686c: 00000106 br 8026874 + 8026870: 0001883a nop + 8026874: e0ffff17 ldw r3,-4(fp) + 8026878: e0bffe17 ldw r2,-8(fp) + 802687c: 18800326 beq r3,r2,802688c + 8026880: 8028cd40 call 8028cd4 + 8026884: 00bfffc4 movi r2,-1 + 8026888: 00001706 br 80268e8 + + 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 + { + 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 + 80268d4: 00000406 br 80268e8 + 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 : + * 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 +} + 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_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 + 8026974: e0ffff17 ldw r3,-4(fp) + 8026978: e0bffe17 ldw r2,-8(fp) + 802697c: 18800626 beq r3,r2,8026998 + 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 + 8026994: 00000106 br 802699c + 8026998: 0001883a nop + 802699c: e0ffff17 ldw r3,-4(fp) + 80269a0: e0bffe17 ldw r2,-8(fp) + 80269a4: 18800326 beq r3,r2,80269b4 + 80269a8: 8028cd40 call 8028cd4 + 80269ac: 00bfffc4 movi r2,-1 + 80269b0: 00002b06 br 8026a60 + + /* 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 + { + if (fromlen == NULL) + 80269bc: e0800317 ldw r2,12(fp) + 80269c0: 1000051e bne r2,zero,80269d8 + { + 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 + } + 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 + 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 + 8026a18: e0800217 ldw r2,8(fp) + 8026a1c: 10000f26 beq r2,zero,8026a5c + { +#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 + 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 + *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(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 + * 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 + { + 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 + } + else if (tps >= 100) + 8026ae8: e0bffe17 ldw r2,-8(fp) + 8026aec: 10801910 cmplti r2,r2,100 + 8026af0: 10000e1e bne r2,zero,8026b2c + { + 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 + } + else if (tps >= 10) + 8026b2c: e0bffe17 ldw r2,-8(fp) + 8026b30: 10800290 cmplti r2,r2,10 + 8026b34: 10000e1e bne r2,zero,8026b70 + { + 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 + } + 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 + } + 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 +} + 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 : +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 + 8026c3c: e0ffff17 ldw r3,-4(fp) + 8026c40: e0bffe17 ldw r2,-8(fp) + 8026c44: 18800626 beq r3,r2,8026c60 + 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 + 8026c5c: 00000106 br 8026c64 + 8026c60: 0001883a nop + 8026c64: e0ffff17 ldw r3,-4(fp) + 8026c68: e0bffe17 ldw r2,-8(fp) + 8026c6c: 18800326 beq r3,r2,8026c7c + 8026c70: 8028cd40 call 8028cd4 + 8026c74: 00bfffc4 movi r2,-1 + 8026c78: 00001206 br 8026cc4 + + /* 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 + 8026c88: 1007883a mov r3,r2 + 8026c8c: e0800217 ldw r2,8(fp) + 8026c90: 10c0050e bge r2,r3,8026ca8 + { + 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 + } + + 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 +} + 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 : + * 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 + { + /* 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 + } + + /* 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 : + * 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 + { + case 1: + default: + return (ccksum(ptr, count)); + 8026da0: e17ffe17 ldw r5,-8(fp) + 8026da4: e13fff17 ldw r4,-4(fp) + 8026da8: 8026cd80 call 8026cd8 + 8026dac: 00000306 br 8026dbc + #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 +#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 : + * 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 + 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 : + * 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 + 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 + while (*argp == ' ')argp++; /* scan past spaces */ + 8026e38: 00000306 br 8026e48 + 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 + 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 : + +#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 + { + /* 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 + 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 + 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 + 8026ee8: e0fffe17 ldw r3,-8(fp) + 8026eec: e0bffa17 ldw r2,-24(fp) + 8026ef0: 18bfed36 bltu r3,r2,8026ea8 + /* 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 + { + 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 + 8026f1c: e0bffdc7 ldb r2,-9(fp) + 8026f20: 10801fe0 cmpeqi r2,r2,127 + 8026f24: 1000021e bne r2,zero,8026f30 + 8026f28: e0bffdc7 ldb r2,-9(fp) + 8026f2c: 00000106 br 8026f34 + 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 + 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 + 8026f60: e0fffe17 ldw r3,-8(fp) + 8026f64: e0bffa17 ldw r2,-24(fp) + 8026f68: 18bfe436 bltu r3,r2,8026efc + } + 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 + 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 + } +} + 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 : + +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 + + 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 : + +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 + 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 + 802710c: 00001306 br 802715c + timetick, hours, minutes, seconds); + else if (hours) + 8027110: e0bffd17 ldw r2,-12(fp) + 8027114: 10000a26 beq r2,zero,8027140 + 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 + 802713c: 00000706 br 802715c + 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 + 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 : +/* 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 + dtrap(); /* try to hook debugger */ + 802719c: 8028cd40 call 8028cd4 + netexit(1); /* try to clean up */ + 80271a0: 01000044 movi r4,1 + 80271a4: 803c5e80 call 803c5e8 +} + 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 : + +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 + { + /* 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 + (*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 + (*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 + 80272b0: e0bfff17 ldw r2,-4(fp) + 80272b4: 10800148 cmpgei r2,r2,5 + 80272b8: 1000051e bne r2,zero,80272d0 + *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 + } + *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 : + * 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 + 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 + *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 + 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 : + */ +#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 + { +#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 + 80273ec: e0bffa15 stw r2,-24(fp) + va_end(argList); + return ret_value; + 80273f0: e0bffa17 ldw r2,-24(fp) + 80273f4: 00003b06 br 80274e4 + 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 + { + /* Programming mistake. Output function not set. */ + return -1; + 8027404: 00bfffc4 movi r2,-1 + 8027408: 00003606 br 80274e4 + + /* 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 + 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 + { + 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 + 8027440: e0bffc15 stw r2,-16(fp) + + if (outbuf == NULL) + 8027444: e0bffc17 ldw r2,-16(fp) + 8027448: 1000021e bne r2,zero,8027454 + { + return -2; + 802744c: 00bfff84 movi r2,-2 + 8027450: 00002406 br 80274e4 + + /* 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 + 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 + 802747c: 1007883a mov r3,r2 + 8027480: e0bffd17 ldw r2,-12(fp) + 8027484: 10c0080e bge r2,r3,80274a8 + */ + /* 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 + 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 + 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 + + /* 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 + + 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 : + * + * 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 + 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 : + * 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 + { + if (pio && pio->getch) /*if i/p func is supplied*/ + 8027578: e0bfff17 ldw r2,-4(fp) + 802757c: 10002126 beq r2,zero,8027604 + 8027580: e0bfff17 ldw r2,-4(fp) + 8027584: 10800317 ldw r2,12(r2) + 8027588: 10001e26 beq r2,zero,8027604 + { + 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 + + 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 + tk_yield(); /* Give timeslice to other processes */ + 80275c0: 8027ce40 call 8027ce4 + } while (ch == 0) ; + 80275c4: e0bffe17 ldw r2,-8(fp) + 80275c8: 103ff426 beq r2,zero,802759c + + /* 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 + return 1 ; + 80275d8: 00800044 movi r2,1 + 80275dc: 00000a06 br 8027608 + + 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 + if (ch == 27) /* ESC key pressed */ + 80275f0: e0bffe17 ldw r2,-8(fp) + 80275f4: 108006d8 cmpnei r2,r2,27 + 80275f8: 1000021e bne r2,zero,8027604 + return 1 ; + 80275fc: 00800044 movi r2,1 + 8027600: 00000106 br 8027608 + } + } + 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 : + +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 + { + return (NULL); + 8027654: 0005883a mov r2,zero + 8027658: 00006906 br 8027800 + } + len = strlen(buf); + 802765c: e13ffb17 ldw r4,-20(fp) + 8027660: 8002dac0 call 8002dac + 8027664: e0bffc15 stw r2,-16(fp) + if (len <= 0) + 8027668: e0bffc17 ldw r2,-16(fp) + 802766c: 00800216 blt zero,r2,8027678 + { + return (NULL); + 8027670: 0005883a mov r2,zero + 8027674: 00006206 br 8027800 + } + 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 + 8027688: e0bffd15 stw r2,-12(fp) + if (pargv == NULL) + 802768c: e0bffd17 ldw r2,-12(fp) + 8027690: 1000051e bne r2,zero,80276a8 + { + return (NULL); + 8027694: 0005883a mov r2,zero + 8027698: 00005906 br 8027800 + } + /* 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 + } + while ((*bp != '\0') && ((*pargc_index) < argc)) + 80276c4: 00002e06 br 8027780 + { + 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 + { + 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 + 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 + } + while (*bp == ' ' && *bp != '\0') + 802773c: 00000306 br 802774c + { + 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 + 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 + 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 + 8027798: e0bff917 ldw r2,-28(fp) + 802779c: 10c00017 ldw r3,0(r2) + 80277a0: e0bffa17 ldw r2,-24(fp) + 80277a4: 18bfc816 blt r3,r2,80276c8 + } + } + for (i = 0; i < len; i++) + 80277a8: e03fff15 stw zero,-4(fp) + 80277ac: 00001006 br 80277f0 + { + 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 + 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 + { + 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 : + * 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 + 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 + { + 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 + 8027854: e0bffe15 stw r2,-8(fp) + if (e != 0) + 8027858: e0bffe17 ldw r2,-8(fp) + 802785c: 10000d26 beq r2,zero,8027894 + { + dprintf("task create error\n"); + 8027860: 01020174 movhi r4,2053 + 8027864: 2128b504 addi r4,r4,-23852 + 8027868: 8002d9c0 call 8002d9c + 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 + return -1; /* compiler warnings */ + 802788c: 00bfffc4 movi r2,-1 + 8027890: 00001306 br 80278e0 + 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 + } + } + + e = create_apptasks(); + 80278ac: 8038e380 call 8038e38 + 80278b0: e0bffe15 stw r2,-8(fp) + if (e != 0) + 80278b4: e0bffe17 ldw r2,-8(fp) + 80278b8: 10000826 beq r2,zero,80278dc + { + dprintf("task create error\n"); + 80278bc: 01020174 movhi r4,2053 + 80278c0: 2128b504 addi r4,r4,-23852 + 80278c4: 8002d9c0 call 8002d9c + panic("netmain"); + 80278c8: 01020174 movhi r4,2053 + 80278cc: 2128ba04 addi r4,r4,-23832 + 80278d0: 80271780 call 8027178 + return -1; /* compiler warnings */ + 80278d4: 00bfffc4 movi r2,-1 + 80278d8: 00000106 br 80278e0 +#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 : + * 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 + + 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 + 802792c: e0bfffc3 ldbu r2,-1(fp) + 8027930: 10803fcc andi r2,r2,255 + 8027934: 10000526 beq r2,zero,802794c + 8027938: e0bfffc3 ldbu r2,-1(fp) + 802793c: 10803fcc andi r2,r2,255 + 8027940: 108002a0 cmpeqi r2,r2,10 + 8027944: 1000011e bne r2,zero,802794c + 8027948: 8028cd40 call 8028cd4 + 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 + pktdemux(); + 8027964: 80249c40 call 80249c4 + TK_NETRX_BLOCK(); + 8027968: 003fea06 br 8027914 + +0802796c : +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 + * run to restart it. + */ +#ifdef DHCP_CLIENT + dhc_second(); +#endif + TK_SLEEP(1); + 8027984: 01000084 movi r4,2 + 8027988: 801730c0 call 801730c + while (!iniche_net_ready) + 802798c: d0a06f17 ldw r2,-32324(gp) + 8027990: 103ffc26 beq r2,zero,8027984 + } + + for (;;) + { + TK_SLEEP(SYS_SHORT_SLEEP); + 8027994: 01000084 movi r4,2 + 8027998: 801730c0 call 801730c + 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 + TK_SLEEP(SYS_SHORT_SLEEP); + 80279ac: 003ff906 br 8027994 + +080279b0 : +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 +} + 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 : + + + +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 + 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 + 8027a14: e0bfffc3 ldbu r2,-1(fp) + 8027a18: 10801120 cmpeqi r2,r2,68 + 8027a1c: 1000071e bne r2,zero,8027a3c + { + 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 + dtrap(); + 8027a2c: 8028cd40 call 8028cd4 + panic("TK_OSTaskResume"); + 8027a30: 01020174 movhi r4,2053 + 8027a34: 2128c904 addi r4,r4,-23772 + 8027a38: 80271780 call 8027178 + } +#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 : + * + * 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 + { + 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 + { + 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 + 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 + + /* 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 + 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_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 + 8027b54: 00000d06 br 8027b8c + 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 + + /* 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 + TK_YIELD(); + 8027b80: 8027ce40 call 8027ce4 + LOCK_NET_RESOURCE(NET_RESID); + 8027b84: 0009883a mov r4,zero + 8027b88: 8028f380 call 8028f38 +} + 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 : + * + * 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 + + for (i = 0; i < GLOBWAKE_SZ; i++) + 8027bb8: e03fff15 stw zero,-4(fp) + 8027bbc: 00002406 br 8027c50 + { + 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 + (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 + { + /* 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 + + /* 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 + } + } + + OSSchedUnlock(); + 8027c5c: 80109940 call 8010994 +} + 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 : + + + +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 + 8027c98: e0bfffc5 stb r2,-1(fp) + + if (err == OS_NO_ERR) + 8027c9c: e0bfffc3 ldbu r2,-1(fp) + 8027ca0: 1000041e bne r2,zero,8027cb4 + { + 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 + dprintf("ChronOS API call failure, unable to identify task!"); + 8027cb4: 01020174 movhi r4,2053 + 8027cb8: 2128cd04 addi r4,r4,-23756 + 8027cbc: 8002c780 call 8002c78 + panic("TK_OSTaskQuery"); + 8027cc0: 01020174 movhi r4,2053 + 8027cc4: 2128da04 addi r4,r4,-23704 + 8027cc8: 80271780 call 8027178 + 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 : + + + +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 +} + 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 : +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 + +#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 +#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 + + + for (t = 0; t <= OS_LOWEST_PRIO ; t++) + 8027d60: e03fff15 stw zero,-4(fp) + 8027d64: 00005006 br 8027ea8 + { + /* 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 + 8027d88: e0bffd17 ldw r2,-12(fp) + 8027d8c: 10800058 cmpnei r2,r2,1 + 8027d90: 10004126 beq r2,zero,8027e98 + 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 + +#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 + /* 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 + 8027dfc: e0bffd17 ldw r2,-12(fp) + 8027e00: 10800317 ldw r2,12(r2) + 8027e04: 10001f26 beq r2,zero,8027e84 + { + 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 + 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 + /* 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 + 8027e80: 00000606 br 8027e9c + } + 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 + 8027e94: 00000106 br 8027e9c + 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 + } + } + + 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 + 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 + 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 : +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 + 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 + 8027f48: e0bffe15 stw r2,-8(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8027f4c: 01000084 movi r4,2 + 8027f50: 8028ff40 call 8028ff4 + if (!p) + 8027f54: e0bffe17 ldw r2,-8(fp) + 8027f58: 1000081e bne r2,zero,8027f7c + { +#ifdef NPDEBUG + if (NDEBUG & IPTRACE) + 8027f5c: d0a06617 ldw r2,-32360(gp) + 8027f60: 1080800c andi r2,r2,512 + 8027f64: 10000326 beq r2,zero,8027f74 + dprintf("icmp: can't alloc packet\n"); + 8027f68: 01020174 movhi r4,2053 + 8027f6c: 21292d04 addi r4,r4,-23372 + 8027f70: 8002d9c0 call 8002d9c +#endif + return(ENP_NOBUFFER); + 8027f74: 00bffac4 movi r2,-21 + 8027f78: 00008606 br 8028194 + } + + 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 + 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 + { + 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 + 8027fe4: 00001706 br 8028044 + } + 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 + donedata = (unsigned)strlen(pingdata); + 8028000: d0a01517 ldw r2,-32684(gp) + 8028004: 1009883a mov r4,r2 + 8028008: 8002dac0 call 8002dac + 802800c: e0bfff15 stw r2,-4(fp) + while (donedata < datalen) + 8028010: 00000906 br 8028038 + { + *(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 + } + } + + /* 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 + *((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 + 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 + 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 + 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 + 8028134: e0bffb15 stw r2,-20(fp) + UNLOCK_NET_RESOURCE(NET_RESID); + 8028138: 0009883a mov r4,zero + 802813c: 8028ff40 call 8028ff4 + + /* 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 + { +#ifdef NPDEBUG + if (NDEBUG & NETERR) + 8028148: d0a06617 ldw r2,-32360(gp) + 802814c: 1080020c andi r2,r2,8 + 8028150: 10000326 beq r2,zero,8028160 + dprintf("icmp: can't send echo request\n"); + 8028154: 01020174 movhi r4,2053 + 8028158: 21293404 addi r4,r4,-23344 + 802815c: 8002d9c0 call 8002d9c +#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 + } + /* 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 : + * 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 + { + packet = (PACKET)NB_ALLOC(sizeof(struct netbuf)); + 80281d4: 01000d04 movi r4,52 + 80281d8: 802982c0 call 802982c + 80281dc: e0bffa15 stw r2,-24(fp) + if (packet == NULL) + 80281e0: e0bffa17 ldw r2,-24(fp) + 80281e4: 10008026 beq r2,zero,80283e8 + 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 + { + dprintf("pk_init: bad define\n"); + 80281f4: 01020174 movhi r4,2053 + 80281f8: 21293c04 addi r4,r4,-23312 + 80281fc: 8002d9c0 call 8002d9c + return -1; + 8028200: 00bfffc4 movi r2,-1 + 8028204: 00008606 br 8028420 + } + 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 +#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 + 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 + 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 + *(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 + + *(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 + 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 + 80282ec: 00002e06 br 80283a8 +#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 + 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 + 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 + *(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 + + *(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 + 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 + 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 + } + } + 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 + goto no_pkt_buf; + 80283e8: 0001883a nop + 80283ec: 00000706 br 802840c + goto no_pkt_buf; + 80283f0: 0001883a nop + 80283f4: 00000506 br 802840c + goto no_pkt_buf; + 80283f8: 0001883a nop + 80283fc: 00000306 br 802840c + goto no_pkt_buf; + 8028400: 0001883a nop + 8028404: 00000106 br 802840c + 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 +#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 : + * 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 + { +#ifdef HEAPBUFS + if ((p = pk_alloc_heapbuf (len)) == NULL) + return NULL; +#else + return(NULL); + 8028454: 0005883a mov r2,zero + 8028458: 00002106 br 80284e0 +#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 + 8028468: 008201b4 movhi r2,2054 + 802846c: 10b79817 ldw r2,-8608(r2) + 8028470: 1000051e bne r2,zero,8028488 + p = (PACKET)getq(&bigfreeq); + 8028474: 010201b4 movhi r4,2054 + 8028478: 2137db04 addi r4,r4,-8340 + 802847c: 80288d80 call 80288d8 + 8028480: e0bfff15 stw r2,-4(fp) + 8028484: 00000406 br 8028498 + else + p = (PACKET)getq(&lilfreeq); + 8028488: 010201b4 movhi r4,2054 + 802848c: 21379604 addi r4,r4,-8616 + 8028490: 80288d80 call 80288d8 + 8028494: e0bfff15 stw r2,-4(fp) + + if (!p) + 8028498: e0bfff17 ldw r2,-4(fp) + 802849c: 1000021e bne r2,zero,80284a8 + return NULL; + 80284a0: 0005883a mov r2,zero + 80284a4: 00000e06 br 80284e0 + } + + 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 : + * 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 + 8028514: e0bffd17 ldw r2,-12(fp) + 8028518: 10800917 ldw r2,36(r2) + 802851c: 10000926 beq r2,zero,8028544 + { + INCR_SHARED_VAR (memestats, INCONSISTENT_LOCATION_ERR, 1); + 8028520: 8028e940 call 8028e94 + 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 + return -1; + 802853c: 00bfffc4 movi r2,-1 + 8028540: 00007c06 br 8028734 + } + 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 + { + ENTER_CRIT_SECTION(&bigfreeq); + 8028554: 8028e940 call 8028e94 + 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 + if (p == pkt) + 8028568: e0ffff17 ldw r3,-4(fp) + 802856c: e0bffd17 ldw r2,-12(fp) + 8028570: 18800e1e bne r3,r2,80285ac + { + 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 + EXIT_CRIT_SECTION(&bigfreeq); + 8028584: 8028ef40 call 8028ef4 + INCR_SHARED_VAR (memestats, MULTIPLE_FREE_ERR, 1); + 8028588: 8028e940 call 8028e94 + 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 + return -1; + 80285a4: 00bfffc4 movi r2,-1 + 80285a8: 00006206 br 8028734 + 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 + } + EXIT_CRIT_SECTION(&bigfreeq); + 80285c0: 8028ef40 call 8028ef4 + 80285c4: 00002a06 br 8028670 + } + 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 + { + ENTER_CRIT_SECTION(&lilfreeq); + 80285d8: 8028e940 call 8028e94 + 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 + if (p == pkt) + 80285ec: e0ffff17 ldw r3,-4(fp) + 80285f0: e0bffd17 ldw r2,-12(fp) + 80285f4: 18800e1e bne r3,r2,8028630 + { + 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 + EXIT_CRIT_SECTION(&lilfreeq); + 8028608: 8028ef40 call 8028ef4 + INCR_SHARED_VAR (memestats, MULTIPLE_FREE_ERR, 1); + 802860c: 8028e940 call 8028e94 + 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 + return -1; + 8028628: 00bfffc4 movi r2,-1 + 802862c: 00004106 br 8028734 + 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 + } + EXIT_CRIT_SECTION(&lilfreeq); + 8028644: 8028ef40 call 8028ef4 + 8028648: 00000906 br 8028670 + } + else + { + /* log an error */ + INCR_SHARED_VAR (memestats, BAD_REGULAR_BUF_LEN_ERR, 1); + 802864c: 8028e940 call 8028e94 + 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 + return -1; + 8028668: 00bfffc4 movi r2,-1 + 802866c: 00003106 br 8028734 + } + +#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 + { + 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 + { + INCR_SHARED_VAR (memestats, GUARD_BAND_VIOLATED_ERR, 1); + 80286a8: 8028e940 call 8028e94 + 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 + return -1; + 80286c4: 00bfffc4 movi r2,-1 + 80286c8: 00001a06 br 8028734 + 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 + } + } + 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 + { + INCR_SHARED_VAR (memestats, GUARD_BAND_VIOLATED_ERR, 1); + 802870c: 8028e940 call 8028e94 + 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 + return -1; + 8028728: 00bfffc4 movi r2,-1 + 802872c: 00000106 br 8028734 + } +#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 : + * + * 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 + 8028764: e0bfff15 stw r2,-4(fp) + if (e) + 8028768: e0bfff17 ldw r2,-4(fp) + 802876c: 1000191e bne r2,zero,80287d4 + 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_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 + 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 + 80287ac: 00000c06 br 80287e0 + 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 + 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 + 80287d0: 00000306 br 80287e0 + return; + 80287d4: 0001883a nop + 80287d8: 00000106 br 80287e0 + 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 : + * + * 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 : + * + * 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 + ENTER_CRIT_SECTION(&memestats); + 8028830: 8028e940 call 8028e94 + 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 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8028868: 01000084 movi r4,2 + 802886c: 8028ff40 call 8028ff4 + + 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(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(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 + + 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 : + * 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 + + 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 + { + EXIT_CRIT_SECTION(q); + 8028904: 8028ef40 call 8028ef4 + return (0); /* yes, show none */ + 8028908: 0005883a mov r2,zero + 802890c: 00001b06 br 802897c + } + + 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 + 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 + 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 + + 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 : + +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 + 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 + 80289c0: e0bfff17 ldw r2,-4(fp) + 80289c4: e0fffe17 ldw r3,-8(fp) + 80289c8: 10c00015 stw r3,0(r2) + 80289cc: 00000406 br 80289e0 + 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 + 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 +} + 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 : + * 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 + 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 + { + if (qptr == (qp)elt) + 8028a70: e0ffff17 ldw r3,-4(fp) + 8028a74: e0bffc17 ldw r2,-16(fp) + 8028a78: 1880231e bne r3,r2,8028b08 + { + /* found our item; dequeue it */ + if (qlast) + 8028a7c: e0bffe17 ldw r2,-8(fp) + 8028a80: 10000526 beq r2,zero,8028a98 + 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 + 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 + 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 + 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 + return (qp)elt; /* success exit point */ + 8028b00: e0bffc17 ldw r2,-16(fp) + 8028b04: 00000906 br 8028b2c + } + 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 + } + EXIT_CRIT_SECTION(q); /* restore int state */ + 8028b24: 8028ef40 call 8028ef4 + 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 : + .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 + + 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 + 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 : + 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: + 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: + subi r5, r5, 16 + 8028c8c: 297ffc04 addi r5,r5,-16 + bge r5, zero, loop + 8028c90: 283fbd0e bge r5,zero,8028b88 +/* + * process last halfword (if any) + */ + beq r9, zero, fold + 8028c94: 48000426 beq r9,zero,8028ca8 + 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: + 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: + ret /* r2 = 16-bit checksum */ + 8028cd0: f800283a ret + +08028cd4 : +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 +} + 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 : + +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 + /* 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 + 8028d30: 10000426 beq r2,zero,8028d44 + { + printf("F_SETFL failed.\n"); + 8028d34: 01020174 movhi r4,2053 + 8028d38: 21298904 addi r4,r4,-23004 + 8028d3c: 8002d9c0 call 8002d9c + dtrap(); + 8028d40: 8028cd40 call 8028cd4 + } + 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 + { + kb = getchar(); + 8028d58: 8002c380 call 8002c38 + 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 + return (FALSE); + 8028d68: 0005883a mov r2,zero + 8028d6c: 00000306 br 8028d7c + + /* 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 : + +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 + { + 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 + } + else + chr = getchar(); + 8028dc0: 8002c380 call 8002c38 + 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 : +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 : + +/* 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 : + * 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_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++; + 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 : + * 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 + { + 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 : + + +/* 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 + { + 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 : +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 + 8028f5c: e0bffd17 ldw r2,-12(fp) + 8028f60: 10800408 cmpgei r2,r2,16 + 8028f64: 10001d1e bne r2,zero,8028fdc + { + 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 + /* + * 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 + 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 + { + panic("lock NET"); /* fatal */ + 8028fb8: 01020174 movhi r4,2053 + 8028fbc: 21298d04 addi r4,r4,-22988 + 8028fc0: 80271780 call 8027178 + 8028fc4: 00000606 br 8028fe0 + 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 + if ((0 <= resid) && (resid <= MAX_RESID)) + 8028fd8: 00000106 br 8028fe0 + } + else + dtrap(); + 8028fdc: 8028cd40 call 8028cd4 +} + 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 : + +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 + 8029014: e0bffe17 ldw r2,-8(fp) + 8029018: 10800408 cmpgei r2,r2,16 + 802901c: 10000e1e bne r2,zero,8029058 + { + 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 + 802903c: e0bfffc5 stb r2,-1(fp) + if (error != OS_NO_ERR) + 8029040: e0bfffc3 ldbu r2,-1(fp) + 8029044: 10000526 beq r2,zero,802905c + { + panic("unlock NET"); + 8029048: 01020174 movhi r4,2053 + 802904c: 21299004 addi r4,r4,-22976 + 8029050: 80271780 call 8027178 + if (error != OS_NO_ERR) + 8029054: 00000106 br 802905c + } + } + else + dtrap(); + 8029058: 8028cd40 call 8028cd4 +} + 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 : +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 + 8029098: e0bfff15 stw r2,-4(fp) + if(!stack) + 802909c: e0bfff17 ldw r2,-4(fp) + 80290a0: 1000031e bne r2,zero,80290b0 + panic("stack alloc"); + 80290a4: 01020174 movhi r4,2053 + 80290a8: 21299304 addi r4,r4,-22964 + 80290ac: 80271780 call 8027178 + +#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 + 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 + { + 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 + 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 + "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 + 80291ac: 00002006 br 8029230 + "\"\\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 + { + 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 + "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 + 80291f4: 00000e06 br 8029230 + "\"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 + { /* 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 + error, nettask->name); + return (-1); + 8029228: 00bfffc4 movi r2,-1 + 802922c: 00001c06 br 80292a0 + } + + /* 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 + + 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 + (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 : + * 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 + { + 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 + /* + * 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 + 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 + { + panic("lock NET"); /* fatal */ + 802932c: 01020174 movhi r4,2053 + 8029330: 21298d04 addi r4,r4,-22988 + 8029334: 80271780 call 8027178 + 8029338: 00000606 br 8029354 + 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 + 802934c: 00000106 br 8029354 + } + else + dtrap(); + 8029350: 8028cd40 call 8028cd4 +} + 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 : + * 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 + { + 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 + 80293a4: e0bfffc5 stb r2,-1(fp) + if (error != OS_NO_ERR) + 80293a8: e0bfffc3 ldbu r2,-1(fp) + 80293ac: 10000526 beq r2,zero,80293c4 + { + panic("unlock NET"); + 80293b0: 01020174 movhi r4,2053 + 80293b4: 21299004 addi r4,r4,-22976 + 80293b8: 80271780 call 8027178 + } + } + else + dtrap(); +} + 80293bc: 00000106 br 80293c4 + dtrap(); + 80293c0: 8028cd40 call 8028cd4 +} + 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 : +#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 + 80293f4: d0a07f15 stw r2,-32260(gp) + if (!mheap_sem_ptr) + 80293f8: d0a07f17 ldw r2,-32260(gp) + 80293fc: 1000031e bne r2,zero,802940c + panic("mheap_sem_ptr create err"); + 8029400: 01020174 movhi r4,2053 + 8029404: 212a2804 addi r4,r4,-22368 + 8029408: 80271780 call 8027178 + + rcvdq_sem_ptr = OSSemCreate(0); + 802940c: 0009883a mov r4,zero + 8029410: 80157740 call 8015774 + 8029414: d0a08015 stw r2,-32256(gp) + if (!rcvdq_sem_ptr) + 8029418: d0a08017 ldw r2,-32256(gp) + 802941c: 1000031e bne r2,zero,802942c + panic("rcvdq_sem_ptr create err"); + 8029420: 01020174 movhi r4,2053 + 8029424: 212a2f04 addi r4,r4,-22340 + 8029428: 80271780 call 8027178 + +#ifdef OS_PREEMPTIVE + for (i = 0; i <= MAX_RESID; i++) + 802942c: e03fff15 stw zero,-4(fp) + 8029430: 00001406 br 8029484 + { + resid_semaphore[i] = OSSemCreate(1); + 8029434: 01000044 movi r4,1 + 8029438: 80157740 call 8015774 + 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 + panic("resid_semaphore create err"); + 802946c: 01020174 movhi r4,2053 + 8029470: 212a3604 addi r4,r4,-22312 + 8029474: 80271780 call 8027178 + 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 + } + for (i = 0; i <= MAX_SEMID; i++) + 8029490: e03fff15 stw zero,-4(fp) + 8029494: 00001406 br 80294e8 + { + app_semaphore[i] = OSSemCreate(1); + 8029498: 01000044 movi r4,1 + 802949c: 80157740 call 8015774 + 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 + panic("app_semaphore create err"); + 80294d0: 01020174 movhi r4,2053 + 80294d4: 212a3d04 addi r4,r4,-22284 + 80294d8: 80271780 call 8027178 + 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 + +#ifndef TCPWAKE_RTOS + /* + * clear global_TCPwakeup_set + */ + for (i = 0; i < GLOBWAKE_SZ; i++) + 80294f4: e03fff15 stw zero,-4(fp) + 80294f8: 00001e06 br 8029574 + { + 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 + 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 + panic("globwake_semaphore create err"); + 802955c: 01020174 movhi r4,2053 + 8029560: 212a4404 addi r4,r4,-22256 + 8029564: 80271780 call 8027178 + 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 + } + 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 : + * 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 : + * 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 : + +#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 + 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 : +#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 + 8029660: 00820134 movhi r2,2052 + 8029664: 108b2604 addi r2,r2,11416 + 8029668: 00000206 br 8029674 + 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 + if(err) + 8029690: e0bffcc3 ldbu r2,-13(fp) + 8029694: 10803fcc andi r2,r2,255 + 8029698: 10001626 beq r2,zero,80296f4 + { + 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 + { + 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 + { + panic("npalloc"); /* fatal? */ + 80296b8: 01020174 movhi r4,2053 + 80296bc: 212a4c04 addi r4,r4,-22224 + 80296c0: 80271780 call 8027178 + return NULL; + 80296c4: 0005883a mov r2,zero + 80296c8: 00001b06 br 8029738 + } + 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 + 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 +#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 + 8029710: e0bffcc5 stb r2,-13(fp) +#endif + + if(!ptr) + 8029714: e0bffd17 ldw r2,-12(fp) + 8029718: 1000021e bne r2,zero,8029724 + return NULL; + 802971c: 0005883a mov r2,zero + 8029720: 00000506 br 8029738 + + 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 + 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 : + +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 + 802976c: 00820134 movhi r2,2052 + 8029770: 108b2a04 addi r2,r2,11432 + 8029774: 00000206 br 8029780 + 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 + if (err) + 802979c: e0bffdc3 ldbu r2,-9(fp) + 80297a0: 10803fcc andi r2,r2,255 + 80297a4: 10001526 beq r2,zero,80297fc + { + 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 + { + 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 + { + panic("npfree"); /* fatal? */ + 80297c4: 01020174 movhi r4,2053 + 80297c8: 212a4e04 addi r4,r4,-22216 + 80297cc: 80271780 call 8027178 + 80297d0: 00001106 br 8029818 + 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 + 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 + } + +#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 + 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 : + +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 +} + 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 : + +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_base(ptr, 1); + 802987c: 01400044 movi r5,1 + 8029880: e13fff17 ldw r4,-4(fp) + 8029884: 802974c0 call 802974c + } +} + 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 : + * 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 +} + 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 : + +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 + npfree_base(ptr, 0); + 80298f0: 000b883a mov r5,zero + 80298f4: e13fff17 ldw r4,-4(fp) + 80298f8: 802974c0 call 802974c + } +} + 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 : + * 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 + { +#ifdef IP_V6 + if(domain != AF_INET6) +#endif + { + dtrap(); /* programming error */ + 8029938: 8028cd40 call 8028cd4 + return NULL; + 802993c: 0005883a mov r2,zero + 8029940: 00001306 br 8029990 + } + } + + if (type == SOCK_STREAM) + 8029944: e0bffe17 ldw r2,-8(fp) + 8029948: 10800058 cmpnei r2,r2,1 + 802994c: 1000031e bne r2,zero,802995c + return &tcp_protosw; + 8029950: 00820174 movhi r2,2053 + 8029954: 10b1f804 addi r2,r2,-14368 + 8029958: 00000d06 br 8029990 +#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 + return &udp_protosw; + 8029968: 00820174 movhi r2,2053 + 802996c: 10b1fe04 addi r2,r2,-14344 + 8029970: 00000706 br 8029990 +#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 + return &rawip_protosw; + 8029980: 00820174 movhi r2,2053 + 8029984: 10b20404 addi r2,r2,-14320 + 8029988: 00000106 br 8029990 +#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 : + * 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 + return(pffindtype(domain, type)); + 80299cc: e17ffd17 ldw r5,-12(fp) + 80299d0: e13fff17 ldw r4,-4(fp) + 80299d4: 80299140 call 8029914 + 80299d8: 00002006 br 8029a5c +#endif + + switch (protocol) + 80299dc: e0bffe17 ldw r2,-8(fp) + 80299e0: 108001a0 cmpeqi r2,r2,6 + 80299e4: 1000061e bne r2,zero,8029a00 + 80299e8: e0bffe17 ldw r2,-8(fp) + 80299ec: 10800460 cmpeqi r2,r2,17 + 80299f0: 1000091e bne r2,zero,8029a18 + 80299f4: e0bffe17 ldw r2,-8(fp) + 80299f8: 10001026 beq r2,zero,8029a3c + 80299fc: 00000c06 br 8029a30 + { +#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 + break; + /* IPPROTO_TCP protocol on non-SOCK_STREAM type socket */ + dtrap(); + 8029a0c: 8028cd40 call 8028cd4 + return NULL; + 8029a10: 0005883a mov r2,zero + 8029a14: 00001106 br 8029a5c + 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 + break; + /* IPPROTO_UDP protocol on non-SOCK_DGRAM type socket */ + dtrap(); + 8029a24: 8028cd40 call 8028cd4 + return NULL; + 8029a28: 0005883a mov r2,zero + 8029a2c: 00000b06 br 8029a5c + case 0: + /* let protocol default based on socket type */ + break; + default: + /* unknown/unsupported protocol on socket */ + dtrap(); + 8029a30: 8028cd40 call 8028cd4 + return NULL; + 8029a34: 0005883a mov r2,zero + 8029a38: 00000806 br 8029a5c + break; + 8029a3c: 0001883a nop + 8029a40: 00000306 br 8029a50 + break; + 8029a44: 0001883a nop + 8029a48: 00000106 br 8029a50 + 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 +} + 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 : + * 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 + 8029a94: e0bffd17 ldw r2,-12(fp) + 8029a98: 10800390 cmplti r2,r2,14 + 8029a9c: 1000011e bne r2,zero,8029aa4 + { + dtrap(); /* is this OK? */ + 8029aa0: 8028cd40 call 8028cd4 + } +#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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 8029aac: 01000084 movi r4,2 + 8029ab0: 8028f380 call 8028f38 + 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 + 8029ac4: e0bfff15 stw r2,-4(fp) + + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8029ac8: 01000084 movi r4,2 + 8029acc: 8028ff40 call 8028ff4 + if (!pkt) + 8029ad0: e0bfff17 ldw r2,-4(fp) + 8029ad4: 1000021e bne r2,zero,8029ae0 + return NULL; + 8029ad8: 0005883a mov r2,zero + 8029adc: 00004106 br 8029be4 + } + + m = (struct mbuf *)getq(&mfreeq); + 8029ae0: 010201b4 movhi r4,2054 + 8029ae4: 21388a04 addi r4,r4,-7640 + 8029ae8: 80288d80 call 80288d8 + 8029aec: e0bffe15 stw r2,-8(fp) + if (!m) + 8029af0: e0bffe17 ldw r2,-8(fp) + 8029af4: 10000a1e bne r2,zero,8029b20 + { + if (pkt) + 8029af8: e0bfff17 ldw r2,-4(fp) + 8029afc: 10000626 beq r2,zero,8029b18 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 8029b00: 01000084 movi r4,2 + 8029b04: 8028f380 call 8028f38 + pk_free(pkt); + 8029b08: e13fff17 ldw r4,-4(fp) + 8029b0c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8029b10: 01000084 movi r4,2 + 8029b14: 8028ff40 call 8028ff4 + } + return NULL; + 8029b18: 0005883a mov r2,zero + 8029b1c: 00003106 br 8029be4 + } + 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->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 + } + 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 + 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 : + */ + + +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 + panic("mfree: q_len"); + 8029c18: 01020174 movhi r4,2053 + 8029c1c: 212a5004 addi r4,r4,-22208 + 8029c20: 80271780 call 8027178 + + 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 + 8029c30: e0bffe17 ldw r2,-8(fp) + 8029c34: 10800817 ldw r2,32(r2) + 8029c38: 10800390 cmplti r2,r2,14 + 8029c3c: 10000a1e bne r2,zero,8029c68 + { + if (m->m_type == MT_FREE) + 8029c40: e0bffe17 ldw r2,-8(fp) + 8029c44: 10800817 ldw r2,32(r2) + 8029c48: 1000041e bne r2,zero,8029c5c + { + dtrap(); /* debug double free of mbuf by tcp_in() */ + 8029c4c: 8028cd40 call 8028cd4 + return m->m_next; /* seems harmless, though.... */ + 8029c50: e0bffe17 ldw r2,-8(fp) + 8029c54: 10800617 ldw r2,24(r2) + 8029c58: 00002306 br 8029ce8 + } + else + panic("m_free: type"); + 8029c5c: 01020174 movhi r4,2053 + 8029c60: 212a5404 addi r4,r4,-22192 + 8029c64: 80271780 call 8027178 + } +#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 + 8029c84: 1000031e bne r2,zero,8029c94 + panic("m_free: missing"); + 8029c88: 01020174 movhi r4,2053 + 8029c8c: 212a5804 addi r4,r4,-22176 + 8029c90: 80271780 call 8027178 + + 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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 8029ca8: 01000084 movi r4,2 + 8029cac: 8028f380 call 8028f38 + 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 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8029cc0: 01000084 movi r4,2 + 8029cc4: 8028ff40 call 8028ff4 + } + 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 + 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 : + * 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 = m_free(m); + 8029d14: e13fff17 ldw r4,-4(fp) + 8029d18: 8029bf80 call 8029bf8 + 8029d1c: e0bfff15 stw r2,-4(fp) + while (m != NULL) + 8029d20: e0bfff17 ldw r2,-4(fp) + 8029d24: 103ffb1e bne r2,zero,8029d14 +} + 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 : + * 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 + return NULL; + 8029d64: 0005883a mov r2,zero + 8029d68: 0000a606 br 802a004 + +#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 + 8029d74: e0bff917 ldw r2,-28(fp) + 8029d78: 1000180e bge r2,zero,8029ddc + 8029d7c: e0bff917 ldw r2,-28(fp) + 8029d80: 10bfffe0 cmpeqi r2,r2,-1 + 8029d84: 1000151e bne r2,zero,8029ddc + { + dtrap(); + 8029d88: 8028cd40 call 8028cd4 + return NULL; + 8029d8c: 0005883a mov r2,zero + 8029d90: 00009c06 br 802a004 +#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 + { + dtrap(); + 8029d9c: 8028cd40 call 8028cd4 + return NULL; + 8029da0: 0005883a mov r2,zero + 8029da4: 00009706 br 802a004 + } + 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 + 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 + 8029de4: 00000106 br 8029dec + 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 + { + if (m == NULL) /* at end of queue? */ + 8029dfc: e0bffb17 ldw r2,-20(fp) + 8029e00: 1000051e bne r2,zero,8029e18 + { + panic("m_copy: bad len"); + 8029e04: 01020174 movhi r4,2053 + 8029e08: 212a5c04 addi r4,r4,-22160 + 8029e0c: 80271780 call 8027178 + return NULL; + 8029e10: 0005883a mov r2,zero + 8029e14: 00007b06 br 802a004 + } + 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 + 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->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 + { + 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 + 8029e70: e0bfff15 stw r2,-4(fp) + 8029e74: e0bfff17 ldw r2,-4(fp) + 8029e78: 10005c26 beq r2,zero,8029fec + 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 + 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 + { + /* 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 + 8029ef4: e0bfff15 stw r2,-4(fp) + 8029ef8: e0bfff17 ldw r2,-4(fp) + 8029efc: 10003d26 beq r2,zero,8029ff4 + 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 + 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 + 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 + + } + + return head; + 8029fe4: e0bffe17 ldw r2,-8(fp) + 8029fe8: 00000606 br 802a004 + goto nospace; + 8029fec: 0001883a nop + 8029ff0: 00000106 br 8029ff8 + goto nospace; + 8029ff4: 0001883a nop + +nospace: + m_freem (head); + 8029ff8: e13ffe17 ldw r4,-8(fp) + 8029ffc: 8029cfc0 call 8029cfc + 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 : + * 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 + return; + + if (len >= 0) + 802a03c: e0bffc17 ldw r2,-16(fp) + 802a040: 10002216 blt r2,zero,802a0cc + { + while (m != NULL && len > 0) + 802a044: 00001c06 br 802a0b8 + { + 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 + { + 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 + } + 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 + while (m != NULL && len > 0) + 802a0b8: e0bfff17 ldw r2,-4(fp) + 802a0bc: 10004226 beq r2,zero,802a1c8 + 802a0c0: e0bffc17 ldw r2,-16(fp) + 802a0c4: 00bfe016 blt zero,r2,802a048 + 802a0c8: 00003f06 br 802a1c8 + * 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 + 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 + 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->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 + } + 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 + { + 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->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 + } + 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 + } + while ((m = m->m_next) != (struct mbuf *)NULL) + 802a1a0: 00000206 br 802a1ac + 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 + 802a1c0: 00000106 br 802a1c8 + 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 : + * 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 + { + 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 + } + 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 : + * 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 + { + 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 + 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 + return (struct mbuf *)qptr; + 802a284: e0bfff17 ldw r2,-4(fp) + 802a288: 00000906 br 802a2b0 + 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 + 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 + 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 : +}; + + +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 + 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 + 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 + 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 : + * 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 + 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 : + * 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(&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(&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 + for (i = 0; i < (int)bufcount; i++) + 802a414: e03fff15 stw zero,-4(fp) + 802a418: 00001506 br 802a470 + { + m = MBU_ALLOC(sizeof(struct mbuf)); + 802a41c: 01000904 movi r4,36 + 802a420: 802982c0 call 802982c + 802a424: e0bffd15 stw r2,-12(fp) + if (!m) /* malloc error, bail out */ + 802a428: e0bffd17 ldw r2,-12(fp) + 802a42c: 1000031e bne r2,zero,802a43c + panic("tcpinit"); + 802a430: 01020174 movhi r4,2053 + 802a434: 212a6204 addi r4,r4,-22136 + 802a438: 80271780 call 8027178 + 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 + 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 + } + 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 + +#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 : + +#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 + 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_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 + pk_free(pkt); /* punt packet */ + 802a560: e13ffb17 ldw r4,-20(fp) + 802a564: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802a568: 01000084 movi r4,2 + 802a56c: 8028ff40 call 8028ff4 + return ENP_BAD_HEADER; + 802a570: 00bff804 movi r2,-32 + 802a574: 00003306 br 802a644 + } + + m_in = m_getnbuf(MT_RXDATA, 0); + 802a578: 000b883a mov r5,zero + 802a57c: 01000044 movi r4,1 + 802a580: 8029a700 call 8029a70 + 802a584: e0bffc15 stw r2,-16(fp) + if (!m_in){ + 802a588: e0bffc17 ldw r2,-16(fp) + 802a58c: 1000081e bne r2,zero,802a5b0 + LOCK_NET_RESOURCE(FREEQ_RESID); + 802a590: 01000084 movi r4,2 + 802a594: 8028f380 call 8028f38 + pk_free(pkt); + 802a598: e13ffb17 ldw r4,-20(fp) + 802a59c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802a5a0: 01000084 movi r4,2 + 802a5a4: 8028ff40 call 8028ff4 + return ENP_RESOURCE; + 802a5a8: 00bffa84 movi r2,-22 + 802a5ac: 00002506 br 802a644 + } + + 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 + + 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 : + * 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 + { + 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 + { + 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 + { + 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 + 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 + 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 + 802a768: e0bffe17 ldw r2,-8(fp) + 802a76c: 10800217 ldw r2,8(r2) + 802a770: 108002b0 cmpltui r2,r2,10 + 802a774: 103fc71e bne r2,zero,802a694 + 802a778: 00005206 br 802a8c4 + } + 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 + { + /* 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 + { +#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 +#endif + panic("tcp_out:mbuf-nbuf"); /* sanity check */ + 802a7c4: 01020174 movhi r4,2053 + 802a7c8: 212a6a04 addi r4,r4,-22104 + 802a7cc: 80271780 call 8027178 + } + + 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 + && ((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 + && ((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 + { + 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 + 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 + 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 + } + 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 + { + 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 + 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 + LOCK_NET_RESOURCE(FREEQ_RESID); + 802a90c: 01000084 movi r4,2 + 802a910: 8028f380 call 8028f38 + 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 + 802a924: e0bffb15 stw r2,-20(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802a928: 01000084 movi r4,2 + 802a92c: 8028ff40 call 8028ff4 + if (!pkt) + 802a930: e0bffb17 ldw r2,-20(fp) + 802a934: 1000021e bne r2,zero,802a940 + return ENOBUFS; + 802a938: 00801a44 movi r2,105 + 802a93c: 0000a306 br 802abcc + 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 + { + 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 + 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 + m_free(m2); + 802a9e4: e13ffe17 ldw r4,-8(fp) + 802a9e8: 8029bf80 call 8029bf8 + 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 + } + 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 + 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 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802aa3c: 01000084 movi r4,2 + 802aa40: 8028ff40 call 8028ff4 + 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 + panic("ip_output: overflow"); + 802aaa4: 01020174 movhi r4,2053 + 802aaa8: 212a6f04 addi r4,r4,-22084 + 802aaac: 80271780 call 8027178 + + 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 + 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 + 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 + 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 + + if (e < 0) + 802aba4: e0bffa17 ldw r2,-24(fp) + 802aba8: 1000070e bge r2,zero,802abc8 + { + /* 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 + return 0; + 802abb8: 0005883a mov r2,zero + 802abbc: 00000306 br 802abcc + return e; + 802abc0: e0bffa17 ldw r2,-24(fp) + 802abc4: 00000106 br 802abcc + } + 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 : + * 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 + return TRUE; + 802abfc: 00800044 movi r2,1 + 802ac00: 00000106 br 802ac08 + + 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 : + * 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 + 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 + 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 + 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 : + * 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 + 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 + { + /* 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 + 802ae74: e0bffb15 stw r2,-20(fp) + if (inp == 0) + 802ae78: e0bffb17 ldw r2,-20(fp) + 802ae7c: 10005d26 beq r2,zero,802aff4 + 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 + 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 + { + 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 + goto done; + } + } +#endif + + tcp_close(tp); + 802aeb8: e13ff917 ldw r4,-28(fp) + 802aebc: 80350e80 call 80350e8 + } + 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 + } +#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 + { + 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 + 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 + 802af04: e0bfff17 ldw r2,-4(fp) + 802af08: 1080020b ldhu r2,8(r2) + 802af0c: 10bfffcc andi r2,r2,65535 + 802af10: 1000151e bne r2,zero,802af68 + (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 + (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 + 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 + 802af7c: 00000106 br 802af84 + { + break; /* found our UDP table entry */ + 802af80: 0001883a nop + } + if (!tmp) + 802af84: e0bfff17 ldw r2,-4(fp) + 802af88: 10002226 beq r2,zero,802b014 + 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 + 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 + 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 + 802afe8: 00000d06 br 802b020 + goto done; + 802afec: 0001883a nop + 802aff0: 00000b06 br 802b020 + goto done; + 802aff4: 0001883a nop + 802aff8: 00000906 br 802b020 + goto done; + 802affc: 0001883a nop + 802b000: 00000706 br 802b020 + goto done; + 802b004: 0001883a nop + 802b008: 00000506 br 802b020 + } +#endif /* UDP_SOCKETS */ + else + goto done; + 802b00c: 0001883a nop + 802b010: 00000306 br 802b020 + goto done; + 802b014: 0001883a nop + 802b018: 00000106 br 802b020 + 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 + pk_free(p); /* done with original packet */ + 802b028: e13ff817 ldw r4,-32(fp) + 802b02c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 802b030: 01000084 movi r4,2 + 802b034: 8028ff40 call 8028ff4 + 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 : +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 + 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 + + 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_slowtimo(); /* call routine in BSD tcp_timr.c */ + 802b088: 80353080 call 8035308 +#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 + + in_tcptick--; + 802b0a0: d0a08217 ldw r2,-32248(gp) + 802b0a4: 10bfffc4 addi r2,r2,-1 + 802b0a8: d0a08215 stw r2,-32248(gp) + 802b0ac: 00000106 br 802b0b4 + 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 : + * 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 + 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 + return (tmp); + 802b0f4: e0bfff17 ldw r2,-4(fp) + 802b0f8: 00000606 br 802b114 + 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 + + 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 : + * 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 + + /* 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 + { + UNLOCK_NET_RESOURCE(NET_RESID); + 802b16c: 0009883a mov r4,zero + 802b170: 8028ff40 call 8028ff4 + return ENOBUFS; + 802b174: 00801a44 movi r2,105 + 802b178: 00005606 br 802b2d4 + } + + /* 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 + 802b188: e0bffe15 stw r2,-8(fp) + if (!m_in) + 802b18c: e0bffe17 ldw r2,-8(fp) + 802b190: 1000041e bne r2,zero,802b1a4 + { + UNLOCK_NET_RESOURCE(NET_RESID); + 802b194: 0009883a mov r4,zero + 802b198: 8028ff40 call 8028ff4 + return ENOBUFS; + 802b19c: 00801a44 movi r2,105 + 802b1a0: 00004c06 br 802b2d4 + } + + /* 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 + { + 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 + 802b280: 1000081e bne r2,zero,802b2a4 + { + /* 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 + /* return error condition so caller can free the packet buffer */ + UNLOCK_NET_RESOURCE(NET_RESID); + 802b294: 0009883a mov r4,zero + 802b298: 8028ff40 call 8028ff4 + return ENOBUFS; + 802b29c: 00801a44 movi r2,105 + 802b2a0: 00000c06 br 802b2d4 + } + + 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 + + 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 + + UNLOCK_NET_RESOURCE(NET_RESID); + 802b2c8: 0009883a mov r4,zero + 802b2cc: 8028ff40 call 8028ff4 + 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 : + +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 + 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 + 802b344: 0802ba04 addi zero,at,2792 + 802b348: 0802b440 call 802b44 + 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 + 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 + 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 + 802b3e0: e0bff815 stw r2,-32(fp) + LOCK_NET_RESOURCE(NET_RESID); + 802b3e4: 0009883a mov r4,zero + 802b3e8: 8028f380 call 8028f38 + if (!ep) + 802b3ec: e0bff817 ldw r2,-32(fp) + 802b3f0: 1000021e bne r2,zero,802b3fc + return(EINVAL); + 802b3f4: 00800584 movi r2,22 + 802b3f8: 00018306 br 802ba08 + return 0; + 802b3fc: 0005883a mov r2,zero + 802b400: 00018106 br 802ba08 + case PRU_DETACH: + /* delete the raw IP endpoint */ + ep = rawip_lookup(so); + 802b404: e13ff417 ldw r4,-48(fp) + 802b408: 802b0c80 call 802b0c8 + 802b40c: e0bff815 stw r2,-32(fp) + if (!ep) + 802b410: e0bff817 ldw r2,-32(fp) + 802b414: 1000021e bne r2,zero,802b420 + return(EINVAL); + 802b418: 00800584 movi r2,22 + 802b41c: 00017a06 br 802ba08 + /* unlock the net resource; IP will immediatly re-lock it */ + UNLOCK_NET_RESOURCE(NET_RESID); + 802b420: 0009883a mov r4,zero + 802b424: 8028ff40 call 8028ff4 + ip_raw_close(ep); + 802b428: e13ff817 ldw r4,-32(fp) + 802b42c: 803c7140 call 803c714 + LOCK_NET_RESOURCE(NET_RESID); + 802b430: 0009883a mov r4,zero + 802b434: 8028f380 call 8028f38 + return 0; + 802b438: 0005883a mov r2,zero + 802b43c: 00017206 br 802ba08 + * 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 + return(EINVAL); + 802b448: 00800584 movi r2,22 + 802b44c: 00016e06 br 802ba08 + 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 + return(EINVAL); + 802b464: 00800584 movi r2,22 + 802b468: 00016706 br 802ba08 + 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 + return(EINVAL); + 802b47c: 00800584 movi r2,22 + 802b480: 00016106 br 802ba08 + ep = rawip_lookup(so); + 802b484: e13ff417 ldw r4,-48(fp) + 802b488: 802b0c80 call 802b0c8 + 802b48c: e0bff815 stw r2,-32(fp) + if (!ep) + 802b490: e0bff817 ldw r2,-32(fp) + 802b494: 1000021e bne r2,zero,802b4a0 + return(EINVAL); + 802b498: 00800584 movi r2,22 + 802b49c: 00015a06 br 802ba08 + if (req == PRU_BIND) + 802b4a0: e0bffa17 ldw r2,-24(fp) + 802b4a4: 10800098 cmpnei r2,r2,2 + 802b4a8: 10001f1e bne r2,zero,802b528 + * 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 + { + lhost = 0L; + 802b4b8: e03ffc15 stw zero,-16(fp) + 802b4bc: 00001606 br 802b518 + } + 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 + 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 + 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 + 802b500: 00000106 br 802b508 + break; + 802b504: 0001883a nop + if (ifp == NULL) + 802b508: e0bffb17 ldw r2,-20(fp) + 802b50c: 1000021e bne r2,zero,802b518 + return(EADDRNOTAVAIL); + 802b510: 00801f44 movi r2,125 + 802b514: 00013c06 br 802ba08 + } + + /* 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 + * + * 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 + fhost = 0L; + 802b534: e03ffd15 stw zero,-12(fp) + 802b538: 00000306 br 802b548 + 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 + 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 + } + 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 + } + return 0; + 802b5c0: 0005883a mov r2,zero + 802b5c4: 00011006 br 802ba08 + 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 + return(EINVAL); + 802b5d0: 00800584 movi r2,22 + 802b5d4: 00010c06 br 802ba08 + + ep = rawip_lookup(so); + 802b5d8: e13ff417 ldw r4,-48(fp) + 802b5dc: 802b0c80 call 802b0c8 + 802b5e0: e0bff815 stw r2,-32(fp) + if (!ep) + 802b5e4: e0bff817 ldw r2,-32(fp) + 802b5e8: 1000041e bne r2,zero,802b5fc + { + m_free(m); + 802b5ec: e13ff317 ldw r4,-52(fp) + 802b5f0: 8029bf80 call 8029bf8 + /* 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 + } + + if (nam == NULL) /* no sendto() info passed, must be send() */ + 802b5fc: e0bff217 ldw r2,-56(fp) + 802b600: 10000b1e bne r2,zero,802b630 + { + 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 + return (ENOTCONN); + 802b618: 00802004 movi r2,128 + 802b61c: 0000fa06 br 802ba08 + 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 + } + 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 + return (EISCONN); + 802b644: 00801fc4 movi r2,127 + 802b648: 0000ef06 br 802ba08 + 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 + { + dtrap(); + 802b65c: 8028cd40 call 8028cd4 + return (EINVAL); + 802b660: 00800584 movi r2,22 + 802b664: 0000e806 br 802ba08 + } + 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 + 802b69c: 1400032e bgeu r2,r16,802b6ac + { + dtrap(); /* should never happen */ + 802b6a0: 8028cd40 call 8028cd4 + return EMSGSIZE; /* try to recover */ + 802b6a4: 00801e84 movi r2,122 + 802b6a8: 0000d706 br 802ba08 + } + /* 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 + 802b6d0: e0bff615 stw r2,-40(fp) + if (!pkt) + 802b6d4: e0bff617 ldw r2,-40(fp) + 802b6d8: 1000041e bne r2,zero,802b6ec + { + m_free(m); + 802b6dc: e13ff317 ldw r4,-52(fp) + 802b6e0: 8029bf80 call 8029bf8 + return ENOBUFS; /* report buffer shortages */ + 802b6e4: 00801a44 movi r2,105 + 802b6e8: 0000c706 br 802ba08 + } + 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 + 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 + 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 + { +#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 + { + 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 + 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 + 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 + 802b788: 00001906 br 802b7f0 + 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 + 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 + (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 + (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 + 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 + 802b7e0: 00000306 br 802b7f0 + break; + 802b7e4: 0001883a nop + 802b7e8: 00000106 br 802b7f0 + break; + 802b7ec: 0001883a nop + } + if (ifp == NULL) + 802b7f0: e0bffb17 ldw r2,-20(fp) + 802b7f4: 1000171e bne r2,zero,802b854 + { + 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 + 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 + 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 + 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 + 802b83c: 00000106 br 802b844 + break; + 802b840: 0001883a nop + if (ifp == NULL) + 802b844: e0bffb17 ldw r2,-20(fp) + 802b848: 1000021e bne r2,zero,802b854 + return(EADDRNOTAVAIL); + 802b84c: 00801f44 movi r2,125 + 802b850: 00006d06 br 802ba08 + } + 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 + 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 + { + UNLOCK_NET_RESOURCE(NET_RESID); + 802b88c: 0009883a mov r4,zero + 802b890: 8028ff40 call 8028ff4 + e = ip_raw_write(pkt); + 802b894: e13ff617 ldw r4,-40(fp) + 802b898: 803af6c0 call 803af6c + 802b89c: e0bffe15 stw r2,-8(fp) + LOCK_NET_RESOURCE(NET_RESID); + 802b8a0: 0009883a mov r4,zero + 802b8a4: 8028f380 call 8028f38 + 802b8a8: 00002806 br 802b94c + } + 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 + 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 + else + { + if (fhost == 0xffffffff) + 802b8dc: e0bffd17 ldw r2,-12(fp) + 802b8e0: 10bfffd8 cmpnei r2,r2,-1 + 802b8e4: 1000061e bne r2,zero,802b900 + 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 + else + pip->ip_src = ip_mymach(fhost); + 802b900: e13ffd17 ldw r4,-12(fp) + 802b904: 803b0280 call 803b028 + 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 + 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 + 802b940: e0bffe15 stw r2,-8(fp) + LOCK_NET_RESOURCE(NET_RESID); + 802b944: 0009883a mov r4,zero + 802b948: 8028f380 call 8028f38 + } + if (e < 0) + 802b94c: e0bffe17 ldw r2,-8(fp) + 802b950: 1000020e bge r2,zero,802b95c + return(e); + 802b954: e0bffe17 ldw r2,-8(fp) + 802b958: 00002b06 br 802ba08 + return 0; + 802b95c: 0005883a mov r2,zero + 802b960: 00002906 br 802ba08 + 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 + return(EINVAL); + 802b96c: 00800584 movi r2,22 + 802b970: 00002506 br 802ba08 + 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 + return(EINVAL); + 802b988: 00800584 movi r2,22 + 802b98c: 00001e06 br 802ba08 + ep = rawip_lookup(so); + 802b990: e13ff417 ldw r4,-48(fp) + 802b994: 802b0c80 call 802b0c8 + 802b998: e0bff815 stw r2,-32(fp) + if (!ep) + 802b99c: e0bff817 ldw r2,-32(fp) + 802b9a0: 1000021e bne r2,zero,802b9ac + return(EINVAL); + 802b9a4: 00800584 movi r2,22 + 802b9a8: 00001706 br 802ba08 + 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 + { + 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 + } + 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 + case PRU_DISCONNECT: + case PRU_RCVD: + dtrap(); + 802b9f8: 8028cd40 call 8028cd4 + return 0; + 802b9fc: 0005883a mov r2,zero + 802ba00: 00000106 br 802ba08 + 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 : + */ + +#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 + (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 + { + dtrap(); /* programmer passed wrong structure */ + 802ba54: 8028cd40 call 8028cd4 + (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 : + +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 + 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 + 802baa4: e0bfff15 stw r2,-4(fp) + 802baa8: e0bfff17 ldw r2,-4(fp) + 802baac: 1000041e bne r2,zero,802bac0 + { /* can't really return error info since no socket.... */ + UNLOCK_NET_RESOURCE(NET_RESID); + 802bab0: 0009883a mov r4,zero + 802bab4: 8028ff40 call 8028ff4 + return SOCKET_ERROR; + 802bab8: 00bfffc4 movi r2,-1 + 802babc: 00000706 br 802badc + } + 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 + 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 : + +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 + 802bb2c: e0fffe17 ldw r3,-8(fp) + 802bb30: e0bffd17 ldw r2,-12(fp) + 802bb34: 18800626 beq r3,r2,802bb50 + 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 + 802bb4c: 00000106 br 802bb54 + 802bb50: 0001883a nop + 802bb54: e0fffe17 ldw r3,-8(fp) + 802bb58: e0bffd17 ldw r2,-12(fp) + 802bb5c: 18800326 beq r3,r2,802bb6c + 802bb60: 8028cd40 call 8028cd4 + 802bb64: 00bfffc4 movi r2,-1 + 802bb68: 00003406 br 802bc3c + DOMAIN_CHECK(so, addrlen); + 802bb6c: e17ff417 ldw r5,-48(fp) + 802bb70: e13ffd17 ldw r4,-12(fp) + 802bb74: 802ba200 call 802ba20 + + 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 + { + 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 + 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 + } 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 + 802bbd4: e0bffc15 stw r2,-16(fp) + 802bbd8: e0bffc17 ldw r2,-16(fp) + 802bbdc: 1000051e bne r2,zero,802bbf4 + { + 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 + } + LOCK_NET_RESOURCE(NET_RESID); + 802bbf4: 0009883a mov r4,zero + 802bbf8: 8028f380 call 8028f38 + err = sobind (so, nam); + 802bbfc: e17ffc17 ldw r5,-16(fp) + 802bc00: e13ffd17 ldw r4,-12(fp) + 802bc04: 802d1f80 call 802d1f8 + 802bc08: e0bffb15 stw r2,-20(fp) + m_freem(nam); + 802bc0c: e13ffc17 ldw r4,-16(fp) + 802bc10: 8029cfc0 call 8029cfc + UNLOCK_NET_RESOURCE(NET_RESID); + 802bc14: 0009883a mov r4,zero + 802bc18: 8028ff40 call 8028ff4 + if (err) + 802bc1c: e0bffb17 ldw r2,-20(fp) + 802bc20: 10000526 beq r2,zero,802bc38 + { + 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 + } + 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 : + */ + +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 + 802bc88: e0ffff17 ldw r3,-4(fp) + 802bc8c: e0bffe17 ldw r2,-8(fp) + 802bc90: 18800626 beq r3,r2,802bcac + 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 + 802bca8: 00000106 br 802bcb0 + 802bcac: 0001883a nop + 802bcb0: e0ffff17 ldw r3,-4(fp) + 802bcb4: e0bffe17 ldw r2,-8(fp) + 802bcb8: 18800326 beq r3,r2,802bcc8 + 802bcbc: 8028cd40 call 8028cd4 + 802bcc0: 00bfffc4 movi r2,-1 + 802bcc4: 00001206 br 802bd10 + 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 + err = solisten (so, backlog); + 802bcd8: e17ffb17 ldw r5,-20(fp) + 802bcdc: e13ffe17 ldw r4,-8(fp) + 802bce0: 802d2540 call 802d254 + 802bce4: e0bffd15 stw r2,-12(fp) + UNLOCK_NET_RESOURCE(NET_RESID); + 802bce8: 0009883a mov r4,zero + 802bcec: 8028ff40 call 8028ff4 + + if (err != 0) + 802bcf0: e0bffd17 ldw r2,-12(fp) + 802bcf4: 10000526 beq r2,zero,802bd0c + { + 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 + } + 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 : + +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 + 802bd60: e0ffff17 ldw r3,-4(fp) + 802bd64: e0bffe17 ldw r2,-8(fp) + 802bd68: 18800626 beq r3,r2,802bd84 + 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 + 802bd80: 00000106 br 802bd88 + 802bd84: 0001883a nop + 802bd88: e0ffff17 ldw r3,-4(fp) + 802bd8c: e0bffe17 ldw r2,-8(fp) + 802bd90: 18800326 beq r3,r2,802bda0 + 802bd94: 8028cd40 call 8028cd4 + 802bd98: 00bfffc4 movi r2,-1 + 802bd9c: 00007006 br 802bf60 + 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 + + 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 + { + 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 + } + 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 + 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 + { + 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 + } + LOCK_NET_RESOURCE(NET_RESID); + 802be20: 0009883a mov r4,zero + 802be24: 8028f380 call 8028f38 + while (so->so_qlen == 0 && so->so_error == 0) + 802be28: 00001006 br 802be6c + { + 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 + { + 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 + return SOCKET_ERROR; + 802be54: 00bfffc4 movi r2,-1 + 802be58: 00004106 br 802bf60 + } + 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 + 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 + 802be84: e0bffe17 ldw r2,-8(fp) + 802be88: 10800617 ldw r2,24(r2) + 802be8c: 103fe726 beq r2,zero,802be2c + } + if (so->so_error) + 802be90: e0bffe17 ldw r2,-8(fp) + 802be94: 10800617 ldw r2,24(r2) + 802be98: 10000426 beq r2,zero,802beac + { +#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 + return SOCKET_ERROR; + 802bea4: 00bfffc4 movi r2,-1 + 802bea8: 00002d06 br 802bf60 + } + nam = m_getwithdata (MT_SONAME, sizeof (struct sockaddr)); + 802beac: 01400404 movi r5,16 + 802beb0: 01000244 movi r4,9 + 802beb4: 8029a700 call 8029a70 + 802beb8: e0bffd15 stw r2,-12(fp) + if (nam == NULL) + 802bebc: e0bffd17 ldw r2,-12(fp) + 802bec0: 1000071e bne r2,zero,802bee0 + { + UNLOCK_NET_RESOURCE(NET_RESID); + 802bec4: 0009883a mov r4,zero + 802bec8: 8028ff40 call 8028ff4 + 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 + } + { + 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 + 802bef8: 1000031e bne r2,zero,802bf08 + panic("accept"); + 802befc: 01020174 movhi r4,2053 + 802bf00: 212a7404 addi r4,r4,-22064 + 802bf04: 80271780 call 8027178 + 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 + 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 + 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 + m_freem (nam); + 802bf44: e13ffd17 ldw r4,-12(fp) + 802bf48: 8029cfc0 call 8029cfc + UNLOCK_NET_RESOURCE(NET_RESID); + 802bf4c: 0009883a mov r4,zero + 802bf50: 8028ff40 call 8028ff4 + 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 : + +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 + 802bfb0: e0ffff17 ldw r3,-4(fp) + 802bfb4: e0bffe17 ldw r2,-8(fp) + 802bfb8: 18800626 beq r3,r2,802bfd4 + 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 + 802bfd0: 00000106 br 802bfd8 + 802bfd4: 0001883a nop + 802bfd8: e0ffff17 ldw r3,-4(fp) + 802bfdc: e0bffe17 ldw r2,-8(fp) + 802bfe0: 18800326 beq r3,r2,802bff0 + 802bfe4: 8028cd40 call 8028cd4 + 802bfe8: 00bfffc4 movi r2,-1 + 802bfec: 00007806 br 802c1d0 + DOMAIN_CHECK(so, addrlen); + 802bff0: e17ffa17 ldw r5,-24(fp) + 802bff4: e13ffe17 ldw r4,-8(fp) + 802bff8: 802ba200 call 802ba20 + +#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 + { + 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 + { + 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 + } + 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 + { + 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 + } + 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 + { + 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 + return SOCKET_ERROR; + 802c098: 00bfffc4 movi r2,-1 + 802c09c: 00004c06 br 802c1d0 + } + } +#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 + 802c0b8: e0bffd15 stw r2,-12(fp) + 802c0bc: e0bffd17 ldw r2,-12(fp) + 802c0c0: 1000051e bne r2,zero,802c0d8 + == 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 + 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 + if ((so->so_error = soconnect (so, nam)) != 0) + 802c0e0: e17ffd17 ldw r5,-12(fp) + 802c0e4: e13ffe17 ldw r4,-8(fp) + 802c0e8: 802d7e40 call 802d7e4 + 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 + 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 + 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 + { + 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 + 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 + 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 + 802c160: e0bffe17 ldw r2,-8(fp) + 802c164: 10800617 ldw r2,24(r2) + 802c168: 103ff426 beq r2,zero,802c13c + } +bad: + 802c16c: 00000206 br 802c178 + goto bad; + 802c170: 0001883a nop + 802c174: 00000106 br 802c17c +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 + 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 + + UNLOCK_NET_RESOURCE(NET_RESID); + 802c1b0: 0009883a mov r4,zero + 802c1b4: 8028ff40 call 8028ff4 + if (so->so_error) + 802c1b8: e0bffe17 ldw r2,-8(fp) + 802c1bc: 10800617 ldw r2,24(r2) + 802c1c0: 10000226 beq r2,zero,802c1cc + { +/* printf("t_connect(): so_error = %d\n", so->so_error);*/ + return SOCKET_ERROR; + 802c1c4: 00bfffc4 movi r2,-1 + 802c1c8: 00000106 br 802c1d0 + + } + 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 : + * 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 +} + 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 : + * 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 +} + 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 : + * 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 + 802c2ac: e0ffff17 ldw r3,-4(fp) + 802c2b0: e0bffe17 ldw r2,-8(fp) + 802c2b4: 18800626 beq r3,r2,802c2d0 + 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 + 802c2cc: 00000106 br 802c2d4 + 802c2d0: 0001883a nop + 802c2d4: e0ffff17 ldw r3,-4(fp) + 802c2d8: e0bffe17 ldw r2,-8(fp) + 802c2dc: 18800326 beq r3,r2,802c2ec + 802c2e0: 8028cd40 call 8028cd4 + 802c2e4: 00bfffc4 movi r2,-1 + 802c2e8: 00005306 br 802c438 + + 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 + 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 + { + 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 + } + LOCK_NET_RESOURCE(NET_RESID); + 802c328: 0009883a mov r4,zero + 802c32c: 8028f380 call 8028f38 + m = m_getwithdata (MT_SONAME, sizeof (struct sockaddr)); + 802c330: 01400404 movi r5,16 + 802c334: 01000244 movi r4,9 + 802c338: 8029a700 call 8029a70 + 802c33c: e0bffd15 stw r2,-12(fp) + if (m == NULL) + 802c340: e0bffd17 ldw r2,-12(fp) + 802c344: 1000071e bne r2,zero,802c364 + { + 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 + return SOCKET_ERROR; + 802c35c: 00bfffc4 movi r2,-1 + 802c360: 00003506 br 802c438 + } + 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 + 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 + { + 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 + { + dtrap(); /* programming error */ + 802c3b8: 8028cd40 call 8028cd4 + m_freem(m); + 802c3bc: e13ffd17 ldw r4,-12(fp) + 802c3c0: 8029cfc0 call 8029cfc + UNLOCK_NET_RESOURCE(NET_RESID); + 802c3c4: 0009883a mov r4,zero + 802c3c8: 8028ff40 call 8028ff4 + return EINVAL; + 802c3cc: 00800584 movi r2,22 + 802c3d0: 00001906 br 802c438 + } + 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 + *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 + goto bad; + 802c3fc: 0001883a nop + 802c400: 00000106 br 802c408 + *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 + UNLOCK_NET_RESOURCE(NET_RESID); + 802c410: 0009883a mov r4,zero + 802c414: 8028ff40 call 8028ff4 + if (err) + 802c418: e0bffc17 ldw r2,-16(fp) + 802c41c: 10000526 beq r2,zero,802c434 + { + 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 + } + 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(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 + 802c48c: e0ffff17 ldw r3,-4(fp) + 802c490: e0bffe17 ldw r2,-8(fp) + 802c494: 18800626 beq r3,r2,802c4b0 + 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 + 802c4ac: 00000106 br 802c4b4 + 802c4b0: 0001883a nop + 802c4b4: e0ffff17 ldw r3,-4(fp) + 802c4b8: e0bffe17 ldw r2,-8(fp) + 802c4bc: 18800326 beq r3,r2,802c4cc + 802c4c0: 8028cd40 call 8028cd4 + 802c4c4: 00bfffc4 movi r2,-1 + 802c4c8: 00004b06 br 802c5f8 + USE_ARG(arglen); + + LOCK_NET_RESOURCE (NET_RESID); + 802c4cc: 0009883a mov r4,zero + 802c4d0: 8028f380 call 8028f38 + + 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 + { + 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 + 802c4f8: e0bffd15 stw r2,-12(fp) + 802c4fc: e0bffd17 ldw r2,-12(fp) + 802c500: 10003a26 beq r2,zero,802c5ec + { + 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 + return SOCKET_ERROR; + 802c518: 00bfffc4 movi r2,-1 + 802c51c: 00003606 br 802c5f8 + { + /* 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 + { + so->so_optsPack = (struct ip_socopts *) SOCOPT_ALLOC (sizeof(struct ip_socopts *)); + 802c52c: 01000104 movi r4,4 + 802c530: 802982c0 call 802982c + 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 + { + 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 + return SOCKET_ERROR; + 802c560: 00bfffc4 movi r2,-1 + 802c564: 00002406 br 802c5f8 + } + } + + if (name == IP_TTL_OPT) + 802c568: e0bffa17 ldw r2,-24(fp) + 802c56c: 10800118 cmpnei r2,r2,4 + 802c570: 1000061e bne r2,zero,802c58c + 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 + else + if (name == IP_TOS) + 802c58c: e0bffa17 ldw r2,-24(fp) + 802c590: 108000d8 cmpnei r2,r2,3 + 802c594: 1000061e bne r2,zero,802c5b0 + 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 + else + if (name == IP_SCOPEID) + 802c5b0: e0bffa17 ldw r2,-24(fp) + 802c5b4: 10800398 cmpnei r2,r2,14 + 802c5b8: 1000081e bne r2,zero,802c5dc + 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 + else + { + UNLOCK_NET_RESOURCE (NET_RESID); + 802c5dc: 0009883a mov r4,zero + 802c5e0: 8028ff40 call 8028ff4 + return SOCKET_ERROR; + 802c5e4: 00bfffc4 movi r2,-1 + 802c5e8: 00000306 br 802c5f8 + } + } + + UNLOCK_NET_RESOURCE (NET_RESID); + 802c5ec: 0009883a mov r4,zero + 802c5f0: 8028ff40 call 8028ff4 + 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 : + 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 + 802c64c: e0ffff17 ldw r3,-4(fp) + 802c650: e0bffe17 ldw r2,-8(fp) + 802c654: 18800626 beq r3,r2,802c670 + 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 + 802c66c: 00000106 br 802c674 + 802c670: 0001883a nop + 802c674: e0ffff17 ldw r3,-4(fp) + 802c678: e0bffe17 ldw r2,-8(fp) + 802c67c: 18800326 beq r3,r2,802c68c + 802c680: 8028cd40 call 8028cd4 + 802c684: 00bfffc4 movi r2,-1 + 802c688: 00003d06 br 802c780 + USE_ARG(level); + USE_ARG(arglen); + + LOCK_NET_RESOURCE (NET_RESID); + 802c68c: 0009883a mov r4,zero + 802c690: 8028f380 call 8028f38 + 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 + { + 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 + 802c6b0: e0bffd15 stw r2,-12(fp) + 802c6b4: e0bffd17 ldw r2,-12(fp) + 802c6b8: 10002c26 beq r2,zero,802c76c + { + 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 + return SOCKET_ERROR; + 802c6d0: 00bfffc4 movi r2,-1 + 802c6d4: 00002a06 br 802c780 + { + /* 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 + { + 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 + 802c6f0: e0bff917 ldw r2,-28(fp) + 802c6f4: 00c01004 movi r3,64 + 802c6f8: 10c00015 stw r3,0(r2) + 802c6fc: 00001b06 br 802c76c + 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 + } + else if (name == IP_TOS) + 802c71c: e0bffa17 ldw r2,-24(fp) + 802c720: 108000d8 cmpnei r2,r2,3 + 802c724: 10000d1e bne r2,zero,802c75c + { + 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 + 802c734: e0bff917 ldw r2,-28(fp) + 802c738: 10000015 stw zero,0(r2) + 802c73c: 00000b06 br 802c76c + 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 + } + else + { + UNLOCK_NET_RESOURCE (NET_RESID); + 802c75c: 0009883a mov r4,zero + 802c760: 8028ff40 call 8028ff4 + return SOCKET_ERROR; + 802c764: 00bfffc4 movi r2,-1 + 802c768: 00000506 br 802c780 + } + } + 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 + 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 : +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 + { + 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 + } + 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 + 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 + 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 + + if(err) + 802c834: e0bffd17 ldw r2,-12(fp) + 802c838: 10000526 beq r2,zero,802c850 + { + 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 + } + + /* 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 : + 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 + 802c8bc: e0ffff17 ldw r3,-4(fp) + 802c8c0: e0bffd17 ldw r2,-12(fp) + 802c8c4: 18800626 beq r3,r2,802c8e0 + 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 + 802c8dc: 00000106 br 802c8e4 + 802c8e0: 0001883a nop + 802c8e4: e0ffff17 ldw r3,-4(fp) + 802c8e8: e0bffd17 ldw r2,-12(fp) + 802c8ec: 18800326 beq r3,r2,802c8fc + 802c8f0: 8028cd40 call 8028cd4 + 802c8f4: 00bfffc4 movi r2,-1 + 802c8f8: 00002706 br 802c998 + 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 + + 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 + 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 + { + 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 + m_freem (sender); + 802c95c: e0bffb17 ldw r2,-20(fp) + 802c960: 1009883a mov r4,r2 + 802c964: 8029cfc0 call 8029cfc + } + + UNLOCK_NET_RESOURCE(NET_RESID); + 802c968: 0009883a mov r4,zero + 802c96c: 8028ff40 call 8028ff4 + + if(err) + 802c970: e0bffc17 ldw r2,-16(fp) + 802c974: 10000526 beq r2,zero,802c98c + { + 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 + } + + /* 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 : + 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 + 802c9ec: e0fffe17 ldw r3,-8(fp) + 802c9f0: e0bffd17 ldw r2,-12(fp) + 802c9f4: 18800626 beq r3,r2,802ca10 + 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 + 802ca0c: 00000106 br 802ca14 + 802ca10: 0001883a nop + 802ca14: e0fffe17 ldw r3,-8(fp) + 802ca18: e0bffd17 ldw r2,-12(fp) + 802ca1c: 18800326 beq r3,r2,802ca2c + 802ca20: 8028cd40 call 8028cd4 + 802ca24: 00bfffc4 movi r2,-1 + 802ca28: 00005706 br 802cb88 + 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 + 802ca50: 10c000e0 cmpeqi r3,r2,3 + 802ca54: 18000b1e bne r3,zero,802ca84 + 802ca58: 10800058 cmpnei r2,r2,1 + 802ca5c: 1000101e bne r2,zero,802caa0 + { + 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 + 802ca74: 00004406 br 802cb88 + /*NOTREACHED*/ + case SOCK_DGRAM: + /* datagram (UDP) socket -- prepare to check length */ + sendlen = udp_maxalloc(); + 802ca78: 803dd940 call 803dd94 + 802ca7c: e0bffb15 stw r2,-20(fp) + break; + 802ca80: 00000d06 br 802cab8 +#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 + 802ca98: e0bffb15 stw r2,-20(fp) + break; + 802ca9c: 00000606 br 802cab8 +#endif /* IP_RAW */ + default: + /* socket has unknown type */ + dtrap(); + 802caa0: 8028cd40 call 8028cd4 + 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 + /* 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 + { + 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 + /* 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 + { + 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 + 802caf0: e0bfff15 stw r2,-4(fp) + if(name == NULL) + 802caf4: e0bfff17 ldw r2,-4(fp) + 802caf8: 1000061e bne r2,zero,802cb14 + { + 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 + } + } + 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 + + 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 + 802cb44: e0bffc15 stw r2,-16(fp) + + if (name) + 802cb48: e0bfff17 ldw r2,-4(fp) + 802cb4c: 10000226 beq r2,zero,802cb58 + m_freem(name); + 802cb50: e13fff17 ldw r4,-4(fp) + 802cb54: 8029cfc0 call 8029cfc + + UNLOCK_NET_RESOURCE(NET_RESID); + 802cb58: 0009883a mov r4,zero + 802cb5c: 8028ff40 call 8028ff4 + + if (err != 0) + 802cb60: e0bffc17 ldw r2,-16(fp) + 802cb64: 10000526 beq r2,zero,802cb7c + { + 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 + } + + 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 : +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 + { + 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 + } + 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 + 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 + 802cc3c: 00005206 br 802cd88 + + 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 + { + 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 + 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 + { + if (len > maxpkt) + 802cc88: e0bff617 ldw r2,-40(fp) + 802cc8c: e0fffe17 ldw r3,-8(fp) + 802cc90: 1880030e bge r3,r2,802cca0 + sendlen = maxpkt; /* take biggest block we can */ + 802cc94: e0bffe17 ldw r2,-8(fp) + 802cc98: e0bff915 stw r2,-28(fp) + 802cc9c: 00000206 br 802cca8 + 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 + 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 + 802ccd8: e0bffa15 stw r2,-24(fp) + UNLOCK_NET_RESOURCE(NET_RESID); + 802ccdc: 0009883a mov r4,zero + 802cce0: 8028ff40 call 8028ff4 + + if (e != 0) /* sock_sendit failed? */ + 802cce4: e0bffa17 ldw r2,-24(fp) + 802cce8: 10001026 beq r2,zero,802cd2c + { + /* 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 + 802ccf8: e0bffa17 ldw r2,-24(fp) + 802ccfc: 108002d8 cmpnei r2,r2,11 + 802cd00: 1000051e bne r2,zero,802cd18 + /* 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 + { + 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 + } + } + 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 + } + /* if we can't send anymore, return now */ + if (sendlen != 0) + 802cd2c: e0bff917 ldw r2,-28(fp) + 802cd30: 1000131e bne r2,zero,802cd80 + 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 + 802cd7c: 00000106 br 802cd84 + 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 : + * 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 + 802cdd4: e0ffff17 ldw r3,-4(fp) + 802cdd8: e0bffe17 ldw r2,-8(fp) + 802cddc: 18800626 beq r3,r2,802cdf8 + 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 + 802cdf4: 00000106 br 802cdfc + 802cdf8: 0001883a nop + 802cdfc: e0ffff17 ldw r3,-4(fp) + 802ce00: e0bffe17 ldw r2,-8(fp) + 802ce04: 18800326 beq r3,r2,802ce14 + 802ce08: 8028cd40 call 8028cd4 + 802ce0c: 00bfffc4 movi r2,-1 + 802ce10: 00001206 br 802ce5c + 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 + err = soshutdown(so, how); + 802ce24: e17ffb17 ldw r5,-20(fp) + 802ce28: e13ffe17 ldw r4,-8(fp) + 802ce2c: 802e5ec0 call 802e5ec + 802ce30: e0bffd15 stw r2,-12(fp) + UNLOCK_NET_RESOURCE(NET_RESID); + 802ce34: 0009883a mov r4,zero + 802ce38: 8028ff40 call 8028ff4 + + if (err != 0) + 802ce3c: e0bffd17 ldw r2,-12(fp) + 802ce40: 10000526 beq r2,zero,802ce58 + { + 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 + } + 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 : + * 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 + 802cea4: e0ffff17 ldw r3,-4(fp) + 802cea8: e0bffe17 ldw r2,-8(fp) + 802ceac: 18800626 beq r3,r2,802cec8 + 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 + 802cec4: 00000106 br 802cecc + 802cec8: 0001883a nop + 802cecc: e0ffff17 ldw r3,-4(fp) + 802ced0: e0bffe17 ldw r2,-8(fp) + 802ced4: 18800326 beq r3,r2,802cee4 + 802ced8: 8028cd40 call 8028cd4 + 802cedc: 00bfffc4 movi r2,-1 + 802cee0: 00000e06 br 802cf1c + 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 + err = soclose(so); + 802cef4: e13ffe17 ldw r4,-8(fp) + 802cef8: 802d4340 call 802d434 + 802cefc: e0bffd15 stw r2,-12(fp) + UNLOCK_NET_RESOURCE(NET_RESID); + 802cf00: 0009883a mov r4,zero + 802cf04: 8028ff40 call 8028ff4 + + if (err != 0) + 802cf08: e0bffd17 ldw r2,-12(fp) + 802cf0c: 10000226 beq r2,zero,802cf18 + { + /* 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 + } + 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 : + +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 + m = m_getwithdata (type, arglen); + 802cf54: e17ffd17 ldw r5,-12(fp) + 802cf58: e13ffc17 ldw r4,-16(fp) + 802cf5c: 8029a700 call 8029a70 + 802cf60: e0bfff15 stw r2,-4(fp) + UNLOCK_NET_RESOURCE(NET_RESID); + 802cf64: 0009883a mov r4,zero + 802cf68: 8028ff40 call 8028ff4 + if (m == NULL) + 802cf6c: e0bfff17 ldw r2,-4(fp) + 802cf70: 1000021e bne r2,zero,802cf7c + return NULL; + 802cf74: 0005883a mov r2,zero + 802cf78: 00000b06 br 802cfa8 + 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 + 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 : + * 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 + + /* 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 + { + 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 + { + 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 + 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 + } + } + + UNLOCK_NET_RESOURCE(NET_RESID); + 802d030: 0009883a mov r4,zero + 802d034: 8028ff40 call 8028ff4 + + 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 : + * 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 + 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 + 802d084: e0bfff15 stw r2,-4(fp) + 802d088: 00000406 br 802d09c + else + prp = pffindtype(dom, type); + 802d08c: e17ffa17 ldw r5,-24(fp) + 802d090: e13ffb17 ldw r4,-20(fp) + 802d094: 80299140 call 8029914 + 802d098: e0bfff15 stw r2,-4(fp) + if (prp == 0) + 802d09c: e0bfff17 ldw r2,-4(fp) + 802d0a0: 1000021e bne r2,zero,802d0ac + return NULL; + 802d0a4: 0005883a mov r2,zero + 802d0a8: 00004e06 br 802d1e4 + 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 + return NULL; + 802d0c8: 0005883a mov r2,zero + 802d0cc: 00004506 br 802d1e4 + if ((so = SOC_ALLOC (sizeof (*so))) == NULL) + 802d0d0: 01002104 movi r4,132 + 802d0d4: 802982c0 call 802982c + 802d0d8: e0bffe15 stw r2,-8(fp) + 802d0dc: e0bffe17 ldw r2,-8(fp) + 802d0e0: 1000021e bne r2,zero,802d0ec + return NULL; + 802d0e4: 0005883a mov r2,zero + 802d0e8: 00003e06 br 802d1e4 + 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 + + 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 + + if (so_evtmap) + 802d17c: d0a09a03 ldbu r2,-32152(gp) + 802d180: 10803fcc andi r2,r2,255 + 802d184: 10001626 beq r2,zero,802d1e0 + { + 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 + { +bad: + 802d1a0: 00000106 br 802d1a8 + 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 + return NULL; + 802d1c8: 0005883a mov r2,zero + 802d1cc: 00000506 br 802d1e4 + /* + * 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 + 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 : + */ + +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 : + */ + +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 + { + return (error); + 802d2a0: e0bfff17 ldw r2,-4(fp) + 802d2a4: 00001a06 br 802d310 + } + if (so->so_q == 0) + 802d2a8: e0bffe17 ldw r2,-8(fp) + 802d2ac: 10801d17 ldw r2,116(r2) + 802d2b0: 10000b1e bne r2,zero,802d2e0 + { + 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 + 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 + 802d2f8: e0bffd17 ldw r2,-12(fp) + 802d2fc: 00000106 br 802d304 + 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 : + * 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 + 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 + return; + if (so->so_head) + 802d358: e0bfff17 ldw r2,-4(fp) + 802d35c: 10801b17 ldw r2,108(r2) + 802d360: 10000d26 beq r2,zero,802d398 + { + if (!soqremque(so, 0) && !soqremque(so, 1)) + 802d364: 000b883a mov r5,zero + 802d368: e13fff17 ldw r4,-4(fp) + 802d36c: 802f6ec0 call 802f6ec + 802d370: 1000071e bne r2,zero,802d390 + 802d374: 01400044 movi r5,1 + 802d378: e13fff17 ldw r4,-4(fp) + 802d37c: 802f6ec0 call 802f6ec + 802d380: 1000031e bne r2,zero,802d390 + panic("sofree"); + 802d384: 01020174 movhi r4,2053 + 802d388: 212a7604 addi r4,r4,-22056 + 802d38c: 80271780 call 8027178 + 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 + sorflush(so); + 802d3a8: e13fff17 ldw r4,-4(fp) + 802d3ac: 802e6840 call 802e684 + _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 + 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 +#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 + 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 + + 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 + + if (so_evtmap) + 802d3f8: d0a09a03 ldbu r2,-32152(gp) + 802d3fc: 10803fcc andi r2,r2,255 + 802d400: 10000326 beq r2,zero,802d410 + (*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 + 802d418: 00000106 br 802d420 + 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 : + * 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 + { + if (so == tmpso) + 802d45c: e0fffb17 ldw r3,-20(fp) + 802d460: e0bffe17 ldw r2,-8(fp) + 802d464: 18800626 beq r3,r2,802d480 + 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 + 802d47c: 00000106 br 802d484 + break; + 802d480: 0001883a nop + } + if ( tmpso == NULL) + 802d484: e0bffe17 ldw r2,-8(fp) + 802d488: 1000021e bne r2,zero,802d494 + return EINVAL; + 802d48c: 00800584 movi r2,22 + 802d490: 00009506 br 802d6e8 + 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 + { + while (so->so_q0 != so) + 802d4a4: 00000406 br 802d4b8 + (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 + 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 + while (so->so_q != so) + 802d4c8: 00000406 br 802d4dc + (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 + 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 + } + /* 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 + { + 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 + } + + if (so->so_pcb == 0) + 802d538: e0bffb17 ldw r2,-20(fp) + 802d53c: 10800117 ldw r2,4(r2) + 802d540: 10005726 beq r2,zero,802d6a0 + 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 + { + 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 + { + error = sodisconnect(so); + 802d56c: e13ffb17 ldw r4,-20(fp) + 802d570: 802d89c0 call 802d89c + 802d574: e0bfff15 stw r2,-4(fp) + if (error) + 802d578: e0bfff17 ldw r2,-4(fp) + 802d57c: 1000321e bne r2,zero,802d648 + 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 + { + 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 + (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 + { + 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 + { + 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 + 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 + 802d604: d0e07d17 ldw r3,-32268(gp) + 802d608: e0bffd17 ldw r2,-12(fp) + 802d60c: 18bff436 bltu r3,r2,802d5e0 + 802d610: 00001006 br 802d654 + { + /* 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 + { + 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 + } + } + } +drop: + 802d640: 0001883a nop + 802d644: 00000306 br 802d654 + goto drop; + 802d648: 0001883a nop + 802d64c: 00000106 br 802d654 + 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 + { + 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 + error = error2; + 802d694: e0bffc17 ldw r2,-16(fp) + 802d698: e0bfff15 stw r2,-4(fp) + 802d69c: 00000306 br 802d6ac + goto discard; + 802d6a0: 0001883a nop + 802d6a4: 00000106 br 802d6ac + } +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 + { + /* panic("soclose"); - non-fatal - degrade to dtrap() for now */ + dtrap(); + 802d6c0: 8028cd40 call 8028cd4 + } + 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 + 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 : + * 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 : + */ + +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 + panic("soaccept"); + 802d778: 01020174 movhi r4,2053 + 802d77c: 212a7804 addi r4,r4,-22048 + 802d780: 80271780 call 8027178 + 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 : + */ + +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 + return (EOPNOTSUPP); + 802d80c: 008017c4 movi r2,95 + 802d810: 00001d06 br 802d888 + * 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 + ((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 + (sodisconnect(so) != 0))) + 802d840: e13ffe17 ldw r4,-8(fp) + 802d844: 802d89c0 call 802d89c + ((so->so_proto->pr_flags & PR_CONNREQUIRED) || + 802d848: 10000326 beq r2,zero,802d858 + { + error = EISCONN; + 802d84c: 00801fc4 movi r2,127 + 802d850: e0bfff15 stw r2,-4(fp) + 802d854: 00000b06 br 802d884 + } + 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 : + * 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 + { + error = ENOTCONN; + 802d8c4: 00802004 movi r2,128 + 802d8c8: e0bfff15 stw r2,-4(fp) + goto bad; + 802d8cc: 00001306 br 802d91c + } + 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 + { + error = EALREADY; + 802d8e4: 00801e04 movi r2,120 + 802d8e8: e0bfff15 stw r2,-4(fp) + goto bad; + 802d8ec: 00000b06 br 802d91c + } + 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(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 + return (EINVAL); + 802d978: 00800584 movi r2,22 + 802d97c: 00014006 br 802de80 + + 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 + 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 + return (EMSGSIZE); + 802d9ac: 00801e84 movi r2,122 + 802d9b0: 00013306 br 802de80 + + 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 + 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 + (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 + 802d9e8: 00800044 movi r2,1 + 802d9ec: 00000106 br 802d9f4 + 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 + 802d9fc: e0bff717 ldw r2,-36(fp) + 802da00: 10801904 addi r2,r2,100 + 802da04: 1009883a mov r4,r2 + 802da08: 8027a540 call 8027a54 + 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 + 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 + { + 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 + } + 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 + snderr(EPIPE); + 802da70: 00800804 movi r2,32 + 802da74: e0bffb15 stw r2,-20(fp) + 802da78: 0000f106 br 802de40 + 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 + { + 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 + snderr(ENOTCONN); + 802daa8: 00802004 movi r2,128 + 802daac: e0bffb15 stw r2,-20(fp) + 802dab0: 0000e306 br 802de40 + if (nam == 0) + 802dab4: e0bff617 ldw r2,-40(fp) + 802dab8: 1000031e bne r2,zero,802dac8 + snderr(EDESTADDRREQ); + 802dabc: 00801e44 movi r2,121 + 802dac0: e0bffb15 stw r2,-20(fp) + 802dac4: 0000de06 br 802de40 + } + if (flags & MSG_OOB) + 802dac8: e0800217 ldw r2,8(fp) + 802dacc: 1080004c andi r2,r2,1 + 802dad0: 10000326 beq r2,zero,802dae0 + space = 1024; + 802dad4: 00810004 movi r2,1024 + 802dad8: e0bffd15 stw r2,-12(fp) + 802dadc: 00004706 br 802dbfc + 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 + 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 + 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 + 802db34: e0fffd17 ldw r3,-12(fp) + 802db38: e0bffc17 ldw r2,-16(fp) + 802db3c: 18801216 blt r3,r2,802db88 + 802db40: e0bffc17 ldw r2,-16(fp) + 802db44: 10815e10 cmplti r2,r2,1400 + 802db48: 10002c1e bne r2,zero,802dbfc + ((resid >= CLBYTES) && (space < CLBYTES) && + 802db4c: e0bffd17 ldw r2,-12(fp) + 802db50: 10815e08 cmpgei r2,r2,1400 + 802db54: 1000291e bne r2,zero,802dbfc + (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 + ((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 + ((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 + { + 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 + 802db9c: e0800217 ldw r2,8(fp) + 802dba0: 1080080c andi r2,r2,32 + 802dba4: 10000526 beq r2,zero,802dbbc + { + if (first) + 802dba8: e0bffa17 ldw r2,-24(fp) + 802dbac: 10009d26 beq r2,zero,802de24 + error = EWOULDBLOCK; + 802dbb0: 008002c4 movi r2,11 + 802dbb4: e0bffb15 stw r2,-20(fp) + goto release; + 802dbb8: 00009a06 br 802de24 + } + 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 + 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 + goto restart; + 802dbf8: 003f7f06 br 802d9f8 + } + } + if ( space <= 0 ) + 802dbfc: e0bffd17 ldw r2,-12(fp) + 802dc00: 00805e16 blt zero,r2,802dd7c + { + /* 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 + 802dc18: e0800217 ldw r2,8(fp) + 802dc1c: 1080080c andi r2,r2,32 + 802dc20: 10000526 beq r2,zero,802dc38 + { + if (first) /* report first error */ + 802dc24: e0bffa17 ldw r2,-24(fp) + 802dc28: 10008026 beq r2,zero,802de2c + error = EWOULDBLOCK; + 802dc2c: 008002c4 movi r2,11 + 802dc30: e0bffb15 stw r2,-20(fp) + goto release; + 802dc34: 00007d06 br 802de2c + } + /* 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 + 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 + goto restart; + 802dc74: 003f6006 br 802d9f8 + } + + 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 + { + m = m_getwithdata(MT_TXDATA, len); + 802dc9c: e17ff817 ldw r5,-32(fp) + 802dca0: 01000084 movi r4,2 + 802dca4: 8029a700 call 8029a70 + 802dca8: e0bffe15 stw r2,-8(fp) + if (!m) + 802dcac: e0bffe17 ldw r2,-8(fp) + 802dcb0: 1000031e bne r2,zero,802dcc0 + snderr(ENOBUFS); + 802dcb4: 00801a44 movi r2,105 + 802dcb8: e0bffb15 stw r2,-20(fp) + 802dcbc: 00006006 br 802de40 + 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 + 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 + } + else + { + m = m_get (M_WAIT, MT_TXDATA); + 802dcf8: 000b883a mov r5,zero + 802dcfc: 01000084 movi r4,2 + 802dd00: 8029a700 call 8029a70 + 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 + 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 + goto release; + if (*data_length <= 0) + 802dd70: e0bff417 ldw r2,-48(fp) + 802dd74: 10800017 ldw r2,0(r2) + 802dd78: 0080030e bge zero,r2,802dd88 + while (space > 0) + 802dd7c: e0bffd17 ldw r2,-12(fp) + 802dd80: 00bfbd16 blt zero,r2,802dc78 + 802dd84: 00000106 br 802dd8c + break; + 802dd88: 0001883a nop + } + + if (dontroute) + 802dd8c: e0bff917 ldw r2,-28(fp) + 802dd90: 10000526 beq r2,zero,802dda8 + 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 + 802ddb4: 00800384 movi r2,14 + 802ddb8: 00000106 br 802ddc0 + 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 + 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 + 802de18: e0bffb17 ldw r2,-20(fp) + 802de1c: 103f0626 beq r2,zero,802da38 + +release: + 802de20: 00000606 br 802de3c + goto release; + 802de24: 0001883a nop + 802de28: 00000506 br 802de40 + goto release; + 802de2c: 0001883a nop + 802de30: 00000306 br 802de40 + goto release; + 802de34: 0001883a nop + 802de38: 00000106 br 802de40 +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 + if (head) + 802de6c: e0bfff17 ldw r2,-4(fp) + 802de70: 10000226 beq r2,zero,802de7c + m_freem(head); + 802de74: e13fff17 ldw r4,-4(fp) + 802de78: 8029cfc0 call 8029cfc + 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(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 + *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 + { + m = m_get (M_WAIT, MT_RXDATA); + 802dee0: 000b883a mov r5,zero + 802dee4: 01000044 movi r4,1 + 802dee8: 8029a700 call 8029a70 + 802deec: e0bfff15 stw r2,-4(fp) + if (m == NULL) + 802def0: e0bfff17 ldw r2,-4(fp) + 802def4: 1000021e bne r2,zero,802df00 + return ENOBUFS; + 802def8: 00801a44 movi r2,105 + 802defc: 0001b606 br 802e5d8 + 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 + { + 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 + 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 + 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 + 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 + 802dfbc: e0bffd17 ldw r2,-12(fp) + 802dfc0: 1000021e bne r2,zero,802dfcc + 802dfc4: e0bfff17 ldw r2,-4(fp) + 802dfc8: 103fdd1e bne r2,zero,802df40 + } + + if (m) + 802dfcc: e0bfff17 ldw r2,-4(fp) + 802dfd0: 10000226 beq r2,zero,802dfdc + m_freem(m); + 802dfd4: e13fff17 ldw r4,-4(fp) + 802dfd8: 8029cfc0 call 8029cfc + return (error); + 802dfdc: e0bffd17 ldw r2,-12(fp) + 802dfe0: 00017d06 br 802e5d8 + } + +restart: + 802dfe4: 0001883a nop + sblock (&so->so_rcv); + 802dfe8: 00000406 br 802dffc + 802dfec: e0bff717 ldw r2,-36(fp) + 802dff0: 10801104 addi r2,r2,68 + 802dff4: 1009883a mov r4,r2 + 802dff8: 8027a540 call 8027a54 + 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 + 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 + { + if (so->so_error) + 802e034: e0bff717 ldw r2,-36(fp) + 802e038: 10800617 ldw r2,24(r2) + 802e03c: 10000626 beq r2,zero,802e058 + { + 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 + } + 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 + 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 + (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 + { + error = ENOTCONN; + 802e098: 00802004 movi r2,128 + 802e09c: e0bffd15 stw r2,-12(fp) + goto release; + 802e0a0: 00014106 br 802e5a8 + } + if (*datalen == 0) + 802e0a4: e0bff417 ldw r2,-48(fp) + 802e0a8: 10800017 ldw r2,0(r2) + 802e0ac: 10013b26 beq r2,zero,802e59c + 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 + 802e0c4: e0800217 ldw r2,8(fp) + 802e0c8: 1080080c andi r2,r2,32 + 802e0cc: 10000326 beq r2,zero,802e0dc + { + error = EWOULDBLOCK; + 802e0d0: 008002c4 movi r2,11 + 802e0d4: e0bffd15 stw r2,-12(fp) + goto release; + 802e0d8: 00013306 br 802e5a8 + } + 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 + 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 + goto restart; + 802e118: 003fb306 br 802dfe8 + } + 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 + panic("sorecv 1"); + 802e130: 01020174 movhi r4,2053 + 802e134: 212a7b04 addi r4,r4,-22036 + 802e138: 80271780 call 8027178 + 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 + { + 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 + { + 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 + panic("sorecv 2"); + 802e184: 01020174 movhi r4,2053 + 802e188: 212a8404 addi r4,r4,-22000 + 802e18c: 80271780 call 8027178 + } + if (flags & MSG_PEEK) + 802e190: e0800217 ldw r2,8(fp) + 802e194: 1080008c andi r2,r2,2 + 802e198: 10000f26 beq r2,zero,802e1d8 + { + if (aname) + 802e19c: e0bff617 ldw r2,-40(fp) + 802e1a0: 10000926 beq r2,zero,802e1c8 + *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 + 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 + } 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 + { + *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 + } else + { + MFREE(m, so->so_rcv.sb_mb); + 802e230: e13fff17 ldw r4,-4(fp) + 802e234: 8029bf80 call 8029bf8 + 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 + 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 + { + 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 + 802e280: e0bfff17 ldw r2,-4(fp) + 802e284: 10800817 ldw r2,32(r2) + 802e288: 108000e0 cmpeqi r2,r2,3 + 802e28c: 1000031e bne r2,zero,802e29c + panic("sorecv 3"); + 802e290: 01020174 movhi r4,2053 + 802e294: 212a8704 addi r4,r4,-21988 + 802e298: 80271780 call 8027178 + 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 + 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 + 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 + 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 + 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 + { + if (flags & MSG_PEEK) + 802e398: e0800217 ldw r2,8(fp) + 802e39c: 1080008c andi r2,r2,2 + 802e3a0: 10000526 beq r2,zero,802e3b8 + { + 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 + } 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 + 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 + 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 + } + } else + { + if (flags & MSG_PEEK) + 802e418: e0800217 ldw r2,8(fp) + 802e41c: 1080008c andi r2,r2,2 + 802e420: 10000526 beq r2,zero,802e438 + 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 + 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 + { + if ((flags & MSG_PEEK) == 0) + 802e48c: e0800217 ldw r2,8(fp) + 802e490: 1080008c andi r2,r2,2 + 802e494: 1000101e bne r2,zero,802e4d8 + { + 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 + { + 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 + } + } 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 + 802e4f0: e0bff417 ldw r2,-48(fp) + 802e4f4: 10800017 ldw r2,0(r2) + 802e4f8: 0080020e bge zero,r2,802e504 + 802e4fc: e0bffd17 ldw r2,-12(fp) + 802e500: 103f5b26 beq r2,zero,802e270 + } + } + + if ((flags & MSG_PEEK) == 0) + 802e504: e0800217 ldw r2,8(fp) + 802e508: 1080008c andi r2,r2,2 + 802e50c: 1000251e bne r2,zero,802e5a4 + { + if (m == 0) + 802e510: e0bfff17 ldw r2,-4(fp) + 802e514: 1000041e bne r2,zero,802e528 + 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 + 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 + (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 + 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 + 802e560: e0bff717 ldw r2,-36(fp) + 802e564: 10800117 ldw r2,4(r2) + 802e568: 10000e26 beq r2,zero,802e5a4 + { + 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 + goto release; + 802e594: 0001883a nop + 802e598: 00000306 br 802e5a8 + goto release; + 802e59c: 0001883a nop + 802e5a0: 00000106 br 802e5a8 + (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 + 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 : + * + * 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 + sorflush(so); + 802e61c: e13fff17 ldw r4,-4(fp) + 802e620: 802e6840 call 802e684 + + 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 + { + 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 + 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 + } + + 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 : + * 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 + 802e6a8: e0bfff17 ldw r2,-4(fp) + 802e6ac: 10800704 addi r2,r2,28 + 802e6b0: 1009883a mov r4,r2 + 802e6b4: 8027a540 call 8027a54 + 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 + 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 + 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 + sbrelease(sb); + 802e718: e13fff17 ldw r4,-4(fp) + 802e71c: 802fab00 call 802fab0 + 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 + 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 + 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 : + +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 + 802e7ac: e0bff917 ldw r2,-28(fp) + 802e7b0: 10808048 cmpgei r2,r2,513 + 802e7b4: 1000211e bne r2,zero,802e83c + 802e7b8: e0bff917 ldw r2,-28(fp) + 802e7bc: 10800388 cmpgei r2,r2,14 + 802e7c0: 10000d1e bne r2,zero,802e7f8 + 802e7c4: e0bff917 ldw r2,-28(fp) + 802e7c8: 10800248 cmpgei r2,r2,9 + 802e7cc: 1000971e bne r2,zero,802ea2c + 802e7d0: e0bff917 ldw r2,-28(fp) + 802e7d4: 10800120 cmpeqi r2,r2,4 + 802e7d8: 1000461e bne r2,zero,802e8f4 + 802e7dc: e0bff917 ldw r2,-28(fp) + 802e7e0: 10800220 cmpeqi r2,r2,8 + 802e7e4: 1000431e bne r2,zero,802e8f4 + 802e7e8: e0bff917 ldw r2,-28(fp) + 802e7ec: 108000a0 cmpeqi r2,r2,2 + 802e7f0: 1000941e bne r2,zero,802ea44 + 802e7f4: 0000fb06 br 802ebe4 + 802e7f8: e0bff917 ldw r2,-28(fp) + 802e7fc: 10800820 cmpeqi r2,r2,32 + 802e800: 10003c1e bne r2,zero,802e8f4 + 802e804: e0bff917 ldw r2,-28(fp) + 802e808: 10800848 cmpgei r2,r2,33 + 802e80c: 1000041e bne r2,zero,802e820 + 802e810: e0bff917 ldw r2,-28(fp) + 802e814: 10800420 cmpeqi r2,r2,16 + 802e818: 1000361e bne r2,zero,802e8f4 + 802e81c: 0000f106 br 802ebe4 + 802e820: e0bff917 ldw r2,-28(fp) + 802e824: 10802020 cmpeqi r2,r2,128 + 802e828: 10002d1e bne r2,zero,802e8e0 + 802e82c: e0bff917 ldw r2,-28(fp) + 802e830: 10804020 cmpeqi r2,r2,256 + 802e834: 10002f1e bne r2,zero,802e8f4 + 802e838: 0000ea06 br 802ebe4 + 802e83c: e0bff917 ldw r2,-28(fp) + 802e840: 10840520 cmpeqi r2,r2,4116 + 802e844: 1000531e bne r2,zero,802e994 + 802e848: e0bff917 ldw r2,-28(fp) + 802e84c: 10840548 cmpgei r2,r2,4117 + 802e850: 10000f1e bne r2,zero,802e890 + 802e854: e0bff917 ldw r2,-28(fp) + 802e858: 108401a0 cmpeqi r2,r2,4102 + 802e85c: 1000481e bne r2,zero,802e980 + 802e860: e0bff917 ldw r2,-28(fp) + 802e864: 108401c8 cmpgei r2,r2,4103 + 802e868: 1000051e bne r2,zero,802e880 + 802e86c: e0bff917 ldw r2,-28(fp) + 802e870: 10bbffc4 addi r2,r2,-4097 + 802e874: 108000a8 cmpgeui r2,r2,2 + 802e878: 1000da1e bne r2,zero,802ebe4 + 802e87c: 00002f06 br 802e93c + 802e880: e0bff917 ldw r2,-28(fp) + 802e884: 10840420 cmpeqi r2,r2,4112 + 802e888: 1000af1e bne r2,zero,802eb48 + 802e88c: 0000d506 br 802ebe4 + 802e890: e0bff917 ldw r2,-28(fp) + 802e894: 108800e0 cmpeqi r2,r2,8195 + 802e898: 1000ab1e bne r2,zero,802eb48 + 802e89c: e0bff917 ldw r2,-28(fp) + 802e8a0: 10880108 cmpgei r2,r2,8196 + 802e8a4: 1000071e bne r2,zero,802e8c4 + 802e8a8: e0bff917 ldw r2,-28(fp) + 802e8ac: 10840560 cmpeqi r2,r2,4117 + 802e8b0: 10003f1e bne r2,zero,802e9b0 + 802e8b4: e0bff917 ldw r2,-28(fp) + 802e8b8: 108405a0 cmpeqi r2,r2,4118 + 802e8bc: 1000441e bne r2,zero,802e9d0 + 802e8c0: 0000c806 br 802ebe4 + 802e8c4: e0bff917 ldw r2,-28(fp) + 802e8c8: 10880120 cmpeqi r2,r2,8196 + 802e8cc: 1000721e bne r2,zero,802ea98 + 802e8d0: e0bff917 ldw r2,-28(fp) + 802e8d4: 10900020 cmpeqi r2,r2,16384 + 802e8d8: 1000061e bne r2,zero,802e8f4 + 802e8dc: 0000c106 br 802ebe4 + { + 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 + 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 + 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 + 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 + 802e948: e0bffa17 ldw r2,-24(fp) + 802e94c: 10801204 addi r2,r2,72 + 802e950: 00000206 br 802e95c + 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 + 802e970: 10009f1e bne r2,zero,802ebf0 + { + error = ENOBUFS; + 802e974: 00801a44 movi r2,105 + 802e978: e0bfff15 stw r2,-4(fp) + goto bad; + 802e97c: 00009d06 br 802ebf4 + } + 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 + + 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 + + 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 + + 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 + { + error = ENP_PARAM; + 802e9d8: 00bffd84 movi r2,-10 + 802e9dc: e0bfff15 stw r2,-4(fp) + break; + 802e9e0: 00008406 br 802ebf4 + } + /* 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 + 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 + 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 + 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 + 802ea3c: e0bfff15 stw r2,-4(fp) + break; + 802ea40: 00006c06 br 802ebf4 + +#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 + { + error = ENP_PARAM; + 802ea4c: 00bffd84 movi r2,-10 + 802ea50: e0bfff15 stw r2,-4(fp) + break; + 802ea54: 00006706 br 802ebf4 + } + /* 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 + 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 + 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 + 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 + { + error = EINVAL; + 802eab4: 00800584 movi r2,22 + 802eab8: e0bfff15 stw r2,-4(fp) + break; + 802eabc: 00004d06 br 802ebf4 + } + 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 + { + error = ENOTCONN; + 802eae0: 00802004 movi r2,128 + 802eae4: e0bfff15 stw r2,-4(fp) + break; + 802eae8: 00004206 br 802ebf4 + } + /* 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 + { + error = ENP_PARAM; + 802eaf4: 00bffd84 movi r2,-10 + 802eaf8: e0bfff15 stw r2,-4(fp) + break; + 802eafc: 00003d06 br 802ebf4 + } + /* 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 + 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 + 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 + 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 + { + error = EINVAL; + 802eb64: 00800584 movi r2,22 + 802eb68: e0bfff15 stw r2,-4(fp) + break; + 802eb6c: 00002106 br 802ebf4 + } + 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 + { + error = ENOTCONN; + 802eb90: 00802004 movi r2,128 + 802eb94: e0bfff15 stw r2,-4(fp) + break; + 802eb98: 00001606 br 802ebf4 + } + if (tp->t_state != TCPS_CLOSED) + 802eb9c: e0bffb17 ldw r2,-20(fp) + 802eba0: 10800217 ldw r2,8(r2) + 802eba4: 10000326 beq r2,zero,802ebb4 + { + error = EINVAL; + 802eba8: 00800584 movi r2,22 + 802ebac: e0bfff15 stw r2,-4(fp) + break; + 802ebb0: 00001006 br 802ebf4 + } + 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 + } + default: + error = ENOPROTOOPT; + 802ebe4: 00801b44 movi r2,109 + 802ebe8: e0bfff15 stw r2,-4(fp) + break; + 802ebec: 00000106 br 802ebf4 + 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 : + +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 + { + return ENP_PARAM; + 802ec34: 00bffd84 movi r2,-10 + 802ec38: 00013706 br 802f118 + } + + switch (optname) + 802ec3c: e0bff817 ldw r2,-32(fp) + 802ec40: 108400e0 cmpeqi r2,r2,4099 + 802ec44: 10008e1e bne r2,zero,802ee80 + 802ec48: e0bff817 ldw r2,-32(fp) + 802ec4c: 10840108 cmpgei r2,r2,4100 + 802ec50: 10002e1e bne r2,zero,802ed0c + 802ec54: e0bff817 ldw r2,-32(fp) + 802ec58: 10800420 cmpeqi r2,r2,16 + 802ec5c: 1000801e bne r2,zero,802ee60 + 802ec60: e0bff817 ldw r2,-32(fp) + 802ec64: 10800448 cmpgei r2,r2,17 + 802ec68: 1000111e bne r2,zero,802ecb0 + 802ec6c: e0bff817 ldw r2,-32(fp) + 802ec70: 10800220 cmpeqi r2,r2,8 + 802ec74: 10007a1e bne r2,zero,802ee60 + 802ec78: e0bff817 ldw r2,-32(fp) + 802ec7c: 10800248 cmpgei r2,r2,9 + 802ec80: 1000071e bne r2,zero,802eca0 + 802ec84: e0bff817 ldw r2,-32(fp) + 802ec88: 108000a0 cmpeqi r2,r2,2 + 802ec8c: 1000ee1e bne r2,zero,802f048 + 802ec90: e0bff817 ldw r2,-32(fp) + 802ec94: 10800120 cmpeqi r2,r2,4 + 802ec98: 1000711e bne r2,zero,802ee60 + 802ec9c: 00011b06 br 802f10c + 802eca0: e0bff817 ldw r2,-32(fp) + 802eca4: 10800308 cmpgei r2,r2,12 + 802eca8: 1001181e bne r2,zero,802f10c + 802ecac: 0000e006 br 802f030 + 802ecb0: e0bff817 ldw r2,-32(fp) + 802ecb4: 10804020 cmpeqi r2,r2,256 + 802ecb8: 1000691e bne r2,zero,802ee60 + 802ecbc: e0bff817 ldw r2,-32(fp) + 802ecc0: 10804048 cmpgei r2,r2,257 + 802ecc4: 1000071e bne r2,zero,802ece4 + 802ecc8: e0bff817 ldw r2,-32(fp) + 802eccc: 10800820 cmpeqi r2,r2,32 + 802ecd0: 1000631e bne r2,zero,802ee60 + 802ecd4: e0bff817 ldw r2,-32(fp) + 802ecd8: 10802020 cmpeqi r2,r2,128 + 802ecdc: 1000511e bne r2,zero,802ee24 + 802ece0: 00010a06 br 802f10c + 802ece4: e0bff817 ldw r2,-32(fp) + 802ece8: 10840060 cmpeqi r2,r2,4097 + 802ecec: 1000701e bne r2,zero,802eeb0 + 802ecf0: e0bff817 ldw r2,-32(fp) + 802ecf4: 10840088 cmpgei r2,r2,4098 + 802ecf8: 1000731e bne r2,zero,802eec8 + 802ecfc: e0bff817 ldw r2,-32(fp) + 802ed00: 10808020 cmpeqi r2,r2,512 + 802ed04: 1000561e bne r2,zero,802ee60 + 802ed08: 00010006 br 802f10c + 802ed0c: e0bff817 ldw r2,-32(fp) + 802ed10: 10840420 cmpeqi r2,r2,4112 + 802ed14: 10008d1e bne r2,zero,802ef4c + 802ed18: e0bff817 ldw r2,-32(fp) + 802ed1c: 10840448 cmpgei r2,r2,4113 + 802ed20: 1000171e bne r2,zero,802ed80 + 802ed24: e0bff817 ldw r2,-32(fp) + 802ed28: 108401a0 cmpeqi r2,r2,4102 + 802ed2c: 1000a71e bne r2,zero,802efcc + 802ed30: e0bff817 ldw r2,-32(fp) + 802ed34: 108401c8 cmpgei r2,r2,4103 + 802ed38: 1000071e bne r2,zero,802ed58 + 802ed3c: e0bff817 ldw r2,-32(fp) + 802ed40: 10840120 cmpeqi r2,r2,4100 + 802ed44: 1000541e bne r2,zero,802ee98 + 802ed48: e0bff817 ldw r2,-32(fp) + 802ed4c: 10840160 cmpeqi r2,r2,4101 + 802ed50: 1000991e bne r2,zero,802efb8 + 802ed54: 0000ed06 br 802f10c + 802ed58: e0bff817 ldw r2,-32(fp) + 802ed5c: 10840220 cmpeqi r2,r2,4104 + 802ed60: 10006b1e bne r2,zero,802ef10 + 802ed64: e0bff817 ldw r2,-32(fp) + 802ed68: 10840210 cmplti r2,r2,4104 + 802ed6c: 1000701e bne r2,zero,802ef30 + 802ed70: e0bff817 ldw r2,-32(fp) + 802ed74: 10840260 cmpeqi r2,r2,4105 + 802ed78: 1000991e bne r2,zero,802efe0 + 802ed7c: 0000e306 br 802f10c + 802ed80: e0bff817 ldw r2,-32(fp) + 802ed84: 108404e0 cmpeqi r2,r2,4115 + 802ed88: 1000141e bne r2,zero,802eddc + 802ed8c: e0bff817 ldw r2,-32(fp) + 802ed90: 10840508 cmpgei r2,r2,4116 + 802ed94: 1000071e bne r2,zero,802edb4 + 802ed98: e0bff817 ldw r2,-32(fp) + 802ed9c: 10840460 cmpeqi r2,r2,4113 + 802eda0: 10004f1e bne r2,zero,802eee0 + 802eda4: e0bff817 ldw r2,-32(fp) + 802eda8: 108404a0 cmpeqi r2,r2,4114 + 802edac: 1000521e bne r2,zero,802eef8 + 802edb0: 0000d606 br 802f10c + 802edb4: e0bff817 ldw r2,-32(fp) + 802edb8: 108800e0 cmpeqi r2,r2,8195 + 802edbc: 1000631e bne r2,zero,802ef4c + 802edc0: e0bff817 ldw r2,-32(fp) + 802edc4: 10880120 cmpeqi r2,r2,8196 + 802edc8: 1000aa1e bne r2,zero,802f074 + 802edcc: e0bff817 ldw r2,-32(fp) + 802edd0: 108405a0 cmpeqi r2,r2,4118 + 802edd4: 10008a1e bne r2,zero,802f000 + 802edd8: 0000cc06 br 802f10c + { + 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 + { + *(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 + *(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 + 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 + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + 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 + { + error = EINVAL; + 802ef68: 00800584 movi r2,22 + 802ef6c: e0bfff15 stw r2,-4(fp) + break; + 802ef70: 00006806 br 802f114 + } + 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 + { + error = ENOTCONN; + 802ef94: 00802004 movi r2,128 + 802ef98: e0bfff15 stw r2,-4(fp) + break; + 802ef9c: 00005d06 br 802f114 + } + *(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 + } + + 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 + + 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 + + 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 + + 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 + *(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 + *(int *)val = 0; /* return 0 in val */ + 802f024: e0bff717 ldw r2,-36(fp) + 802f028: 10000015 stw zero,0(r2) + break; + 802f02c: 00003906 br 802f114 +#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 + 802f040: e0bfff15 stw r2,-4(fp) + break; + 802f044: 00003306 br 802f114 + +#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 + *(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 + *(int *)val = 0; + 802f068: e0bff717 ldw r2,-36(fp) + 802f06c: 10000015 stw zero,0(r2) + break; + 802f070: 00002806 br 802f114 + 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 + { + error = EINVAL; + 802f090: 00800584 movi r2,22 + 802f094: e0bfff15 stw r2,-4(fp) + break; + 802f098: 00001e06 br 802f114 + } + 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 + { + error = ENOTCONN; + 802f0bc: 00802004 movi r2,128 + 802f0c0: e0bfff15 stw r2,-4(fp) + break; + 802f0c4: 00001306 br 802f114 + } + /* 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 + { + error = ENP_PARAM; + 802f0d0: 00bffd84 movi r2,-10 + 802f0d4: e0bfff15 stw r2,-4(fp) + break; + 802f0d8: 00000e06 br 802f114 + } + /* 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 + *(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 + *(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 + } + + default: + return ENOPROTOOPT; + 802f10c: 00801b44 movi r2,109 + 802f110: 00000106 br 802f118 + } + 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 : + * 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 +} + 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 : + * 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 +} + 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 : + * 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 + { + if (soqremque(so, 0) == 0) + 802f210: 000b883a mov r5,zero + 802f214: e13ffe17 ldw r4,-8(fp) + 802f218: 802f6ec0 call 802f6ec + 802f21c: 1000031e bne r2,zero,802f22c + panic("soisconnected"); + 802f220: 01020174 movhi r4,2053 + 802f224: 212a8a04 addi r4,r4,-21976 + 802f228: 80271780 call 8027178 + 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 + 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 + 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 + } + + 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 + 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 + 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 +} + 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 : + * 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 + 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 + 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 +} + 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 : + * 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 + 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 + 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 + 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 +} + 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 : + * 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 + goto bad; + if ((so = SOC_ALLOC (sizeof (*so))) == NULL) + 802f4b0: 01002104 movi r4,132 + 802f4b4: 802982c0 call 802982c + 802f4b8: e0bfff15 stw r2,-4(fp) + 802f4bc: e0bfff17 ldw r2,-4(fp) + 802f4c0: 10005826 beq r2,zero,802f624 + 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 + 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 + 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 + goto bad2; + if (so_evtmap) + 802f5ac: d0a09a03 ldbu r2,-32152(gp) + 802f5b0: 10803fcc andi r2,r2,255 + 802f5b4: 10000a26 beq r2,zero,802f5e0 + { + 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 + 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 + goto bad2; + 802f5e8: 0001883a nop + 802f5ec: 00000106 br 802f5f4 + 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 + 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 + SOC_FREE(so); /* Free the socket structure */ + 802f610: e13fff17 ldw r4,-4(fp) + 802f614: 80298600 call 8029860 + 802f618: 00000306 br 802f628 + goto bad; + 802f61c: 0001883a nop + 802f620: 00000106 br 802f628 + 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 : + +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 + { + 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 + 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 : + * 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 + 802f71c: e0bfff17 ldw r2,-4(fp) + 802f720: 10801d17 ldw r2,116(r2) + 802f724: 00000206 br 802f730 + 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 + break; + if (next == head) + 802f740: e0fffd17 ldw r3,-12(fp) + 802f744: e0bffe17 ldw r2,-8(fp) + 802f748: 1880021e bne r3,r2,802f754 + return (0); + 802f74c: 0005883a mov r2,zero + 802f750: 00002406 br 802f7e4 + 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 + break; + 802f760: 0001883a nop + } + if (q == 0) + 802f764: e0bffb17 ldw r2,-20(fp) + 802f768: 10000b1e bne r2,zero,802f798 + { + 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 + } 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 : + * 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 +} + 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 : + * 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 +} + 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 : + * 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 : + * 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 + 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 : + * 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 + { + 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 +#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 + { + 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 + } +#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 : + +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 + 802fa08: 10000e26 beq r2,zero,802fa44 + 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 + 802fa20: 10000226 beq r2,zero,802fa2c + goto bad2; + return (0); + 802fa24: 0005883a mov r2,zero + 802fa28: 00000806 br 802fa4c + 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 + 802fa40: 00000106 br 802fa48 + 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 : + * 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 + 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 : + * 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 + 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 : + * 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 + return; + ENTER_CRIT_SECTION(sb); + 802fb1c: 8028e940 call 8028e94 + 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 + { + while (n->m_act) + 802fb34: 00000306 br 802fb44 + 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 + while (n->m_next) + 802fb50: 00000306 br 802fb60 + 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 + } + 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 + EXIT_CRIT_SECTION(sb); + 802fb7c: 8028ef40 call 8028ef4 + 802fb80: 00000106 br 802fb88 + 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 : + */ + +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 + return; + ENTER_CRIT_SECTION(sb); /* protect so_rcv operations */ + 802fbbc: 8028e940 call 8028e94 + 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 + while (m->m_act) + 802fbd4: 00000306 br 802fbe4 + 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 + /* + * 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 + 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 + 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 + EXIT_CRIT_SECTION(sb); + 802fc54: 8028ef40 call 8028ef4 + 802fc58: 00000106 br 802fc60 + 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 : + +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 + for (m = m0; m; m = m->m_next) + 802fc9c: e0bffa17 ldw r2,-24(fp) + 802fca0: e0bfff15 stw r2,-4(fp) + 802fca4: 00000806 br 802fcc8 + 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 + 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 + 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 + 802fd08: 0007883a mov r3,zero + 802fd0c: e0bffd17 ldw r2,-12(fp) + 802fd10: 1880030e bge r3,r2,802fd20 + { + EXIT_CRIT_SECTION(sb); + 802fd14: 8028ef40 call 8028ef4 + return (0); + 802fd18: 0005883a mov r2,zero + 802fd1c: 00004706 br 802fe3c + } + if ((m = m_getwithdata (MT_SONAME, sizeof (struct sockaddr))) == NULL) + 802fd20: 01400404 movi r5,16 + 802fd24: 01000244 movi r4,9 + 802fd28: 8029a700 call 8029a70 + 802fd2c: e0bfff15 stw r2,-4(fp) + 802fd30: e0bfff17 ldw r2,-4(fp) + 802fd34: 1000031e bne r2,zero,802fd44 + { + EXIT_CRIT_SECTION(sb); + 802fd38: 8028ef40 call 8028ef4 + return 0; + 802fd3c: 0005883a mov r2,zero + 802fd40: 00003e06 br 802fe3c + } + *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 + { + while (n->m_act) + 802fdcc: 00000306 br 802fddc + 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 + 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 + } 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 + 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 + 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 + + EXIT_CRIT_SECTION(sb); + 802fe34: 8028ef40 call 8028ef4 + 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 : + +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 + { + if (m->m_len == 0) + 802fe70: e0bffe17 ldw r2,-8(fp) + 802fe74: 10800217 ldw r2,8(r2) + 802fe78: 1000041e bne r2,zero,802fe8c + { + m = m_free(m); + 802fe7c: e13ffe17 ldw r4,-8(fp) + 802fe80: 8029bf80 call 8029bf8 + 802fe84: e0bffe15 stw r2,-8(fp) + continue; + 802fe88: 00006006 br 803000c + } + 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 + 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 + 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 + { + 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 + panic ("sbcomp:bad"); + 802fed4: 01020174 movhi r4,2053 + 802fed8: 212a9304 addi r4,r4,-21940 + 802fedc: 80271780 call 8027178 + /* 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 + 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 + ((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 + { + 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 + 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 + 802ffa8: e0bffe15 stw r2,-8(fp) + continue; + 802ffac: 00001706 br 803000c + } + 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 + 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 + 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 + } +} + 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 : + * 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 + 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 + panic("sbflush"); + 8030058: 01020174 movhi r4,2053 + 803005c: 212a9604 addi r4,r4,-21928 + 8030060: 80271780 call 8027178 + while ((sb->sb_mbcnt) || (sb->sb_cc)) + 8030064: 00000506 br 803007c + 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 + 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 + 8030088: e0bfff17 ldw r2,-4(fp) + 803008c: 10800017 ldw r2,0(r2) + 8030090: 103ff51e bne r2,zero,8030068 + EXIT_CRIT_SECTION(sb); + 8030094: 8028ef40 call 8028ef4 +} + 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 : + * 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 + 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 + 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 + else + next = NULL; + 80300f0: e03ffe15 stw zero,-8(fp) + while (len > 0) + 80300f4: 00003506 br 80301cc + { + if (m == 0) + 80300f8: e0bfff17 ldw r2,-4(fp) + 80300fc: 10000b1e bne r2,zero,803012c + { + if (next == 0) + 8030100: e0bffe17 ldw r2,-8(fp) + 8030104: 1000031e bne r2,zero,8030114 + panic("sbdrop"); + 8030108: 01020174 movhi r4,2053 + 803010c: 212a9804 addi r4,r4,-21920 + 8030110: 80271780 call 8027178 + 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 + } + 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 + { + 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 + } + 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 + 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 + } + while (m && m->m_len == 0) + 80301d4: 00000c06 br 8030208 + { + 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 + 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 + 8030210: e0bfff17 ldw r2,-4(fp) + 8030214: 10800217 ldw r2,8(r2) + 8030218: 103fef26 beq r2,zero,80301d8 + } + if (m) + 803021c: e0bfff17 ldw r2,-4(fp) + 8030220: 10000726 beq r2,zero,8030240 + { + 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 + } 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 +} + 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 : + * 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 + len = mbuf_len(m); + 8030284: e13ffb17 ldw r4,-20(fp) + 8030288: 802a1d80 call 802a1d8 + 803028c: e0bffd15 stw r2,-12(fp) + if (len > 0) + 8030290: e0bffd17 ldw r2,-12(fp) + 8030294: 0080070e bge zero,r2,80302b4 + 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 + 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 + 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 + { + 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 + 80302fc: e0bfff17 ldw r2,-4(fp) + 8030300: 10800217 ldw r2,8(r2) + 8030304: 103ff61e bne r2,zero,80302e0 + } + 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 + 8030310: e0bfff17 ldw r2,-4(fp) + 8030314: 10800217 ldw r2,8(r2) + 8030318: 1000061e bne r2,zero,8030334 + { /* are zeroes */ + if (pmb != NULL) + 803031c: e0bffe17 ldw r2,-8(fp) + 8030320: 10000226 beq r2,zero,803032c + 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 + } + 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 +} + 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 : + * 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 + 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 + { 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 + 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 + } + EXIT_CRIT_SECTION(sb); + 80303dc: 8028ef40 call 8028ef4 +} + 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 : +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(&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 + + if (in) + 8030444: e0be7717 ldw r2,-1572(fp) + 8030448: 10000526 beq r2,zero,8030460 + 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 + if (out) + 8030460: e0be7617 ldw r2,-1576(fp) + 8030464: 10000626 beq r2,zero,8030480 + 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 + if (ex) + 8030480: e0be7517 ldw r2,-1580(fp) + 8030484: 10000626 beq r2,zero,80304a0 + 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 + 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 + 80304b8: e0beb917 ldw r2,-1308(fp) + 80304bc: 10000a1e bne r2,zero,80304e8 + (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 + { + if (tv > 0) /* make sure we don't block on nothing forever */ + 80304c8: e0be7417 ldw r2,-1584(fp) + 80304cc: 00801f0e bge zero,r2,803054c + 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 + if (tv > 0) /* make sure we don't block on nothing forever */ + 80304e4: 00001906 br 803054c + + /* 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 + while ((retval = sock_selscan(ibits, obits)) == 0) + 80304f0: 00000a06 br 803051c + { + if (tv != -1L) + 80304f4: e0be7417 ldw r2,-1584(fp) + 80304f8: 10bfffe0 cmpeqi r2,r2,-1 + 80304fc: 1000031e bne r2,zero,803050c + { + if (tmo <= cticks) + 8030500: d0e07d17 ldw r3,-32268(gp) + 8030504: e0bffe17 ldw r2,-8(fp) + 8030508: 18800d2e bgeu r3,r2,8030540 + 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 + 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 + 8030530: e0bfff15 stw r2,-4(fp) + 8030534: e0bfff17 ldw r2,-4(fp) + 8030538: 103fee26 beq r2,zero,80304f4 + 803053c: 00000106 br 8030544 + break; + 8030540: 0001883a nop + } + UNLOCK_NET_RESOURCE(NET_RESID); + 8030544: 0009883a mov r4,zero + 8030548: 8028ff40 call 8028ff4 + + } + + if (retval >= 0) + 803054c: e0bfff17 ldw r2,-4(fp) + 8030550: 10001716 blt r2,zero,80305b0 + { + if (in) + 8030554: e0be7717 ldw r2,-1572(fp) + 8030558: 10000526 beq r2,zero,8030570 + 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 + if (out) + 8030570: e0be7617 ldw r2,-1576(fp) + 8030574: 10000626 beq r2,zero,8030590 + 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 + if (ex) + 8030590: e0be7517 ldw r2,-1580(fp) + 8030594: 10000626 beq r2,zero,80305b0 + 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 + } + 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 : + * 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 + { + switch (which) + 80305f0: e0bfff17 ldw r2,-4(fp) + 80305f4: 10800060 cmpeqi r2,r2,1 + 80305f8: 1000081e bne r2,zero,803061c + 80305fc: e0bfff17 ldw r2,-4(fp) + 8030600: 108000a0 cmpeqi r2,r2,2 + 8030604: 1000081e bne r2,zero,8030628 + 8030608: e0bfff17 ldw r2,-4(fp) + 803060c: 1000081e bne r2,zero,8030630 + { + case 0: + flag = SOREAD; break; + 8030610: 00800044 movi r2,1 + 8030614: e0bffd15 stw r2,-12(fp) + 8030618: 00000506 br 8030630 + + case 1: + flag = SOWRITE; break; + 803061c: 00800084 movi r2,2 + 8030620: e0bffd15 stw r2,-12(fp) + 8030624: 00000206 br 8030630 + + 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 + { + 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 + 8030684: 10000c26 beq r2,zero,80306b8 + { + 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 + 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 + 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 + } + } + } + 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 : + * 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 + 8030740: e0bffc17 ldw r2,-16(fp) + 8030744: 108000a0 cmpeqi r2,r2,2 + 8030748: 1000211e bne r2,zero,80307d0 + 803074c: e0bffc17 ldw r2,-16(fp) + 8030750: 10004326 beq r2,zero,8030860 + 8030754: 00006006 br 80308d8 + { + 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 + { + ready = 1; + 8030764: 00800044 movi r2,1 + 8030768: e0bfff15 stw r2,-4(fp) + break; + 803076c: 00005a06 br 80308d8 + } + 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 + { ready = 1; + 8030784: 00800044 movi r2,1 + 8030788: e0bfff15 stw r2,-4(fp) + break; + 803078c: 00005206 br 80308d8 + } + 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 + { + ready = 1; + 80307a8: 00800044 movi r2,1 + 80307ac: e0bfff15 stw r2,-4(fp) + break; + 80307b0: 00004906 br 80308d8 + } + } +#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 + + 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 + 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 + ((((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 + ((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 + ((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 + { + ready = 1; + 8030840: 00800044 movi r2,1 + 8030844: e0bfff15 stw r2,-4(fp) + break; + 8030848: 00002306 br 80308d8 + } + 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 + break; + 803085c: 00001e06 br 80308d8 + + 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 + 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 + { + ready = 1; + 8030880: 00800044 movi r2,1 + 8030884: e0bfff15 stw r2,-4(fp) + break; + 8030888: 00001306 br 80308d8 + } + if (so->so_error && + 803088c: e0bffe17 ldw r2,-8(fp) + 8030890: 10800617 ldw r2,24(r2) + 8030894: 10000b26 beq r2,zero,80308c4 + (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 + (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 + { + ready = 1; + 80308b8: 00800044 movi r2,1 + 80308bc: e0bfff15 stw r2,-4(fp) + break; + 80308c0: 00000506 br 80308d8 + } + 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 + 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 : +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 + { + 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 + 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 + { + 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 + } + if (errnum) + 8030950: e0bffb17 ldw r2,-20(fp) + 8030954: 10000426 beq r2,zero,8030968 + 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 + (*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 + } +} + 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 : + * 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 + 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 + 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 +} + 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 : + * 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 + { + 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 + { + while (i + 1 < set->fd_count) + 8030a74: 00001006 br 8030ab8 + { + 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 + } + 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 + 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 + } + } + +#ifdef NPDEBUG + dtrap(); /* socket wasn't found in array */ + 8030b00: 8028cd40 call 8028cd4 +#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 : + * 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 + 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 + dtrap(); + 8030b70: 8028cd40 call 8028cd4 +} + 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 : + * 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 + { + 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 + return TRUE; + 8030bc8: 00800044 movi r2,1 + 8030bcc: 00000806 br 8030bf0 + 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 + } + 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 : + * 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 + 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 + else + { +#ifdef NPDEBUG + dtrap(); + 8030c44: 8028cd40 call 8028cd4 +#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 : + +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 + 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 + 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 + 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 + 8030cd4: 00000106 br 8030cdc + 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 + { + 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 + { + 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 + { + 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 + return (0); + 8030d84: 0005883a mov r2,zero + 8030d88: 0000ac06 br 803103c + m_adj (ti_mbuf, (int)i); + 8030d8c: e17ffd17 ldw r5,-12(fp) + 8030d90: e13ff717 ldw r4,-36(fp) + 8030d94: 802a0180 call 802a018 + 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 + 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 + 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 + 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 + 8030e90: e17ffc17 ldw r5,-16(fp) + 8030e94: 1009883a mov r4,r2 + 8030e98: 802a0180 call 802a018 + break; + 8030e9c: 00001306 br 8030eec + 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 + 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 + m_freem (m); + 8030ed0: e13ffb17 ldw r4,-20(fp) + 8030ed4: 8029cfc0 call 8029cfc + while (q != (struct tcpiphdr *)tp) + 8030ed8: e0ffff17 ldw r3,-4(fp) + 8030edc: e0bff917 ldw r2,-28(fp) + 8030ee0: 18bfcb1e bne r3,r2,8030e10 + 8030ee4: 00000106 br 8030eec + 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 + 8030f00: 00000106 br 8030f08 + 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 + return (0); + 8030f18: 0005883a mov r2,zero + 8030f1c: 00004706 br 803103c + 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 + 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 + return (0); + 8030f4c: 0005883a mov r2,zero + 8030f50: 00003a06 br 803103c + 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 + 8030f64: e0bff817 ldw r2,-32(fp) + 8030f68: 1080028b ldhu r2,10(r2) + 8030f6c: 10bfffcc andi r2,r2,65535 + 8030f70: 10000226 beq r2,zero,8030f7c + return (0); + 8030f74: 0005883a mov r2,zero + 8030f78: 00003006 br 803103c + 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 + m = dtom(ti); + 8030fb8: e13ff817 ldw r4,-32(fp) + 8030fbc: 802a22c0 call 802a22c + 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 + m_freem (m); + 8030fe4: e13ffb17 ldw r4,-20(fp) + 8030fe8: 8029cfc0 call 8029cfc + 8030fec: 00000506 br 8031004 + 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 + } 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 + 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 + 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 + 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 : + * 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 + { + np_stripoptions(pip, (struct mbuf *)m); + 80310c8: e17fe417 ldw r5,-112(fp) + 80310cc: e13fff17 ldw r4,-4(fp) + 80310d0: 802ac180 call 802ac18 + 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 + { + 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 + } + 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 + { + panic("tcp_input"); + 8031138: 01020174 movhi r4,2053 + 803113c: 212a9a04 addi r4,r4,-21912 + 8031140: 80271780 call 8027178 + /* + * 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 + 803116c: e0bfef17 ldw r2,-68(fp) + 8031170: e0fff117 ldw r3,-60(fp) + 8031174: 18800d0e bge r3,r2,80311ac + { +#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 + } + 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 + { + 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 + 80311f0: e0bffd15 stw r2,-12(fp) + if (om == 0) + 80311f4: e0bffd17 ldw r2,-12(fp) + 80311f8: 1000031e bne r2,zero,8031208 + GOTO_DROP; + 80311fc: 00805a84 movi r2,362 + 8031200: d0a08715 stw r2,-32228(gp) + 8031204: 0007fd06 br 80331fc + 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 + 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 + 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 + + /* 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 + { +#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 + 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 + 803141c: 00000206 br 8031428 + dtrap(); + 8031420: 8028cd40 call 8028cd4 + return; + 8031424: 00078a06 br 8033250 + GOTO_DROPWITHRESET; + 8031428: 00806b04 movi r2,428 + 803142c: d0a08715 stw r2,-32228(gp) + 8031430: 00073306 br 8033100 + 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 + GOTO_DROPWITHRESET; + 8031448: 00806bc4 movi r2,431 + 803144c: d0a08715 stw r2,-32228(gp) + 8031450: 00072b06 br 8033100 + if (tp->t_state == TCPS_CLOSED) + 8031454: e0bffc17 ldw r2,-16(fp) + 8031458: 10800217 ldw r2,8(r2) + 803145c: 1000031e bne r2,zero,803146c + GOTO_DROP; + 8031460: 00806c44 movi r2,433 + 8031464: d0a08715 stw r2,-32228(gp) + 8031468: 00076406 br 80331fc + 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 + { + so = sonewconn(so); + 80314bc: e13ffa17 ldw r4,-24(fp) + 80314c0: 802f4480 call 802f448 + 80314c4: e0bffa15 stw r2,-24(fp) + if (so == 0) + 80314c8: e0bffa17 ldw r2,-24(fp) + 80314cc: 1000031e bne r2,zero,80314dc + GOTO_DROP; + 80314d0: 00807344 movi r2,461 + 80314d4: d0a08715 stw r2,-32228(gp) + 80314d8: 00074806 br 80331fc + * 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 + { +#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 + 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_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 + 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 + 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 + 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 + 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 + 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 + ((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 + (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 + (ti->ti_seq == tp->rcv_nxt) && + 8031668: e0bfed17 ldw r2,-76(fp) + 803166c: 1000e926 beq r2,zero,8031a14 + (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 + (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 + { + 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 + { + 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 + 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 + 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 + { + /* + * 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 +#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_xmit_timer(tp); + 8031720: e13ffc17 ldw r4,-16(fp) + 8031724: 80335180 call 8033518 + } + + 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 + 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 + * 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 + tp->t_timer[TCPT_REXMT] = 0; + 8031794: e0bffc17 ldw r2,-16(fp) + 8031798: 10000315 stw zero,12(r2) + 803179c: 00000706 br 80317bc + 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 + 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 + 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 + + /* 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 + (void) tcp_output(tp); + 8031804: e13ffc17 ldw r4,-16(fp) + 8031808: 80338940 call 8033894 + return; + 803180c: 00068706 br 803322c + } + } + 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 + 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 + 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 + 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 + 8031874: 0005883a mov r2,zero + tp->seg_next == (struct tcpiphdr *)tp && + 8031878: 10c06636 bltu r2,r3,8031a14 +#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 + * 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 + tcp_output(tp); /* send the ack now... */ + 80318a4: e13ffc17 ldw r4,-16(fp) + 80318a8: 80338940 call 8033894 + return; + 80318ac: 00066806 br 8033250 + /* + * 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 + 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 + /* + * 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 + 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 + 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 + (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 + 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 + } + + return; + 8031a10: 00060806 br 8033234 + } + } + + 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 + 8031a24: 108000a0 cmpeqi r2,r2,2 + 8031a28: 1000a81e bne r2,zero,8031ccc + 8031a2c: 00017606 br 8032008 + */ + 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 + GOTO_DROP; + 8031a3c: 0080bec4 movi r2,763 + 8031a40: d0a08715 stw r2,-32228(gp) + 8031a44: 0005ed06 br 80331fc + if (tiflags & TH_ACK) + 8031a48: e0bffb17 ldw r2,-20(fp) + 8031a4c: 1080040c andi r2,r2,16 + 8031a50: 10000326 beq r2,zero,8031a60 + GOTO_DROPWITHRESET; + 8031a54: 0080bf44 movi r2,765 + 8031a58: d0a08715 stw r2,-32228(gp) + 8031a5c: 0005a806 br 8033100 + if ((tiflags & TH_SYN) == 0) + 8031a60: e0bffb17 ldw r2,-20(fp) + 8031a64: 1080008c andi r2,r2,2 + 8031a68: 1000031e bne r2,zero,8031a78 + GOTO_DROP; + 8031a6c: 0080bfc4 movi r2,767 + 8031a70: d0a08715 stw r2,-32228(gp) + 8031a74: 0005e106 br 80331fc + 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 + 8031a88: 10000326 beq r2,zero,8031a98 + GOTO_DROP; + 8031a8c: 0080c044 movi r2,769 + 8031a90: d0a08715 stw r2,-32228(gp) + 8031a94: 0005d906 br 80331fc + am = m_getwithdata (MT_SONAME, sizeof (struct sockaddr)); + 8031a98: 01400404 movi r5,16 + 8031a9c: 01000244 movi r4,9 + 8031aa0: 8029a700 call 8029a70 + 8031aa4: e0bfea15 stw r2,-88(fp) + if (am == NULL) + 8031aa8: e0bfea17 ldw r2,-88(fp) + 8031aac: 1000031e bne r2,zero,8031abc + GOTO_DROP; + 8031ab0: 0080c104 movi r2,772 + 8031ab4: d0a08715 stw r2,-32228(gp) + 8031ab8: 0005d006 br 80331fc + +#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 + { + 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 + 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 + 8031b48: 10000826 beq r2,zero,8031b6c + { + 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 + GOTO_DROP; + 8031b60: 0080c684 movi r2,794 + 8031b64: d0a08715 stw r2,-32228(gp) + 8031b68: 0005a406 br 80331fc + } + + 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 + } + (void) m_free(am); + } +#endif /* end v6 */ + + tp->t_template = tcp_template(tp); + 8031b80: e13ffc17 ldw r4,-16(fp) + 8031b84: 8034a400 call 8034a40 + 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 + { + SETTP(tp, tcp_drop(tp, ENOBUFS)); + 8031ba0: 01401a44 movi r5,105 + 8031ba4: e13ffc17 ldw r4,-16(fp) + 8031ba8: 803504c0 call 803504c + 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 + } + if (om) + 8031bbc: e0bffd17 ldw r2,-12(fp) + 8031bc0: 10000526 beq r2,zero,8031bd8 + { + 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 + om = 0; + 8031bd4: e03ffd15 stw zero,-12(fp) + } + if (iss) + 8031bd8: e0bff517 ldw r2,-44(fp) + 8031bdc: 10000426 beq r2,zero,8031bf0 + 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 + 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 + * 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 + (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 + 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 + { + GOTO_DROPWITHRESET; + 8031d14: 0080dc04 movi r2,880 + 8031d18: d0a08715 stw r2,-32228(gp) + 8031d1c: 0004f806 br 8033100 + } + if (tiflags & TH_RST) + 8031d20: e0bffb17 ldw r2,-20(fp) + 8031d24: 1080010c andi r2,r2,4 + 8031d28: 10000926 beq r2,zero,8031d50 + { + if (tiflags & TH_ACK) + 8031d2c: e0bffb17 ldw r2,-20(fp) + 8031d30: 1080040c andi r2,r2,16 + 8031d34: 10000326 beq r2,zero,8031d44 + SETTP(tp, tcp_drop(tp, ECONNREFUSED)); + 8031d38: 01401bc4 movi r5,111 + 8031d3c: e13ffc17 ldw r4,-16(fp) + 8031d40: 803504c0 call 803504c + GOTO_DROP; + 8031d44: 0080dd84 movi r2,886 + 8031d48: d0a08715 stw r2,-32228(gp) + 8031d4c: 00052b06 br 80331fc + } + if ((tiflags & TH_SYN) == 0) + 8031d50: e0bffb17 ldw r2,-20(fp) + 8031d54: 1080008c andi r2,r2,2 + 8031d58: 1000031e bne r2,zero,8031d68 + GOTO_DROP; + 8031d5c: 0080de44 movi r2,889 + 8031d60: d0a08715 stw r2,-32228(gp) + 8031d64: 00052506 br 80331fc + if (tiflags & TH_ACK) + 8031d68: e0bffb17 ldw r2,-20(fp) + 8031d6c: 1080040c andi r2,r2,16 + 8031d70: 10000e26 beq r2,zero,8031dac + { + 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 + 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 + * 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 + && (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 + /* 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 + 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 + 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 + { + 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 + tp->t_maxseg = tcp_mss(so); + 8031ebc: e13ffa17 ldw r4,-24(fp) + 8031ec0: 803379c0 call 803379c + 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 + /* + * 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_xmit_timer(tp); + 8031eec: e13ffc17 ldw r4,-16(fp) + 8031ef0: 80335180 call 8033518 + if (tp->t_rttick) + 8031ef4: 00000306 br 8031f04 + } + } 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 + { + 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 + { + 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 + 8031f70: 00000706 br 8031f90 + } + 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 + } + 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 + * 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 + { + if (tiflags & TH_SYN) + 8032028: e0bffb17 ldw r2,-20(fp) + 803202c: 1080008c andi r2,r2,2 + 8032030: 10001c26 beq r2,zero,80320a4 + { + 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 + 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 + 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 + ((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 + (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 + { + 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 + 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 + (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 + (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 + { + 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 + 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 + 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 + 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 + 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 + 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 + 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 + { + tp = tcp_close(tp); + 8032280: e13ffc17 ldw r4,-16(fp) + 8032284: 80350e80 call 80350e8 + 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 + + /* + * 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 + { + 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 + { + 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 + 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 + 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 + { + 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 + { + iss = 0L; + 8032390: e03ff515 stw zero,-44(fp) + } + (void) tcp_close(tp); + 8032394: e13ffc17 ldw r4,-16(fp) + 8032398: 80350e80 call 80350e8 + goto findpcb; + 803239c: 003bf806 br 8031380 + * 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 + 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 + { + 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 + } 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 + { + 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 + 8032428: 00000706 br 8032448 + } + 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 + } + 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 + { + 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 + 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 + + 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 +#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 + + 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 + GOTO_DROP; + 8032530: 00812384 movi r2,1166 + 8032534: d0a08715 stw r2,-32228(gp) + 8032538: 00033006 br 80331fc + 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 + { + tp = tcp_drop(tp, ECONNRESET); + 8032548: 01401a04 movi r5,104 + 803254c: e13ffc17 ldw r4,-16(fp) + 8032550: 803504c0 call 803504c + 8032554: e0bffc15 stw r2,-16(fp) + GOTO_DROPWITHRESET; + 8032558: 00812b04 movi r2,1196 + 803255c: d0a08715 stw r2,-32228(gp) + 8032560: 0002e706 br 8033100 +#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 + GOTO_DROP; + 8032570: 00812d04 movi r2,1204 + 8032574: d0a08715 stw r2,-32228(gp) + 8032578: 00032006 br 80331fc + + /* + * 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 + 803258c: 10c000d0 cmplti r3,r2,3 + 8032590: 1801681e bne r3,zero,8032b34 + 8032594: 108002c8 cmpgei r2,r2,11 + 8032598: 1001661e bne r2,zero,8032b34 + 803259c: 00002c06 br 8032650 + * 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 + 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_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 + } + 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 + tp->t_maxseg = tcp_mss(so); + 8032618: e13ffa17 ldw r4,-24(fp) + 803261c: 803379c0 call 803379c + 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 + 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 + { + 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 + 8032678: e0bffc17 ldw r2,-16(fp) + 803267c: 10801417 ldw r2,80(r2) + 8032680: e0ffed17 ldw r3,-76(fp) + 8032684: 1880541e bne r3,r2,80327d8 + { + 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 + 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 + { + 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 + } + 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_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 + 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 + 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 + + 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 + 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 + } + } else + tp->t_dupacks = 0; + 80327d8: e0bffc17 ldw r2,-16(fp) + 80327dc: 10000915 stw zero,36(r2) + break; + 80327e0: 0000d406 br 8032b34 + if (tp->t_timer[TCPT_REXMT] == 0 || + 80327e4: 0001883a nop + break; + 80327e8: 0000d206 br 8032b34 + } + 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 + { + 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 + } + 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 +#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_xmit_timer(tp); + 803288c: e13ffc17 ldw r4,-16(fp) + 8032890: 80335180 call 8033518 + * 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 + { + 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 + } 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 + 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 + 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 + 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 + 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 + { + 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 + ourfinisacked = 1; + 8032998: 00800044 movi r2,1 + 803299c: e0bff815 stw r2,-32(fp) + 80329a0: 00000d06 br 80329d8 + } + 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 + 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 + 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 + + 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 + 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 + 8032a48: 10c00208 cmpgei r3,r2,8 + 8032a4c: 1800031e bne r3,zero,8032a5c + 8032a50: 108001a0 cmpeqi r2,r2,6 + 8032a54: 1000061e bne r2,zero,8032a70 + 8032a58: 00003606 br 8032b34 + 8032a5c: 10c00220 cmpeqi r3,r2,8 + 8032a60: 1800221e bne r3,zero,8032aec + 8032a64: 108002a0 cmpeqi r2,r2,10 + 8032a68: 1000271e bne r2,zero,8032b08 + 8032a6c: 00003106 br 8032b34 + * 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 + * 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 + { + soisdisconnected(so); + 8032a8c: e13ffa17 ldw r4,-24(fp) + 8032a90: 802f3840 call 802f384 + 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 + * 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 + { + 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 + 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 + } + break; + 8032ae8: 00000f06 br 8032b28 + * 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 + { + SETTP(tp, tcp_close(tp)); + 8032af4: e13ffc17 ldw r4,-16(fp) + 8032af8: 80350e80 call 80350e8 + GOTO_DROP; + 8032afc: 00816644 movi r2,1433 + 8032b00: d0a08715 stw r2,-32228(gp) + 8032b04: 0001bd06 br 80331fc + * 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 + break; + 8032b20: 0001883a nop + 8032b24: 00000306 br 8032b34 + break; + 8032b28: 0001883a nop + 8032b2c: 00000106 br 8032b34 + 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 + /* + * 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 + (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 + (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 + ((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 + ((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 + { + /* 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 + (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 + (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 + { + 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 + 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 + 8032c54: e0bff017 ldw r2,-64(fp) + 8032c58: 1080098b ldhu r2,38(r2) + 8032c5c: 10bfffcc andi r2,r2,65535 + 8032c60: 10005226 beq r2,zero,8032dac + 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 + * 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 + { + 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 + * 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 + { + 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 + 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 + 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 +#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 +#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 + if ( (ti->ti_urp <= ti->ti_len) + 8032da8: 00000b06 br 8032dd8 + /* + * 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 + 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 + if ( (ti->ti_urp <= ti->ti_len) + 8032dd8: 0001883a nop + 8032ddc: 00000106 br 8032de4 +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 + 8032df4: e0bffb17 ldw r2,-20(fp) + 8032df8: 1080004c andi r2,r2,1 + 8032dfc: 10005a26 beq r2,zero,8032f68 + 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 + { + + /* 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 + (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 + (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 + 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 + 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 + 8032eec: 00000b06 br 8032f1c +#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 + 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 + 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 + } +#endif /* TCP_ZEROCOPY */ + } + else + { + m_freem(m); + 8032f68: e13fe417 ldw r4,-112(fp) + 8032f6c: 8029cfc0 call 8029cfc + 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 + { + 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 + { + socantrcvmore(so); + 8032f9c: e13ffa17 ldw r4,-24(fp) + 8032fa0: 802f84c0 call 802f84c + 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 + 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 + /* + * 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 + * 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 + 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 + break; + 8033068: 00000706 br 8033088 + + /* + * 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 + } + } + 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 + 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 + (void) tcp_output(tp); + 80330a4: e13ffc17 ldw r4,-16(fp) + 80330a8: 80338940 call 8033894 + return; + 80330ac: 00006306 br 803323c + goto dropafterack; + 80330b0: 0001883a nop + 80330b4: 00000106 br 80330bc + 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 + GOTO_DROP; + 80330c8: 0081a904 movi r2,1700 + 80330cc: d0a08715 stw r2,-32228(gp) + 80330d0: 00004a06 br 80331fc + m_freem (m); + 80330d4: e13fe417 ldw r4,-112(fp) + 80330d8: 8029cfc0 call 8029cfc + 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 + return; + 80330fc: 00005406 br 8033250 + +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 + { + (void) m_free(om); + 803311c: e13ffd17 ldw r4,-12(fp) + 8033120: 8029bf80 call 8029bf8 + 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 + GOTO_DROP; + 8033134: 0081ad04 movi r2,1716 + 8033138: d0a08715 stw r2,-32228(gp) + 803313c: 00002f06 br 80331fc + * 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 + 8033150: 10000326 beq r2,zero,8033160 + GOTO_DROP; + 8033154: 0081af44 movi r2,1725 + 8033158: d0a08715 stw r2,-32228(gp) + 803315c: 00002706 br 80331fc + 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_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 + 8033198: 00001306 br 80331e8 + else + { + if (tiflags & TH_SYN) + 803319c: e0bffb17 ldw r2,-20(fp) + 80331a0: 1080008c andi r2,r2,2 + 80331a4: 10000526 beq r2,zero,80331bc + 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 + } + /* destroy temporarily created socket */ + if (dropsocket) + 80331e8: e0bff617 ldw r2,-40(fp) + 80331ec: 10001526 beq r2,zero,8033244 + (void) soabort(so); + 80331f0: e13ffa17 ldw r4,-24(fp) + 80331f4: 802d6fc0 call 802d6fc + return; + 80331f8: 00001206 br 8033244 + +drop: + if (om) + 80331fc: e0bffd17 ldw r2,-12(fp) + 8033200: 10000226 beq r2,zero,803320c + (void) m_free(om); + 8033204: e13ffd17 ldw r4,-12(fp) + 8033208: 8029bf80 call 8029bf8 +#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 + /* destroy temporarily created socket */ + if (dropsocket) + 8033214: e0bff617 ldw r2,-40(fp) + 8033218: 10000c26 beq r2,zero,803324c + (void) soabort(so); + 803321c: e13ffa17 ldw r4,-24(fp) + 8033220: 802d6fc0 call 802d6fc + return; + 8033224: 0001883a nop + 8033228: 00000806 br 803324c + return; + 803322c: 0001883a nop + 8033230: 00000706 br 8033250 + return; + 8033234: 0001883a nop + 8033238: 00000506 br 8033250 + return; + 803323c: 0001883a nop + 8033240: 00000306 br 8033250 + return; + 8033244: 0001883a nop + 8033248: 00000106 br 8033250 + 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 : + +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 + { + 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 + break; + if (opt == TCPOPT_NOP) + 80332c4: e0bffb17 ldw r2,-20(fp) + 80332c8: 10800058 cmpnei r2,r2,1 + 80332cc: 1000031e bne r2,zero,80332dc + optlen = 1; + 80332d0: 00800044 movi r2,1 + 80332d4: e0bffe15 stw r2,-8(fp) + 80332d8: 00000706 br 80332f8 + 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 + break; + } + + switch (opt) + 80332f8: e0bffb17 ldw r2,-20(fp) + 80332fc: 10800098 cmpnei r2,r2,2 + 8033300: 10001f1e bne r2,zero,8033380 + { + 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 + 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 + 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 + 8033354: 1007883a mov r3,r2 + 8033358: e0bffa8b ldhu r2,-22(fp) + 803335c: 18ffffcc andi r3,r3,65535 + 8033360: 1880032e bgeu r3,r2,8033370 + 8033364: e13ffc17 ldw r4,-16(fp) + 8033368: 803379c0 call 803379c + 803336c: 00000106 br 8033374 + 8033370: e0bffa8b ldhu r2,-22(fp) + 8033374: e0fff917 ldw r3,-28(fp) + 8033378: 18800a0d sth r2,40(r3) + break; + 803337c: 00000506 br 8033394 + } + break; +#endif /* TCP_TIMESTAMP */ + + default: + break; + 8033380: 0001883a nop + 8033384: 00000306 br 8033394 + continue; + 8033388: 0001883a nop + 803338c: 00000106 br 8033394 + 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 + 80333bc: 00000306 br 80333cc + break; + 80333c0: 0001883a nop + 80333c4: 00000106 br 80333cc + break; + 80333c8: 0001883a nop + } + } + (void) m_free(om); + 80333cc: e13ff817 ldw r4,-32(fp) + 80333d0: 8029bf80 call 8029bf8 + 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 : + +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 + { + 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 + { + 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 + 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 + } + 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 + while (cnt >= 0) + 80334e8: e0bfff17 ldw r2,-4(fp) + 80334ec: 103fcc0e bge r2,zero,8033420 + 80334f0: 00000106 br 80334f8 + break; + 80334f4: 0001883a nop + } + panic("tcp_pulloutofband"); + 80334f8: 01020174 movhi r4,2053 + 80334fc: 212a9d04 addi r4,r4,-21900 + 8033500: 80271780 call 8027178 +} + 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 : + * 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 + 8033538: 8028cd40 call 8028cd4 + 803353c: 00008006 br 8033740 +#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 + { + if(rtt == 0) /* fast path for small round trip */ + 8033580: e0bffe17 ldw r2,-8(fp) + 8033584: 1000131e bne r2,zero,80335d4 + { + /* 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 + 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 + 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 + * 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 + 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 + 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 + 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 + * 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 + 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 + 8033714: e0bffd17 ldw r2,-12(fp) + 8033718: 00c00084 movi r3,2 + 803371c: 10c00815 stw r3,32(r2) + 8033720: 00000706 br 8033740 + 8033724: e0bffd17 ldw r2,-12(fp) + 8033728: 10800817 ldw r2,32(r2) + 803372c: 10802050 cmplti r2,r2,129 + 8033730: 1000031e bne r2,zero,8033740 + 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 : + + +#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 : + */ + + +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 + (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 + (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 + { + 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 + return TCP_MSS; /* user defined */ + 80337e4: 00816d04 movi r2,1460 + 80337e8: 00002506 br 8033880 +#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 + 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 + 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 + 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 + + 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 + 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 + { + 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 : + * 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 + { + 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 + { + if (win == 0) + 8033944: e0bffe17 ldw r2,-8(fp) + 8033948: 1000031e bne r2,zero,8033958 + win = 1; + 803394c: 00800044 movi r2,1 + 8033950: e0bffe15 stw r2,-8(fp) + 8033954: 00000406 br 8033968 + 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 + 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 + { + 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 + 80339d4: e0bffb15 stw r2,-20(fp) + } +#endif + + if (len < 0) + 80339d8: e0bfff17 ldw r2,-4(fp) + 80339dc: 1000090e bge r2,zero,8033a04 + * 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 + { + 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 + { + 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 + 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 + 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 + 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 + (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 + ((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 + ((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 + 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 + 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 + 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 + * 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 + { + 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 + goto send; + if ((idle || tp->t_flags & TF_NODELAY) && + 8033b3c: e0bff617 ldw r2,-40(fp) + 8033b40: 1000051e bne r2,zero,8033b58 + 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 + 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 + { + 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 + 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 + 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 + * 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 + { + 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 + 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 + 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 + * 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 + 8033c3c: e0bfea17 ldw r2,-88(fp) + 8033c40: 10800317 ldw r2,12(r2) + 8033c44: 1000071e bne r2,zero,8033c64 + 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 + { + 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 + } + + /* + * No reason to send a segment, just return. + */ + return (0); + 8033c64: 0005883a mov r2,zero + 8033c68: 0002ec06 br 803481c + goto send; + 8033c6c: 0001883a nop + 8033c70: 00001306 br 8033cc0 + goto send; + 8033c74: 0001883a nop + 8033c78: 00001106 br 8033cc0 + goto send; + 8033c7c: 0001883a nop + 8033c80: 00000f06 br 8033cc0 + goto send; + 8033c84: 0001883a nop + 8033c88: 00000d06 br 8033cc0 + goto send; + 8033c8c: 0001883a nop + 8033c90: 00000b06 br 8033cc0 + goto send; + 8033c94: 0001883a nop + 8033c98: 00000906 br 8033cc0 + goto send; + 8033c9c: 0001883a nop + 8033ca0: 00000706 br 8033cc0 + goto send; + 8033ca4: 0001883a nop + 8033ca8: 00000506 br 8033cc0 + goto send; + 8033cac: 0001883a nop + 8033cb0: 00000306 br 8033cc0 + goto send; + 8033cb4: 0001883a nop + 8033cb8: 00000106 br 8033cc0 + goto send; + 8033cbc: 0001883a nop + +send: + ENTER_CRIT_SECTION(tp); + 8033cc0: 8028e940 call 8028e94 + + /* 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 + { + /* find mbuf containing data to send (at "off") */ + while (sendm) /* loop through socket send list */ + 8033ce0: 00000a06 br 8033d0c + { + 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 + 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 + 8033d14: 00000106 br 8033d1c + break; + 8033d18: 0001883a nop + } + if (!sendm) { dtrap(); /* shouldn't happen */ } + 8033d1c: e0bff917 ldw r2,-28(fp) + 8033d20: 1000011e bne r2,zero,8033d28 + 8033d24: 8028cd40 call 8028cd4 + 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 + 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 + { + 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 + 8033d80: e0bff717 ldw r2,-36(fp) + 8033d84: 10801217 ldw r2,72(r2) + 8033d88: e0ffff17 ldw r3,-4(fp) + 8033d8c: 1880042e bgeu r3,r2,8033da0 + { + /* 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 + 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 + (((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 + { + 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 + 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 + (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 + { + 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 + 8033e3c: e0bff817 ldw r2,-32(fp) + 8033e40: 1000331e bne r2,zero,8033f10 + (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 + (((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 + (((sendm->m_data - sendm->m_base) & (ALIGN_TYPE - 1)) == 0) && + 8033e74: e0bffb17 ldw r2,-20(fp) + 8033e78: 1000251e bne r2,zero,8033f10 + (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 + 8033e88: e0bffc15 stw r2,-16(fp) + if (!m) + 8033e8c: e0bffc17 ldw r2,-16(fp) + 8033e90: 1000031e bne r2,zero,8033ea0 + { + EXIT_CRIT_SECTION(tp); + 8033e94: 8028ef40 call 8028ef4 + return (ENOBUFS); + 8033e98: 00801a44 movi r2,105 + 8033e9c: 00025f06 br 803481c + } + 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 + { + /* 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 + 8033f24: e0bffc15 stw r2,-16(fp) + if (m ==(struct mbuf *)NULL) + 8033f28: e0bffc17 ldw r2,-16(fp) + 8033f2c: 1000031e bne r2,zero,8033f3c + { + EXIT_CRIT_SECTION(tp); + 8033f30: 8028ef40 call 8028ef4 + return ENOBUFS; + 8033f34: 00801a44 movi r2,105 + 8033f38: 00023806 br 803481c + } + + 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 + { + 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 + 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 + { + m_freem(m); + 8033f98: e13ffc17 ldw r4,-16(fp) + 8033f9c: 8029cfc0 call 8029cfc + EXIT_CRIT_SECTION(tp); + 8033fa0: 8028ef40 call 8028ef4 + return ENOBUFS; + 8033fa4: 00801a44 movi r2,105 + 8033fa8: 00021c06 br 803481c + } + } + } + EXIT_CRIT_SECTION(tp); + 8033fac: 8028ef40 call 8028ef4 + + if (len) + 8033fb0: e0bfff17 ldw r2,-4(fp) + 8033fb4: 10002d26 beq r2,zero,803406c + { + 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 + 8033fd0: e0bfff17 ldw r2,-4(fp) + 8033fd4: 10800058 cmpnei r2,r2,1 + 8033fd8: 1000061e bne r2,zero,8033ff4 + 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 + 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 + { + 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 + 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 + } + } + 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 + { + 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 + } + 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 + 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 + 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 + 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 + 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 + { + panic("tcp_out- packet ptr underflow\n"); + 8034120: 01020174 movhi r4,2053 + 8034124: 212aa204 addi r4,r4,-21880 + 8034128: 80271780 call 8027178 + } + 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 + panic("tcp_output"); + 8034140: 01020174 movhi r4,2053 + 8034144: 212aaa04 addi r4,r4,-21848 + 8034148: 80271780 call 8027178 + + 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 + /* + * 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 + 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 + 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 + { + 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 + { + 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 + } + } +#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 + 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 + 8034290: e0bff015 stw r2,-64(fp) + if(ifp) + 8034294: e0bff017 ldw r2,-64(fp) + 8034298: 10000926 beq r2,zero,80342c0 + 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 + 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 + } + break; + } +#endif /* IP_V6 */ + default: + dtrap(); /* bad domain setting */ + 80342d4: 8028cd40 call 8028cd4 + 80342d8: 00000306 br 80342e8 + } + } + 80342dc: 0001883a nop + 80342e0: 00000106 br 80342e8 + 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 + { + struct mbuf * mopt; + + mopt = m_getwithdata(MT_TXDATA, MAXOPTLEN); + 80342f0: 01404004 movi r5,256 + 80342f4: 01000084 movi r4,2 + 80342f8: 8029a700 call 8029a70 + 80342fc: e0bfef15 stw r2,-68(fp) + if (mopt == NULL) + 8034300: e0bfef17 ldw r2,-68(fp) + 8034304: 1000041e bne r2,zero,8034318 + { + m_freem(m); + 8034308: e13ffc17 ldw r4,-16(fp) + 803430c: 8029cfc0 call 8029cfc + return (ENOBUFS); + 8034310: 00801a44 movi r2,105 + 8034314: 00014106 br 803481c + } + + /* 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_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 + + 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 + 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 + 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 + 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 + 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 + { + win = 0; + 8034420: e03ffe15 stw zero,-8(fp) + 8034424: 00000e06 br 8034460 + } + 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 + { + 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 + { + 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 + * 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 + 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 + 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 + 8034574: e0bfea17 ldw r2,-88(fp) + 8034578: 10800417 ldw r2,16(r2) + 803457c: 10004b1e bne r2,zero,80346ac + { + 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 + 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 + { + 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 + { + 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 + { + 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 + 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 + { + 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 + { + 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 + } + } + } + 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 + 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 + { + 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 + 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 + { + 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 + { + 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 + 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 + 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 + return (error); + 8034778: e0bfed17 ldw r2,-76(fp) + 803477c: 00002706 br 803481c + } + return (error); + 8034780: e0bfed17 ldw r2,-76(fp) + 8034784: 00002506 br 803481c + + /* + * 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 + 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 + 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 + goto again; + 8034814: 003c3006 br 80338d8 + 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 : + * 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 + panic("tcp_output REXMT"); + 8034870: 01020174 movhi r4,2053 + 8034874: 212aad04 addi r4,r4,-21836 + 8034878: 80271780 call 8027178 + /* + * 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 + 80348c4: e0bffe17 ldw r2,-8(fp) + 80348c8: 00c00284 movi r3,10 + 80348cc: 10c00415 stw r3,16(r2) + 80348d0: 00000706 br 80348f0 + 80348d4: e0bffe17 ldw r2,-8(fp) + 80348d8: 10800417 ldw r2,16(r2) + 80348dc: 10801e50 cmplti r2,r2,121 + 80348e0: 1000031e bne r2,zero,80348f0 + 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 + 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 : + * 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 + return 0; + 8034960: 0005883a mov r2,zero + 8034964: 00001f06 br 80349e4 + + /* 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 + { + mss = (u_short)tcp_mss(so); + 8034974: e13ffa17 ldw r4,-24(fp) + 8034978: 803379c0 call 803379c + 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 + } + 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 : + * 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 : + * 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 + { + n = (struct tcpiphdr *)TPH_ALLOC (sizeof (*n)); + 8034a74: 01000a04 movi r4,40 + 8034a78: 802982c0 call 802982c + 8034a7c: e0bfff15 stw r2,-4(fp) + if (n == NULL) + 8034a80: e0bfff17 ldw r2,-4(fp) + 8034a84: 1000021e bne r2,zero,8034a90 + return (0); + 8034a88: 0005883a mov r2,zero + 8034a8c: 00002906 br 8034b34 + } + 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 : + 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 + 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 + 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 + 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 + { + /* 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 + 8034be4: e0bffc15 stw r2,-16(fp) + if (m == NULL) + 8034be8: e0bffc17 ldw r2,-16(fp) + 8034bec: 1000ce26 beq r2,zero,8034f28 + 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 + { + panic("tcp_respond- packet ptr underflow\n"); + 8034c2c: 01020174 movhi r4,2053 + 8034c30: 212ab204 addi r4,r4,-21816 + 8034c34: 80271780 call 8027178 + } + 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 + 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 + } + 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 + domain = AF_INET; + 8034c90: 00800084 movi r2,2 + 8034c94: e0bffe15 stw r2,-8(fp) + 8034c98: 00000206 br 8034ca4 + 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->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 + 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_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 +#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 + { + 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 + } + 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 + + /* + * 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 + m_freem(m); + 8034ec0: e13ffc17 ldw r4,-16(fp) + 8034ec4: 8029cfc0 call 8029cfc + ip_output(m, tp->t_inpcb->inp_socket->so_optsPack); + else + ip_output(m, (struct ip_socopts *)NULL); + } + + break; + 8034ec8: 00001506 br 8034f20 + 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 + 8034ed8: e0bff717 ldw r2,-36(fp) + 8034edc: 10800d17 ldw r2,52(r2) + 8034ee0: 10800817 ldw r2,32(r2) + 8034ee4: 10000826 beq r2,zero,8034f08 + 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 + break; + 8034f04: 00000606 br 8034f20 + ip_output(m, (struct ip_socopts *)NULL); + 8034f08: 000b883a mov r5,zero + 8034f0c: e13ffc17 ldw r4,-16(fp) + 8034f10: 802a6580 call 802a658 + break; + 8034f14: 00000206 br 8034f20 + + break; + } +#endif /* IP_V6 */ + default: + dtrap(); + 8034f18: 8028cd40 call 8028cd4 + break; + 8034f1c: 0001883a nop + } + return; + 8034f20: 0001883a nop + 8034f24: 00000106 br 8034f2c + 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 : + * 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 + 8034f5c: e0bfff15 stw r2,-4(fp) + if (tp == NULL) + 8034f60: e0bfff17 ldw r2,-4(fp) + 8034f64: 1000021e bne r2,zero,8034f70 + return (struct tcpcb *)NULL; + 8034f68: 0005883a mov r2,zero + 8034f6c: 00003206 br 8035038 + 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 + 8034fe4: e0bfff17 ldw r2,-4(fp) + 8034fe8: 00c00084 movi r3,2 + 8034fec: 10c00815 stw r3,32(r2) + 8034ff0: 00000706 br 8035010 + 8034ff4: e0bfff17 ldw r2,-4(fp) + 8034ff8: 10800817 ldw r2,32(r2) + 8034ffc: 10802050 cmplti r2,r2,129 + 8035000: 1000031e bne r2,zero,8035010 + 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 : + * 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 + { + 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 + 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 + } + 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 +} + 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 : + * 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 + { + 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 + 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 + m_freem (m); + 8035154: e13ffc17 ldw r4,-16(fp) + 8035158: 8029cfc0 call 8029cfc + while (t != (struct tcpiphdr *)tp) + 803515c: e0ffff17 ldw r3,-4(fp) + 8035160: e0bffb17 ldw r2,-20(fp) + 8035164: 18bfef1e bne r3,r2,8035124 + } + if (tp->t_template) + 8035168: e0bffb17 ldw r2,-20(fp) + 803516c: 10800c17 ldw r2,48(r2) + 8035170: 10000426 beq r2,zero,8035184 + 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 + TCB_FREE (tp); + 8035184: e13ffb17 ldw r4,-20(fp) + 8035188: 80298600 call 8029860 + 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 + in_pcbdetach(inp); + 803519c: e13ffe17 ldw r4,-8(fp) + 80351a0: 80405b40 call 80405b4 + 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 : + * 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 + 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() */ + +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 + { + *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 + } + 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 : + * 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 + { + 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 + } + 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 : + * 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 + { + 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 + { + 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 + 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 + continue; + + for (i = 0; i < TCPT_NTIMERS; i++) + 8035394: e03fff15 stw zero,-4(fp) + 8035398: 00002a06 br 8035444 + { + 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 + 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 + { + /* 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 + 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 + 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 + } + } + } +#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 + { + 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 +#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 + { + 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 +#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 + 8035504: 00000506 br 803551c + continue; + 8035508: 0001883a nop + 803550c: 00000306 br 803551c + continue; + 8035510: 0001883a nop + 8035514: 00000106 br 803551c + 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 + +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_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 : + * 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 + 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 +} + 80355ac: 0001883a nop + 80355b0: e037883a mov sp,fp + 80355b4: df000017 ldw fp,0(sp) + 80355b8: dec00104 addi sp,sp,4 + 80355bc: f800283a ret + +080355c0 : + * 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 + 80355e4: e0bffc17 ldw r2,-16(fp) + 80355e8: 10800088 cmpgei r2,r2,2 + 80355ec: 1000031e bne r2,zero,80355fc + 80355f0: e0bffc17 ldw r2,-16(fp) + 80355f4: 10001a26 beq r2,zero,8035660 + 80355f8: 00010006 br 80359fc + 80355fc: e0bffc17 ldw r2,-16(fp) + 8035600: 108000a0 cmpeqi r2,r2,2 + 8035604: 1000b51e bne r2,zero,80358dc + 8035608: e0bffc17 ldw r2,-16(fp) + 803560c: 108000d8 cmpnei r2,r2,3 + 8035610: 1000fa1e bne r2,zero,80359fc + * 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 + 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 + { + 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 + tp = tcp_close(tp); + 8035650: e13ffd17 ldw r4,-12(fp) + 8035654: 80350e80 call 80350e8 + 8035658: e0bffd15 stw r2,-12(fp) + break; + 803565c: 0000e706 br 80359fc + * 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 + { + 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 + 80356c4: e0bffd15 stw r2,-12(fp) + break; + 80356c8: 0000cc06 br 80359fc + } + 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 + 803574c: e0bffd17 ldw r2,-12(fp) + 8035750: 00c00084 movi r3,2 + 8035754: 10c00815 stw r3,32(r2) + 8035758: 00000706 br 8035778 + 803575c: e0bffd17 ldw r2,-12(fp) + 8035760: 10800817 ldw r2,32(r2) + 8035764: 10802050 cmplti r2,r2,129 + 8035768: 1000031e bne r2,zero,8035778 + 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 + ((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 + { + 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 + { + 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 + 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 + 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 + break; + 803589c: 00005706 br 80359fc + /* + * 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 + 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 + tp->t_force = 0; + 80358d0: e0bffd17 ldw r2,-12(fp) + 80358d4: 10000a85 stb zero,42(r2) + break; + 80358d8: 00004806 br 80359fc + /* + * 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 + 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 + 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 + { + 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 + * 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 + + 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 + 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 + goto dropit; + 80359c8: 0001883a nop + 80359cc: 00000106 br 80359d4 + 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 + 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 : + +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 + 8035a54: e0bffd17 ldw r2,-12(fp) + 8035a58: 10000226 beq r2,zero,8035a64 + { + return (EINVAL); + 8035a5c: 00800584 movi r2,22 + 8035a60: 00019506 br 80360b8 + } + + if (inp) + 8035a64: e0bffc17 ldw r2,-16(fp) + 8035a68: 10000426 beq r2,zero,8035a7c + 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 + 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 + tp = NULL; /* stifle compiler warnings about using unassigned tp*/ + 8035a84: e03fff15 stw zero,-4(fp) + 8035a88: 00000306 br 8035a98 + else + { + dtrap(); /* programming error? */ + 8035a8c: 8028cd40 call 8028cd4 + return EINVAL; + 8035a90: 00800584 movi r2,22 + 8035a94: 00018806 br 80360b8 + } + } + + switch (req) + 8035a98: e0bffd17 ldw r2,-12(fp) + 8035a9c: 10800528 cmpgeui r2,r2,20 + 8035aa0: 10016f1e bne r2,zero,8036060 + 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 + 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 + { + error = EISCONN; + 8035b14: 00801fc4 movi r2,127 + 8035b18: e0bffe15 stw r2,-8(fp) + break; + 8035b1c: 00016506 br 80360b4 + } + error = tcp_attach(so); + 8035b20: e13ffa17 ldw r4,-24(fp) + 8035b24: 80360cc0 call 80360cc + 8035b28: e0bffe15 stw r2,-8(fp) + if (error) + 8035b2c: e0bffe17 ldw r2,-8(fp) + 8035b30: 10014f1e bne r2,zero,8036070 + 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 + 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 + 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 + * 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 + SETTP(tp, tcp_disconnect(tp)); + 8035b7c: e13fff17 ldw r4,-4(fp) + 8035b80: 80361e40 call 80361e4 + else + SETTP(tp, tcp_close(tp)); + break; + 8035b84: 00014b06 br 80360b4 + SETTP(tp, tcp_close(tp)); + 8035b88: e13fff17 ldw r4,-4(fp) + 8035b8c: 80350e80 call 80350e8 + break; + 8035b90: 00014806 br 80360b4 + /* 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 + { + error = in_pcbbind(inp, nam); + 8035ba8: e17ff817 ldw r5,-32(fp) + 8035bac: e13ffc17 ldw r4,-16(fp) + 8035bb0: 804060c0 call 804060c + 8035bb4: e0bffe15 stw r2,-8(fp) + break; + 8035bb8: 00013e06 br 80360b4 + { + error = ip6_pcbbind(inp, nam); + break; + } +#endif /* IP_V6 */ + dtrap(); /* not v4 or v6? */ + 8035bbc: 8028cd40 call 8028cd4 + error = EINVAL; + 8035bc0: 00800584 movi r2,22 + 8035bc4: e0bffe15 stw r2,-8(fp) + break; + 8035bc8: 00013a06 br 80360b4 + /* + * 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 + error = in_pcbbind(inp, (struct mbuf *)0); + 8035bdc: 000b883a mov r5,zero + 8035be0: e13ffc17 ldw r4,-16(fp) + 8035be4: 804060c0 call 804060c + 8035be8: e0bffe15 stw r2,-8(fp) + if (error == 0) + 8035bec: e0bffe17 ldw r2,-8(fp) + 8035bf0: 1001231e bne r2,zero,8036080 + 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 + * 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 + { + +#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 + 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 + 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 + 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 + break; + tp->t_template = tcp_template(tp); + 8035c44: e13fff17 ldw r4,-4(fp) + 8035c48: 8034a400 call 8034a40 + 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 + { + +#ifdef IP_V4 +#ifndef IP_V6 /* v4 only */ + in_pcbdisconnect(inp); + 8035c64: e13ffc17 ldw r4,-16(fp) + 8035c68: 80409fc0 call 80409fc +#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 + } + + soisconnecting(so); + 8035c78: e13ffa17 ldw r4,-24(fp) + 8035c7c: 802f1780 call 802f178 + 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 + 8035d10: e0bffe15 stw r2,-8(fp) + if (!error) + 8035d14: e0bffe17 ldw r2,-8(fp) + 8035d18: 1000df1e bne r2,zero,8036098 + 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 + + /* + * 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 + * 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 + break; + 8035d48: 0000da06 br 80360b4 + * 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 + { + 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 + !(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 + ) + { + 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 + dtrap(); + 8035dd8: 8028cd40 call 8028cd4 + } + 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 + + /* + * Mark the connection as being incapable of further output. + */ + case PRU_SHUTDOWN: + socantsendmore(so); + 8035df4: e13ffa17 ldw r4,-24(fp) + 8035df8: 802f7f40 call 802f7f4 + tp = tcp_usrclosed(tp); + 8035dfc: e13fff17 ldw r4,-4(fp) + 8035e00: 80362b00 call 80362b0 + 8035e04: e0bfff15 stw r2,-4(fp) + if (tp) + 8035e08: e0bfff17 ldw r2,-4(fp) + 8035e0c: 1000a426 beq r2,zero,80360a0 + error = tcp_output(tp); + 8035e10: e13fff17 ldw r4,-4(fp) + 8035e14: 80338940 call 8033894 + 8035e18: e0bffe15 stw r2,-8(fp) + break; + 8035e1c: 0000a006 br 80360a0 + + /* + * 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 + break; + 8035e28: 0000a206 br 80360b4 + /* + * 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 + { /* 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 + } + 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 + error = tcp_output(tp); + 8035e58: e13fff17 ldw r4,-4(fp) + 8035e5c: 80338940 call 8033894 + 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 + 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 + break; + 8035e84: 00008806 br 80360a8 + + /* + * 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 + break; + 8035e94: 00008706 br 80360b4 + + case PRU_SENSE: + /* ((struct stat *) m)->st_blksize = so->so_snd.sb_hiwat; */ + dtrap(); /* does this ever happen? */ + 8035e98: 8028cd40 call 8028cd4 + return (0); + 8035e9c: 0005883a mov r2,zero + 8035ea0: 00008506 br 80360b8 + + 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 + (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 +#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 +#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 + { + error = EINVAL; + 8035ee8: 00800584 movi r2,22 + 8035eec: e0bffe15 stw r2,-8(fp) + break; + 8035ef0: 00007006 br 80360b4 + } + 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 + { + error = EWOULDBLOCK; + 8035f08: 008002c4 movi r2,11 + 8035f0c: e0bffe15 stw r2,-8(fp) + break; + 8035f10: 00006806 br 80360b4 + } + 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 + 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 + + 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 + { /* 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 + } + 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 + 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 + { + m_freem(m); + 8035fa4: e13ff917 ldw r4,-28(fp) + 8035fa8: 8029cfc0 call 8029cfc + error = ENOBUFS; + 8035fac: 00801a44 movi r2,105 + 8035fb0: e0bffe15 stw r2,-8(fp) + break; + 8035fb4: 00003f06 br 80360b4 + * 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 + 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 + 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 + 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 + tp->t_force = 0; + 8036020: e0bfff17 ldw r2,-4(fp) + 8036024: 10000a85 stb zero,42(r2) + break; + 8036028: 00002206 br 80360b4 + 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(inp, nam); +#endif /* dual mode */ +#else /* IP_V6 */ + ip6_setsockaddr(inp, nam); +#endif + break; + 8036038: 00001e06 br 80360b4 + + 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(inp, nam); +#endif /* dual mode */ +#else /* IP_V6 */ + ip6_setpeeraddr(inp, nam); +#endif + break; + 8036048: 00001a06 br 80360b4 + + 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 +#ifdef DO_TCPTRACE + req |= (long)nam << 8; /* for debug's sake */ +#endif + break; + 803605c: 00001506 br 80360b4 + + default: + panic("tcp_usrreq"); + 8036060: 01020174 movhi r4,2053 + 8036064: 212ac304 addi r4,r4,-21748 + 8036068: 80271780 call 8027178 + 803606c: 00001106 br 80360b4 + break; + 8036070: 0001883a nop + 8036074: 00000f06 br 80360b4 + break; + 8036078: 0001883a nop + 803607c: 00000d06 br 80360b4 + break; + 8036080: 0001883a nop + 8036084: 00000b06 br 80360b4 + break; + 8036088: 0001883a nop + 803608c: 00000906 br 80360b4 + break; + 8036090: 0001883a nop + 8036094: 00000706 br 80360b4 + break; + 8036098: 0001883a nop + 803609c: 00000506 br 80360b4 + break; + 80360a0: 0001883a nop + 80360a4: 00000306 br 80360b4 + break; + 80360a8: 0001883a nop + 80360ac: 00000106 br 80360b4 + 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 : + * 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 + 80360ec: e0bffb17 ldw r2,-20(fp) + 80360f0: 10800b17 ldw r2,44(r2) + 80360f4: 10000b1e bne r2,zero,8036124 + { + 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 + 8036110: e0bfff15 stw r2,-4(fp) + if (error) + 8036114: e0bfff17 ldw r2,-4(fp) + 8036118: 10000226 beq r2,zero,8036124 + return (error); + 803611c: e0bfff17 ldw r2,-4(fp) + 8036120: 00002b06 br 80361d0 + } + 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 + 8036134: e0bfff15 stw r2,-4(fp) + if (error) + 8036138: e0bfff17 ldw r2,-4(fp) + 803613c: 10000226 beq r2,zero,8036148 + return (error); + 8036140: e0bfff17 ldw r2,-4(fp) + 8036144: 00002206 br 80361d0 + 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 + 803615c: e0bffd15 stw r2,-12(fp) + if (tp == 0) + 8036160: e0bffd17 ldw r2,-12(fp) + 8036164: 1000171e bne r2,zero,80361c4 + { + 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 + 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 + } + 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 : + * 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 + tp = tcp_close(tp); + 8036218: e13ffe17 ldw r4,-8(fp) + 803621c: 80350e80 call 80350e8 + 8036220: e0bffe15 stw r2,-8(fp) + 8036224: 00001c06 br 8036298 + 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 + 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 + tp = tcp_drop(tp, 0); + 8036250: 000b883a mov r5,zero + 8036254: e13ffe17 ldw r4,-8(fp) + 8036258: 803504c0 call 803504c + 803625c: e0bffe15 stw r2,-8(fp) + 8036260: 00000d06 br 8036298 + else + { + soisdisconnecting(so); + 8036264: e13fff17 ldw r4,-4(fp) + 8036268: 802f2ec0 call 802f2ec + 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 + tp = tcp_usrclosed(tp); + 803627c: e13ffe17 ldw r4,-8(fp) + 8036280: 80362b00 call 80362b0 + 8036284: e0bffe15 stw r2,-8(fp) + if (tp) + 8036288: e0bffe17 ldw r2,-8(fp) + 803628c: 10000226 beq r2,zero,8036298 + (void) tcp_output(tp); + 8036290: e13ffe17 ldw r4,-8(fp) + 8036294: 80338940 call 8033894 + } + 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 : + * 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 + 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 + 80362ec: 08036300 call 803630 + 80362f0: 08036300 call 803630 + 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 + 8036310: e0bfff15 stw r2,-4(fp) + break; + 8036314: 00000806 br 8036338 + + 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 + + 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 + 8036340: e0bfff17 ldw r2,-4(fp) + 8036344: 10800217 ldw r2,8(r2) + 8036348: 10800250 cmplti r2,r2,9 + 803634c: 1000051e bne r2,zero,8036364 + 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 + 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 : + * 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 + 8036390: e0bfff15 stw r2,-4(fp) + if (e) + 8036394: e0bfff17 ldw r2,-4(fp) + 8036398: 10000226 beq r2,zero,80363a4 + return e; + 803639c: e0bfff17 ldw r2,-4(fp) + 80363a0: 00000106 br 80363a8 + + 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 : + * 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 + 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 + return (tmp); + 80363e8: e0bfff17 ldw r2,-4(fp) + 80363ec: 00000606 br 8036408 + 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 + + 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 : + * 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 + + /* 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 + { + UNLOCK_NET_RESOURCE(NET_RESID); + 8036460: 0009883a mov r4,zero + 8036464: 8028ff40 call 8028ff4 + return ENOBUFS; + 8036468: 00801a44 movi r2,105 + 803646c: 00004d06 br 80365a4 + } + + /* 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 + 803647c: e0bffe15 stw r2,-8(fp) + if (!m_in) + 8036480: e0bffe17 ldw r2,-8(fp) + 8036484: 1000041e bne r2,zero,8036498 + { + UNLOCK_NET_RESOURCE(NET_RESID); + 8036488: 0009883a mov r4,zero + 803648c: 8028ff40 call 8028ff4 + return ENOBUFS; + 8036490: 00801a44 movi r2,105 + 8036494: 00004306 br 80365a4 + } + + /* 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 + 8036550: 1000081e bne r2,zero,8036574 + { + /* 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 + /* return error condition so caller can free the packet buffer */ + UNLOCK_NET_RESOURCE(NET_RESID); + 8036564: 0009883a mov r4,zero + 8036568: 8028ff40 call 8028ff4 + return ENOBUFS; + 803656c: 00801a44 movi r2,105 + 8036570: 00000c06 br 80365a4 + } + + 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 + + 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 + + UNLOCK_NET_RESOURCE(NET_RESID); + 8036598: 0009883a mov r4,zero + 803659c: 8028ff40 call 8028ff4 + 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 : + +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 + 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 + 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 + UNLOCK_NET_RESOURCE(NET_RESID); + 803667c: 0009883a mov r4,zero + 8036680: 8028ff40 call 8028ff4 + udpconn = udp_open(0L, 0, udp_socket(), udp_soinput, so); + 8036684: 803dc280 call 803dc28 + 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 + 80366ac: e0bfff15 stw r2,-4(fp) + LOCK_NET_RESOURCE(NET_RESID); + 80366b0: 0009883a mov r4,zero + 80366b4: 8028f380 call 8028f38 + 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 + return(EINVAL); + 80366c0: 00800584 movi r2,22 + 80366c4: 00004506 br 80367dc + return 0; + 80366c8: 0005883a mov r2,zero + 80366cc: 00004306 br 80367dc + case PRU_DETACH: + /* delete the NetPort UDP connection */ + udpconn = udp_lookup(so); + 80366d0: e13ffd17 ldw r4,-12(fp) + 80366d4: 80363bc0 call 80363bc + 80366d8: e0bfff15 stw r2,-4(fp) + if (!udpconn) + 80366dc: e0bfff17 ldw r2,-4(fp) + 80366e0: 1000021e bne r2,zero,80366ec + return(EINVAL); + 80366e4: 00800584 movi r2,22 + 80366e8: 00003c06 br 80367dc + /* unlock the net resource; UDP will immediatly re-lock it */ + UNLOCK_NET_RESOURCE(NET_RESID); + 80366ec: 0009883a mov r4,zero + 80366f0: 8028ff40 call 8028ff4 + udp_close(udpconn); + 80366f4: e13fff17 ldw r4,-4(fp) + 80366f8: 80404540 call 8040454 + LOCK_NET_RESOURCE(NET_RESID); + 80366fc: 0009883a mov r4,zero + 8036700: 8028f380 call 8028f38 + return 0; + 8036704: 0005883a mov r2,zero + 8036708: 00003406 br 80367dc + 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 + return(EINVAL); + 8036714: 00800584 movi r2,22 + 8036718: 00003006 br 80367dc +#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 + 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 + 803673c: 00002706 br 80367dc +#ifdef IP_V6 + if (so->so_domain == AF_INET6){ + return udp6_sockbind(so, nam, req); + } +#endif + dtrap(); /* invalid address */ + 8036740: 8028cd40 call 8028cd4 + return EINVAL; + 8036744: 00800584 movi r2,22 + 8036748: 00002406 br 80367dc + 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 + return(EINVAL); + 8036754: 00800584 movi r2,22 + 8036758: 00002006 br 80367dc +#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 + 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 + 803677c: 00001706 br 80367dc +#ifdef IP_V6 + if (so->so_domain == AF_INET6){ + return udp6_socksend(so, m, nam); + } +#endif + dtrap(); /* invalid address */ + 8036780: 8028cd40 call 8028cd4 + return EINVAL; + 8036784: 00800584 movi r2,22 + 8036788: 00001406 br 80367dc + + 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 + return(EINVAL); + 8036794: 00800584 movi r2,22 + 8036798: 00001006 br 80367dc +#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 + 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 + 80367bc: 00000706 br 80367dc +#ifdef IP_V6 + if (so->so_domain == AF_INET6){ + return udp6_sockaddr(so, nam, req); + } +#endif + dtrap(); /* invalid address */ + 80367c0: 8028cd40 call 8028cd4 + return EINVAL; + 80367c4: 00800584 movi r2,22 + 80367c8: 00000406 br 80367dc + + case PRU_DISCONNECT: + case PRU_RCVD: + dtrap(); + 80367cc: 8028cd40 call 8028cd4 + return 0; + 80367d0: 0005883a mov r2,zero + 80367d4: 00000106 br 80367dc + 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 : + +#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 + return(EINVAL); + 8036820: 00800584 movi r2,22 + 8036824: 0000a106 br 8036aac + 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 + return(EINVAL); + 8036838: 00800584 movi r2,22 + 803683c: 00009b06 br 8036aac + udpconn = udp_lookup(so); + 8036840: e13ff717 ldw r4,-36(fp) + 8036844: 80363bc0 call 80363bc + 8036848: e0bff915 stw r2,-28(fp) + if (!udpconn) + 803684c: e0bff917 ldw r2,-28(fp) + 8036850: 1000021e bne r2,zero,803685c + return(EINVAL); + 8036854: 00800584 movi r2,22 + 8036858: 00009406 br 8036aac + if (req == PRU_BIND) + 803685c: e0bff517 ldw r2,-44(fp) + 8036860: 10800098 cmpnei r2,r2,2 + 8036864: 1000521e bne r2,zero,80369b0 + * 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 + { + 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 + 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 + else + lport = udp_socket(); + 8036898: 803dc280 call 803dc28 + 803689c: e0bffe8d sth r2,-6(fp) + 80368a0: 00000b06 br 80368d0 + } + 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 + { + lhost = 0L; + 80368dc: e03ffc15 stw zero,-16(fp) + 80368e0: 00001606 br 803693c + } + 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 + 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 + 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 + 8036924: 00000106 br 803692c + break; + 8036928: 0001883a nop + if (ifp == NULL) + 803692c: e0bffb17 ldw r2,-20(fp) + 8036930: 1000021e bne r2,zero,803693c + return(EADDRNOTAVAIL); + 8036934: 00801f44 movi r2,125 + 8036938: 00005c06 br 8036aac + } + + /* 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 + for (udptmp = firstudp; udptmp; udptmp = udptmp->u_next) + 803694c: d0a09e17 ldw r2,-32136(gp) + 8036950: e0bfff15 stw r2,-4(fp) + 8036954: 00000d06 br 803698c + 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 + 803696c: e0ffff17 ldw r3,-4(fp) + 8036970: e0bff917 ldw r2,-28(fp) + 8036974: 18800226 beq r3,r2,8036980 + return(EADDRINUSE); + 8036978: 00801c04 movi r2,112 + 803697c: 00004b06 br 8036aac + 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 + /* 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 + 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 + fhost = 0L; + 80369e8: e03ffd15 stw zero,-12(fp) + 80369ec: 00000306 br 80369fc + 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 + 8036a04: e0bffc15 stw r2,-16(fp) + if (lhost == 0) + 8036a08: e0bffc17 ldw r2,-16(fp) + 8036a0c: 1000021e bne r2,zero,8036a18 + return(ENETUNREACH); + 8036a10: 00801c84 movi r2,114 + 8036a14: 00002506 br 8036aac + /* 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 + lport = udp_socket(); + 8036a2c: 803dc280 call 803dc28 + 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 + } + 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 : + +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 + 8036ae8: e0bffb15 stw r2,-20(fp) + if (!udpconn) + 8036aec: e0bffb17 ldw r2,-20(fp) + 8036af0: 1000041e bne r2,zero,8036b04 + { + m_free(m); + 8036af4: e13ff617 ldw r4,-40(fp) + 8036af8: 8029bf80 call 8029bf8 + /* 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 + } + + if (nam == NULL) /* no sendto() info passed, must be send() */ + 8036b04: e0bff517 ldw r2,-44(fp) + 8036b08: 10000e1e bne r2,zero,8036b44 + { + 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 + { + 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 + } + else + return (EINVAL); + 8036b3c: 00800584 movi r2,22 + 8036b40: 0000b606 br 8036e1c + } + 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 + { + dtrap(); + 8036b54: 8028cd40 call 8028cd4 + return (EINVAL); + 8036b58: 00800584 movi r2,22 + 8036b5c: 0000af06 br 8036e1c + } + 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 + 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 + 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 + return (EINVAL); + 8036bc8: 00800584 movi r2,22 + 8036bcc: 00009306 br 8036e1c + 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 + 8036be8: 1400032e bgeu r2,r16,8036bf8 + { + dtrap(); /* should never happen */ + 8036bec: 8028cd40 call 8028cd4 + return EMSGSIZE; /* try to recover */ + 8036bf0: 00801e84 movi r2,122 + 8036bf4: 00008906 br 8036e1c + } + 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 + 8036c0c: e0bff915 stw r2,-28(fp) + if (!pkt) + 8036c10: e0bff917 ldw r2,-28(fp) + 8036c14: 1000041e bne r2,zero,8036c28 + { + m_free(m); + 8036c18: e13ff617 ldw r4,-40(fp) + 8036c1c: 8029bf80 call 8029bf8 + return ENOBUFS; /* report buffer shortages */ + 8036c20: 00801a44 movi r2,105 + 8036c24: 00007d06 br 8036e1c + } + 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 + 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 + 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 + { +#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 + { + 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 + 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 + 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 + 8036cc4: 00001906 br 8036d2c + 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 + 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 + (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 + (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 + 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 + 8036d1c: 00000306 br 8036d2c + break; + 8036d20: 0001883a nop + 8036d24: 00000106 br 8036d2c + break; + 8036d28: 0001883a nop + } + if (ifp == NULL) + 8036d2c: e0bffc17 ldw r2,-16(fp) + 8036d30: 1000171e bne r2,zero,8036d90 + { + 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 + 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 + 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 + 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 + 8036d78: 00000106 br 8036d80 + break; + 8036d7c: 0001883a nop + if (ifp == NULL) + 8036d80: e0bffc17 ldw r2,-16(fp) + 8036d84: 1000021e bne r2,zero,8036d90 + return(EADDRNOTAVAIL); + 8036d88: 00801f44 movi r2,125 + 8036d8c: 00002306 br 8036e1c + } + 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 + 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 + 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 + 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 + 8036dfc: e0bff815 stw r2,-32(fp) + LOCK_NET_RESOURCE(NET_RESID); + 8036e00: 0009883a mov r4,zero + 8036e04: 8028f380 call 8028f38 + if (e < 0) + 8036e08: e0bff817 ldw r2,-32(fp) + 8036e0c: 1000020e bge r2,zero,8036e18 + return(e); + 8036e10: e0bff817 ldw r2,-32(fp) + 8036e14: 00000106 br 8036e1c + 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 : + +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 + return(EINVAL); + 8036e64: 00800584 movi r2,22 + 8036e68: 00003706 br 8036f48 + udpconn = udp_lookup(so); + 8036e6c: e13ffd17 ldw r4,-12(fp) + 8036e70: 80363bc0 call 80363bc + 8036e74: e0bffe15 stw r2,-8(fp) + if (!udpconn) + 8036e78: e0bffe17 ldw r2,-8(fp) + 8036e7c: 1000021e bne r2,zero,8036e88 + return(EINVAL); + 8036e80: 00800584 movi r2,22 + 8036e84: 00003006 br 8036f48 + 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 + { + 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 + } + 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 : +#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 + { + for(i=0;i + /* + * 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 + "\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 + "\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 + 8037064: 00000d06 br 803709c + "\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 + } +#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 : +{ + 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 + 80370cc: d0a02717 ldw r2,-32612(gp) + 80370d0: 103ee83a callr r2 + 80370d4: 00000106 br 80370dc + 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 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 + 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 + 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 + /* + * 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 + 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 + 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 + if (rval < 0) + 803716c: e0bffe17 ldw r2,-8(fp) + 8037170: 1000070e bge r2,zero,8037190 + { + ALT_ERRNO = -rval; + 8037174: 80370b40 call 80370b4 + 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 + } + return 0; + 8037190: 0005883a mov r2,zero + 8037194: 00000506 br 80371ac + } + else + { + ALT_ERRNO = EBADFD; + 8037198: 80370b40 call 80370b4 + 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 : + * + * 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_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 + * 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_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 : + * 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 : +{ + 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 + 803727c: d0a02717 ldw r2,-32612(gp) + 8037280: 103ee83a callr r2 + 8037284: 00000106 br 803728c + 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 : +/* + * + */ + +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 + 80372c0: e0bffd17 ldw r2,-12(fp) + 80372c4: 10800217 ldw r2,8(r2) + 80372c8: 1000061e bne r2,zero,80372e4 + { + ALT_ERRNO = EINVAL; + 80372cc: 80372640 call 8037264 + 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 + + /* + * 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 : + * "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 + 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 + /* + * 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 + 8037458: 1000021e bne r2,zero,8037464 + { + /* match found */ + + return next; + 803745c: e0bfff17 ldw r2,-4(fp) + 8037460: 00000706 br 8037480 + } + 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 + } + + /* 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 : + * @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 +} + 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 : + * @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 : + * @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 : + * @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 : + * @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 + 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 + 80376d8: e0bffe17 ldw r2,-8(fp) + 80376dc: 100b883a mov r5,r2 + 80376e0: e13ffa17 ldw r4,-24(fp) + 80376e4: 80374e40 call 80374e4 + 80376e8: 00000406 br 80376fc + 80376ec: e0bffe17 ldw r2,-8(fp) + 80376f0: 100b883a mov r5,r2 + 80376f4: e13ffa17 ldw r4,-24(fp) + 80376f8: 803756c0 call 803756c + 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 : + * 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 + 8037758: e0bfff15 stw r2,-4(fp) + + if (old >= 0) + 803775c: e0bfff17 ldw r2,-4(fp) + 8037760: 10001716 blt r2,zero,80377c0 + { + 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 + } +} + 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 : + */ + +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_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_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 +} + 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 : +{ + 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 + 803786c: d0a02717 ldw r2,-32612(gp) + 8037870: 103ee83a callr r2 + 8037874: 00000106 br 803787c + 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 : + * 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 + { + 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_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_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 + { + return -EACCES; + 8037910: 00bffcc4 movi r2,-13 + 8037914: 00000806 br 8037938 + 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 + } + } + + /* 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 : + * + * 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 + 8037984: e0bfff15 stw r2,-4(fp) + 8037988: e0bfff17 ldw r2,-4(fp) + 803798c: 1000051e bne r2,zero,80379a4 + { + /* No matching device, so try the filesystem list */ + + dev = alt_find_file (file); + 8037990: e13ffa17 ldw r4,-24(fp) + 8037994: 80428180 call 8042818 + 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 + { + if ((index = alt_get_fd (dev)) < 0) + 80379ac: e13fff17 ldw r4,-4(fp) + 80379b0: 80429200 call 8042920 + 80379b4: e0bffe15 stw r2,-8(fp) + 80379b8: e0bffe17 ldw r2,-8(fp) + 80379bc: 1000030e bge r2,zero,80379cc + { + status = index; + 80379c0: e0bffe17 ldw r2,-8(fp) + 80379c4: e0bffd15 stw r2,-12(fp) + 80379c8: 00002306 br 8037a58 + } + 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 + 8037a04: e13ffb17 ldw r4,-20(fp) + 8037a08: 80378900 call 8037890 + 8037a0c: e0bffd15 stw r2,-12(fp) + 8037a10: e0bffd17 ldw r2,-12(fp) + 8037a14: 10001016 blt r2,zero,8037a58 + /* + * 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 + 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 + 8037a44: 0005883a mov r2,zero + 8037a48: e0bffd15 stw r2,-12(fp) + 8037a4c: 00000206 br 8037a58 + } + } + } + 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 + { + alt_release_fd (index); + 8037a60: e13ffe17 ldw r4,-8(fp) + 8037a64: 8037e300 call 8037e30 + ALT_ERRNO = -status; + 8037a68: 80378540 call 8037854 + 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 + } + + /* 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 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 + { + /* 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_putchar(c); + 8037adc: e0bffec7 ldb r2,-5(fp) + 8037ae0: 1009883a mov r4,r2 + 8037ae4: 8037cc80 call 8037cc8 + 8037ae8: 00006806 br 8037c8c + } + 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 + { + if (c == '%') + 8037b08: e0bffec7 ldb r2,-5(fp) + 8037b0c: 10800958 cmpnei r2,r2,37 + 8037b10: 1000041e bne r2,zero,8037b24 + { + /* Process "%" escape sequence. */ + alt_putchar(c); + 8037b14: e0bffec7 ldb r2,-5(fp) + 8037b18: 1009883a mov r4,r2 + 8037b1c: 8037cc80 call 8037cc8 + 8037b20: 00005a06 br 8037c8c + } + else if (c == 'c') + 8037b24: e0bffec7 ldb r2,-5(fp) + 8037b28: 108018d8 cmpnei r2,r2,99 + 8037b2c: 1000081e bne r2,zero,8037b50 + { + 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 + 8037b4c: 00004f06 br 8037c8c + } + else if (c == 'x') + 8037b50: e0bffec7 ldb r2,-5(fp) + 8037b54: 10801e18 cmpnei r2,r2,120 + 8037b58: 1000341e bne r2,zero,8037c2c + { + /* 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_putchar('0'); + 8037b78: 01000c04 movi r4,48 + 8037b7c: 8037cc80 call 8037cc8 + continue; + 8037b80: 00004206 br 8037c8c + } + + /* 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 + 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 + + /* Print digits. */ + for (; digit_shift >= 0; digit_shift -= 4) + 8037bb8: 00001906 br 8037c20 + { + 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 + 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 + 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 + 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 + 8037c28: 00001806 br 8037c8c + } + } + else if (c == 's') + 8037c2c: e0bffec7 ldb r2,-5(fp) + 8037c30: 10801cd8 cmpnei r2,r2,115 + 8037c34: 1000151e bne r2,zero,8037c8c + { + /* 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_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 + 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 + 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 + } + } +#ifdef ALT_SEMIHOSTING + alt_putbufflush(); +#endif +} + 8037ca8: 00000106 br 8037cb0 + 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 : + * 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 +#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 : +{ + 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 + 8037d10: d0a02717 ldw r2,-32612(gp) + 8037d14: 103ee83a callr r2 + 8037d18: 00000106 br 8037d20 + 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 : +} + +#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 + 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 + 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 + * 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 + (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 + { + 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_ERRNO = -rval; + 8037dd0: 8037cf80 call 8037cf8 + 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 + } + return rval; + 8037dec: e0bffe17 ldw r2,-8(fp) + 8037df0: 00000a06 br 8037e1c + } + else + { + ALT_ERRNO = EACCES; + 8037df4: 8037cf80 call 8037cf8 + 8037df8: 1007883a mov r3,r2 + 8037dfc: 00800344 movi r2,13 + 8037e00: 18800015 stw r2,0(r3) + 8037e04: 00000406 br 8037e18 + } + } + else + { + ALT_ERRNO = EBADFD; + 8037e08: 8037cf80 call 8037cf8 + 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 : + * 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_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 : + * 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 : + * 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() 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 + { + 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 + 8037f9c: d0a08e17 ldw r2,-32200(gp) + 8037fa0: 1000021e bne r2,zero,8037fac + { + 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 + 8037fbc: e0bfff17 ldw r2,-4(fp) + 8037fc0: 10800403 ldbu r2,16(r2) + 8037fc4: 10803fcc andi r2,r2,255 + 8037fc8: 1000191e bne r2,zero,8038030 + { + 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_alarm_stop (alarm); + 8037ff0: e13fff17 ldw r4,-4(fp) + 8037ff4: 8037ebc0 call 8037ebc + 8037ff8: 00000d06 br 8038030 + } + 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 + { + 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 + + /* + * Update the operating system specific timer facilities. + */ + + ALT_OS_TIME_TICK(); + 8038044: 8010ad80 call 8010ad8 +} + 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 : + * 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 +#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 : + * 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 + 80380e0: e0bffd15 stw r2,-12(fp) + + if (ptr == NULL) { + 80380e4: e0bffd17 ldw r2,-12(fp) + 80380e8: 1000021e bne r2,zero,80380f4 + return NULL; /* Out of memory */ + 80380ec: 0005883a mov r2,zero + 80380f0: 00000506 br 8038108 + } + + /* 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 + + 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 : +#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 + { + return alt_busy_sleep (us); + 8038140: e13ffc17 ldw r4,-16(fp) + 8038144: 8036f5c0 call 8036f5c + 8038148: 00003306 br 8038218 + 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 + { + OSTimeDly(0xffff); + 80381b0: 013fffd4 movui r4,65535 + 80381b4: 801730c0 call 801730c + 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 + } + + OSTimeDly ((INT16U) (ticks)); + 80381d8: e0bffe17 ldw r2,-8(fp) + 80381dc: 10bfffcc andi r2,r2,65535 + 80381e0: 1009883a mov r4,r2 + 80381e4: 801730c0 call 801730c + /* + * 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 + + 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 : +{ + 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 + 8038248: d0a02717 ldw r2,-32612(gp) + 803824c: 103ee83a callr r2 + 8038250: 00000106 br 8038258 + 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 : +} + +#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 + 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 + 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 + * 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 + 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_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_ERRNO = -rval; + 8038304: 80382300 call 8038230 + 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 + } + return rval; + 8038320: e0bffe17 ldw r2,-8(fp) + 8038324: 00000a06 br 8038350 + } + else + { + ALT_ERRNO = EACCES; + 8038328: 80382300 call 8038230 + 803832c: 1007883a mov r3,r2 + 8038330: 00800344 movi r2,13 + 8038334: 18800015 stw r2,0(r3) + 8038338: 00000406 br 803834c + } + } + else + { + ALT_ERRNO = EBADFD; + 803833c: 80382300 call 8038230 + 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 : +/* + * 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 : + + /* + * 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 + /* + * 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 : + + /* + * 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 + + /* + * 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 + +08038434 : + +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 : + * 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 + 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 : +* +* 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 : +* +* 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 : +* 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 : +* +* 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 : +#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 +#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 : + +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 : + +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 : + +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 : + +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 : + * 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 + 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 +#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 + 8038710: e0bffd15 stw r2,-12(fp) + if (msg) + 8038714: e0bffd17 ldw r2,-12(fp) + 8038718: 10000226 beq r2,zero,8038724 + panic(msg); + 803871c: e13ffd17 ldw r4,-12(fp) + 8038720: 80271780 call 8027178 + printf("global_log_create() failed\n"); + } + glog_with_type(LOG_TYPE_INFO, "INICHE LOG initialized", 1); +#endif + + msg = ip_startup(); + 8038724: 8024f800 call 8024f80 + 8038728: e0bffd15 stw r2,-12(fp) + if (msg) + 803872c: e0bffd17 ldw r2,-12(fp) + 8038730: 10000726 beq r2,zero,8038750 + { + 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 + panic("IP"); + 8038744: 01020174 movhi r4,2053 + 8038748: 212aec04 addi r4,r4,-21584 + 803874c: 80271780 call 8027178 + } + +#if defined(MEMDEV_SIZE) && defined(VFS_FILES) + init_memdev(); /* init the mem and null test devices */ + 8038750: 803f5980 call 803f598 +#endif + +#ifdef IP_MULTICAST +#ifdef INCLUDE_TCP + /* call the IP multicast test program */ + u_mctest_init(); + 8038754: 803eef80 call 803eef8 + + /* 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 + 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 + +#ifndef SUPERLOOP + /* call this per-target routine after basic tasks & net are up */ + msg = post_task_setup(); + 8038790: 80295e80 call 80295e8 + 8038794: e0bffd15 stw r2,-12(fp) + if (msg) + 8038798: e0bffd17 ldw r2,-12(fp) + 803879c: 10000226 beq r2,zero,80387a8 + panic(msg); + 80387a0: e13ffd17 ldw r4,-12(fp) + 80387a4: 80271780 call 8027178 + 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 : + * 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 + 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 + dprintf(prompt); + 8038828: d0a02c17 ldw r2,-32592(gp) + 803882c: 1009883a mov r4,r2 + 8038830: 8002c780 call 8002c78 +} + 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 : + * 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 + { + 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 + 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(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 + 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(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 + 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 + 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 + } +#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(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(pio, "common host parameter: %s\n", print_ipad(activehost)); + 8038954: d0a08f17 ldw r2,-32196(gp) + 8038958: 1009883a mov r4,r2 + 803895c: 8026fbc0 call 8026fbc + 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(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 +#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 + + 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 : + * 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 : + +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 + 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 + 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 + 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 : + * 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 : +#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 + 8038a74: e0bfff15 stw r2,-4(fp) + if (e != 0) + 8038a78: e0bfff17 ldw r2,-4(fp) + 8038a7c: 10000626 beq r2,zero,8038a98 + { + dprintf("VFS Module prep failed\n"); + 8038a80: 01020174 movhi r4,2053 + 8038a84: 212b3404 addi r4,r4,-21296 + 8038a88: 8002d9c0 call 8002d9c + panic("prep_modules"); + 8038a8c: 01020174 movhi r4,2053 + 8038a90: 212b3a04 addi r4,r4,-21272 + 8038a94: 80271780 call 8027178 + { + 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 : + * 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 +#endif + +#ifdef INICHE_TIMERS /* interval timers? */ + check_interval_timers(); + 8038ac4: 8038b280 call 8038b28 +#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 + igmp_fasttimo(); + 8038ad4: 80254ec0 call 80254ec +#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 + (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 + { + 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 + (*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 : + +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 + { + /* 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 + { + 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 + { + 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 + 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 + { + 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 + 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 + break; + } + } + } +} + 8038c54: 00000106 br 8038c5c + 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 : + * 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 + { + 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 + { + /* 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 + 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 + } + } + 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 : + */ + + +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 + { + 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 + { + 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 + 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 + } + } + dtrap(); /* timer to kill not found */ + 8038e1c: 8028cd40 call 8028cd4 + 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 : +#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 : + */ + + +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 + +#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 +#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(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 +} + 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 : + * (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 + { + 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 + 8038f30: 00000c06 br 8038f64 + } + 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 + } +} + 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 : +}; +#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 + 8038ff4: d0a06617 ldw r2,-32360(gp) + 8038ff8: 1080800c andi r2,r2,512 + 8038ffc: 10001226 beq r2,zero,8039048 + 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 +#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 + { + 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 + 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 + 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 + { + 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 + 8039110: d0a06617 ldw r2,-32360(gp) + 8039114: 1080800c andi r2,r2,512 + 8039118: 10000c26 beq r2,zero,803914c + { + 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 + 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 + 8039144: e13ff317 ldw r4,-52(fp) + 8039148: 803b0cc0 call 803b0cc + } +#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 + pk_free(p); + 8039168: e13ff317 ldw r4,-52(fp) + 803916c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8039170: 01000084 movi r4,2 + 8039174: 8028ff40 call 8028ff4 + return ENP_BAD_HEADER; + 8039178: 00bff804 movi r2,-32 + 803917c: 00022e06 br 8039a38 + } + + 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 + 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 + 803921c: d0a06617 ldw r2,-32360(gp) + 8039220: 1080800c andi r2,r2,512 + 8039224: 10001126 beq r2,zero,803926c + 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 +#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 + { + 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 + 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 + 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 +#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 +#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 + { + 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 + } + 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 + 8039428: e0bff715 stw r2,-36(fp) + if (i < 0) + 803942c: e0bff717 ldw r2,-36(fp) + 8039430: 1000060e bge r2,zero,803944c + { +#ifdef NPDEBUG + if (NDEBUG & (UPCTRACE)) + 8039434: d0a06617 ldw r2,-32360(gp) + 8039438: 1081000c andi r2,r2,1024 + 803943c: 10000326 beq r2,zero,803944c + dprintf("icmp: reply failed\n"); + 8039440: 01020174 movhi r4,2053 + 8039444: 212b6704 addi r4,r4,-21092 + 8039448: 8002d9c0 call 8002d9c +#endif + } + /* reused p will be freed by net->xxx_send() */ + return 0; + 803944c: 0005883a mov r2,zero + 8039450: 00017906 br 8039a38 + 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 + 8039470: 00017106 br 8039a38 + 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 + { + dprintf("ICMP: got dest unreachable type "); + 803949c: 01020174 movhi r4,2053 + 80394a0: 212b6c04 addi r4,r4,-21072 + 80394a4: 8002c780 call 8002c78 + 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 + 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 + } +#endif /* NPDEBUG */ + icmp_du(p, pdp); + 8039558: e17ff617 ldw r5,-40(fp) + 803955c: e13ff317 ldw r4,-52(fp) + 8039560: 803a01c0 call 803a01c + break; + 8039564: 00013306 br 8039a34 + 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 + { + 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 + if (NDEBUG & DUMP) ip_dump(p); + 80395cc: d0a06617 ldw r2,-32360(gp) + 80395d0: 1080008c andi r2,r2,2 + 80395d4: 10000226 beq r2,zero,80395e0 + 80395d8: e13ff317 ldw r4,-52(fp) + 80395dc: 803b0cc0 call 803b0cc + } +#endif /* NPDEBUG */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 80395e0: 01000084 movi r4,2 + 80395e4: 8028f380 call 8028f38 + pk_free(p); + 80395e8: e13ff317 ldw r4,-52(fp) + 80395ec: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 80395f0: 01000084 movi r4,2 + 80395f4: 8028ff40 call 8028ff4 + break; + 80395f8: 00010e06 br 8039a34 + 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 + { + 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 + 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 + } +#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 + 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 + net_num(p->net), IPRP_ICMP); +#endif /* IP_ROUTING */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 803970c: 01000084 movi r4,2 + 8039710: 8028f380 call 8028f38 + pk_free(p); + 8039714: e13ff317 ldw r4,-52(fp) + 8039718: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803971c: 01000084 movi r4,2 + 8039720: 8028ff40 call 8028ff4 + break; + 8039724: 0000c306 br 8039a34 + 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 + { + 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 + 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 + if (NDEBUG & DUMP) ip_dump(p); + 80397f8: d0a06617 ldw r2,-32360(gp) + 80397fc: 1080008c andi r2,r2,2 + 8039800: 10000226 beq r2,zero,803980c + 8039804: e13ff317 ldw r4,-52(fp) + 8039808: 803b0cc0 call 803b0cc + } +#endif /* NPDEBUG */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 803980c: 01000084 movi r4,2 + 8039810: 8028f380 call 8028f38 + pk_free(p); + 8039814: e13ff317 ldw r4,-52(fp) + 8039818: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803981c: 01000084 movi r4,2 + 8039820: 8028ff40 call 8028ff4 + break; + 8039824: 00008306 br 8039a34 + 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 + dprintf("ICMP: got param problem message\n"); + 8039848: 01020174 movhi r4,2053 + 803984c: 212ba504 addi r4,r4,-20844 + 8039850: 8002d9c0 call 8002d9c + if (NDEBUG & DUMP) + 8039854: d0a06617 ldw r2,-32360(gp) + 8039858: 1080008c andi r2,r2,2 + 803985c: 10000226 beq r2,zero,8039868 + { + ip_dump(p); + 8039860: e13ff317 ldw r4,-52(fp) + 8039864: 803b0cc0 call 803b0cc + } +#endif /* NPDEBUG */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 8039868: 01000084 movi r4,2 + 803986c: 8028f380 call 8028f38 + pk_free(p); + 8039870: e13ff317 ldw r4,-52(fp) + 8039874: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8039878: 01000084 movi r4,2 + 803987c: 8028ff40 call 8028ff4 + break; + 8039880: 00006c06 br 8039a34 + 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 + dprintf("ICMP: got timestamp request\n"); + 80398a4: 01020174 movhi r4,2053 + 80398a8: 212bad04 addi r4,r4,-20812 + 80398ac: 8002d9c0 call 8002d9c +#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 + 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 + 8039970: e0bff715 stw r2,-36(fp) + if (i < 0) + 8039974: e0bff717 ldw r2,-36(fp) + 8039978: 1000060e bge r2,zero,8039994 + { +#ifdef NPDEBUG + if (NDEBUG & UPCTRACE) + 803997c: d0a06617 ldw r2,-32360(gp) + 8039980: 1081000c andi r2,r2,1024 + 8039984: 10000326 beq r2,zero,8039994 + dprintf("icmp: can't send timestamp reply\n"); + 8039988: 01020174 movhi r4,2053 + 803998c: 212bb404 addi r4,r4,-20784 + 8039990: 8002d9c0 call 8002d9c +#endif /* NPDEBUG */ + } + /* re-used packet was pk_free()d by net->send() */ + return (0); + 8039994: 0005883a mov r2,zero + 8039998: 00002706 br 8039a38 + 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 + dprintf("icmp: got info request\n"); + 80399a8: 01020174 movhi r4,2053 + 80399ac: 212bbd04 addi r4,r4,-20748 + 80399b0: 8002d9c0 call 8002d9c +#endif /* NPDEBUG */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 80399b4: 01000084 movi r4,2 + 80399b8: 8028f380 call 8028f38 + pk_free(p); + 80399bc: e13ff317 ldw r4,-52(fp) + 80399c0: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 80399c4: 01000084 movi r4,2 + 80399c8: 8028ff40 call 8028ff4 + break; + 80399cc: 00001906 br 8039a34 +#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 + { + 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 + if (NDEBUG & DUMP) ip_dump(p); + 8039a00: d0a06617 ldw r2,-32360(gp) + 8039a04: 1080008c andi r2,r2,2 + 8039a08: 10000226 beq r2,zero,8039a14 + 8039a0c: e13ff317 ldw r4,-52(fp) + 8039a10: 803b0cc0 call 803b0cc + } +#endif /* NPDEBUG */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 8039a14: 01000084 movi r4,2 + 8039a18: 8028f380 call 8028f38 + pk_free(p); + 8039a1c: e13ff317 ldw r4,-52(fp) + 8039a20: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8039a24: 01000084 movi r4,2 + 8039a28: 8028ff40 call 8028ff4 + return ENP_NOT_MINE; + 8039a2c: 00800084 movi r2,2 + 8039a30: 00000106 br 8039a38 + } +#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(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 + 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 +#endif /* NPDEBUG */ + + LOCK_NET_RESOURCE(FREEQ_RESID); + 8039ae0: 01000084 movi r4,2 + 8039ae4: 8028f380 call 8028f38 + p = pk_alloc(512 + IPHSIZ); /* get packet to send icmp dest unreachable */ + 8039ae8: 01008504 movi r4,532 + 8039aec: 80284340 call 8028434 + 8039af0: e0bfff15 stw r2,-4(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8039af4: 01000084 movi r4,2 + 8039af8: 8028ff40 call 8028ff4 + + if (p == NULL) + 8039afc: e0bfff17 ldw r2,-4(fp) + 8039b00: 10000c1e bne r2,zero,8039b34 + { +#ifdef NPDEBUG + if (NDEBUG & IPTRACE) + 8039b04: d0a06617 ldw r2,-32360(gp) + 8039b08: 1080800c andi r2,r2,512 + 8039b0c: 10000326 beq r2,zero,8039b1c + dprintf("icmp: can't alloc pkt\n"); + 8039b10: 01020174 movhi r4,2053 + 8039b14: 212bea04 addi r4,r4,-20568 + 8039b18: 8002d9c0 call 8002d9c +#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 + } + + /* 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 + 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 + 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 + 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 + + 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 + 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 + 8039ca8: e0bffc15 stw r2,-16(fp) + if (i < 0) + 8039cac: e0bffc17 ldw r2,-16(fp) + 8039cb0: 10000c0e bge r2,zero,8039ce4 + { + 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 + dprintf("ICMP: Can't send dest unreachable\n"); + 8039cd4: 01020174 movhi r4,2053 + 8039cd8: 212bf004 addi r4,r4,-20544 + 8039cdc: 8002d9c0 call 8002d9c +#endif /* NPDEBUG */ + return; + 8039ce0: 00000c06 br 8039d14 + } + 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 + 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 : + * + * 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 + 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 +#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 + * 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 + 8039e50: e0bffe15 stw r2,-8(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 8039e54: 01000084 movi r4,2 + 8039e58: 8028ff40 call 8028ff4 + + if (p == NULL) + 8039e5c: e0bffe17 ldw r2,-8(fp) + 8039e60: 10000c1e bne r2,zero,8039e94 + { +#ifdef NPDEBUG + if (NDEBUG & IPTRACE) + 8039e64: d0a06617 ldw r2,-32360(gp) + 8039e68: 1080800c andi r2,r2,512 + 8039e6c: 10000326 beq r2,zero,8039e7c + dprintf("icmp: can't alloc pkt\n"); + 8039e70: 01020174 movhi r4,2053 + 8039e74: 212bea04 addi r4,r4,-20568 + 8039e78: 8002d9c0 call 8002d9c +#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 + } + + /* 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 + + 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 + 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 + 8039f98: e0bffb15 stw r2,-20(fp) + if (i < 0) + 8039f9c: e0bffb17 ldw r2,-20(fp) + 8039fa0: 10000c0e bge r2,zero,8039fd4 + { + 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 + dprintf("ICMP: Can't send Time Exceeded\n"); + 8039fc4: 01020174 movhi r4,2053 + 8039fc8: 212c0904 addi r4,r4,-20444 + 8039fcc: 8002d9c0 call 8002d9c +#endif /* NPDEBUG */ + return; + 8039fd0: 00000c06 br 803a004 + } + 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 + 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 : + * 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 + 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 +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 : + * 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 + 803a088: 10000526 beq r2,zero,803a0a0 + { +#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 +#endif + return(1); + 803a098: 00800044 movi r2,1 + 803a09c: 00002506 br 803a134 + } + + /* 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 + 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 + 803a0dc: d0a09515 stw r2,-32172(gp) + if (!rt_mib) + 803a0e0: d0a09517 ldw r2,-32172(gp) + 803a0e4: 1000051e bne r2,zero,803a0fc + { +#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 +#endif /* NPDEBUG */ + return(ENP_NOMEM); + 803a0f4: 00bffb04 movi r2,-20 + 803a0f8: 00000e06 br 803a134 + } + + 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 + 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 : + * 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 + { + /* 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 + 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 + 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 + } + 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 + 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 : + * 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 + { + if (p->imo != NULL) + 803a338: e0bff617 ldw r2,-40(fp) + 803a33c: 10800b17 ldw r2,44(r2) + 803a340: 10001426 beq r2,zero,803a394 + 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 + 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 + 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 + 803a384: 1007883a mov r3,r2 + 803a388: e0bff617 ldw r2,-40(fp) + 803a38c: 10c00615 stw r3,24(r2) + 803a390: 00001706 br 803a3f0 + else + { + for (i = 0; i < ifNumber; i++) + 803a394: e03fff15 stw zero,-4(fp) + 803a398: 00001206 br 803a3e4 + 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 + { + 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 + 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 + } + } + + /* 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 + 803a3fc: e0bff617 ldw r2,-40(fp) + 803a400: 10800617 ldw r2,24(r2) + 803a404: 10802b17 ldw r2,172(r2) + 803a408: 10002a1e bne r2,zero,803a4b4 + { +#ifdef NPDEBUG + if (NDEBUG & (IPTRACE|PROTERR)) + 803a40c: d0a06617 ldw r2,-32360(gp) + 803a410: 1080840c andi r2,r2,528 + 803a414: 10001a26 beq r2,zero,803a480 + { + 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 + dtrap(); + 803a47c: 8028cd40 call 8028cd4 + } +#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 + pk_free(p); + 803a49c: e13ff617 ldw r4,-40(fp) + 803a4a0: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803a4a4: 01000084 movi r4,2 + 803a4a8: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return (ENP_NO_ROUTE); + 803a4ac: 00bff7c4 movi r2,-33 + 803a4b0: 00014806 br 803a9d4 + * 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 + 803a4d0: e0bffd15 stw r2,-12(fp) + if ((inm != NULL) && + 803a4d4: e0bffd17 ldw r2,-12(fp) + 803a4d8: 10001b26 beq r2,zero,803a548 + ((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 + ((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 + { + 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 + 803a510: e0bffc15 stw r2,-16(fp) + if (pkt2) + 803a514: e0bffc17 ldw r2,-16(fp) + 803a518: 10000b26 beq r2,zero,803a548 + { + LOCK_NET_RESOURCE(RXQ_RESID); + 803a51c: 01000044 movi r4,1 + 803a520: 8028f380 call 8028f38 + 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 + UNLOCK_NET_RESOURCE(RXQ_RESID); + 803a534: 01000044 movi r4,1 + 803a538: 8028ff40 call 8028ff4 + SignalPktDemux(); + 803a53c: d0a08017 ldw r2,-32256(gp) + 803a540: 1009883a mov r4,r2 + 803a544: 8015d840 call 8015d84 + * 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 + ((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 + (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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 803a590: 01000084 movi r4,2 + 803a594: 8028f380 call 8028f38 + pk_free(p); + 803a598: e13ff617 ldw r4,-40(fp) + 803a59c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803a5a0: 01000084 movi r4,2 + 803a5a4: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return(SUCCESS); + 803a5a8: 0005883a mov r2,zero + 803a5ac: 00010906 br 803a9d4 + } + + 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 + } + +#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 + { + 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 + } + 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 + 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 + { +#ifdef NPDEBUG + if (NDEBUG & (IPTRACE|PROTERR)) + 803a610: d0a06617 ldw r2,-32360(gp) + 803a614: 1080840c andi r2,r2,528 + 803a618: 10001a26 beq r2,zero,803a684 + { + 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 + dtrap(); + 803a680: 8028cd40 call 8028cd4 + } +#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 + pk_free(p); + 803a6a0: e13ff617 ldw r4,-40(fp) + 803a6a4: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803a6a8: 01000084 movi r4,2 + 803a6ac: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return (ENP_NO_ROUTE); + 803a6b0: 00bff7c4 movi r2,-33 + 803a6b4: 0000c706 br 803a9d4 + } + } + +#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 + { + 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 + 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 +#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 + ((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 + { + 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 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 +#endif + LOCK_NET_RESOURCE(FREEQ_RESID); + 803a7b0: 01000084 movi r4,2 + 803a7b4: 8028f380 call 8028f38 + pk_free(p); + 803a7b8: e13ff617 ldw r4,-40(fp) + 803a7bc: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803a7c0: 01000084 movi r4,2 + 803a7c4: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return ENP_LOGIC; + 803a7c8: 00bffd44 movi r2,-11 + 803a7cc: 00008106 br 803a9d4 + } + 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 + LOCK_NET_RESOURCE(RXQ_RESID); + 803a7e4: 01000044 movi r4,1 + 803a7e8: 8028f380 call 8028f38 + 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 + UNLOCK_NET_RESOURCE(RXQ_RESID); + 803a7fc: 01000044 movi r4,1 + 803a800: 8028ff40 call 8028ff4 + LOCK_NET_RESOURCE(NET_RESID); + 803a804: 0009883a mov r4,zero + 803a808: 8028f380 call 8028f38 + IN_PROFILER(PF_IP, PF_EXIT); + + SignalPktDemux(); + 803a80c: d0a08017 ldw r2,-32256(gp) + 803a810: 1009883a mov r4,r2 + 803a814: 8015d840 call 8015d84 + + return SUCCESS; + 803a818: 0005883a mov r2,zero + 803a81c: 00006d06 br 803a9d4 + } + + /* 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 + 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 + 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 + 803a85c: 1805883a mov r2,r3 + 803a860: e0bffe15 stw r2,-8(fp) + 803a864: 00000406 br 803a878 + 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 + 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 + LOCK_NET_RESOURCE(FREEQ_RESID); + 803a89c: 01000084 movi r4,2 + 803a8a0: 8028f380 call 8028f38 + pk_free(p); + 803a8a4: e13ff617 ldw r4,-40(fp) + 803a8a8: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803a8ac: 01000084 movi r4,2 + 803a8b0: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return ENP_LOGIC; + 803a8b4: 00bffd44 movi r2,-11 + 803a8b8: 00004606 br 803a9d4 + } + 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 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 803a8c4: 01000084 movi r4,2 + 803a8c8: 8028f380 call 8028f38 + 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 + 803a8ec: e0bff815 stw r2,-32(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803a8f0: 01000084 movi r4,2 + 803a8f4: 8028ff40 call 8028ff4 + if (newpkt == 0) + 803a8f8: e0bff817 ldw r2,-32(fp) + 803a8fc: 1000081e bne r2,zero,803a920 + { + /* 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 + pk_free(p); + 803a908: e13ff617 ldw r4,-40(fp) + 803a90c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803a910: 01000084 movi r4,2 + 803a914: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return ENP_NOBUFFER; + 803a918: 00bffac4 movi r2,-21 + 803a91c: 00002d06 br 803a9d4 + } + 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 + /* 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 + pk_free(p); + 803a9a0: e13ff617 ldw r4,-40(fp) + 803a9a4: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803a9a8: 01000084 movi r4,2 + 803a9ac: 8028ff40 call 8028ff4 + 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 + 803a9c0: 00000406 br 803a9d4 + 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 + } + } +} + 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 : + +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 + 803ab38: e0bffb17 ldw r2,-20(fp) + 803ab3c: 10800b17 ldw r2,44(r2) + 803ab40: 10000426 beq r2,zero,803ab54 + 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 + { + /* 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 + 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 + 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 + } + 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 + 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 +} + 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 : + * 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 + { + /* 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 + { + 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 + 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 + } + + /* 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 + 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 + 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 + 803ae00: e0bff917 ldw r2,-28(fp) + 803ae04: 10800b17 ldw r2,44(r2) + 803ae08: 10000426 beq r2,zero,803ae1c + 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 + { + 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 + 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 + 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 + } + 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 + { + /* 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 + { + 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 + 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 + } + } + + /* 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 + 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 + + /* 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 + 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 +} + 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 : + * 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 + { + 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 + 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 +} + 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 : + * 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 + 803b04c: e0bfff15 stw r2,-4(fp) + if (tnet == 0) + 803b050: e0bfff17 ldw r2,-4(fp) + 803b054: 1000161e bne r2,zero,803b0b0 + { +#ifdef NPDEBUG + if (NDEBUG & (PROTERR|INFOMSG)) + 803b058: d0a06617 ldw r2,-32360(gp) + 803b05c: 1080050c andi r2,r2,20 + 803b060: 10001126 beq r2,zero,803b0a8 + 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 +#endif /* NPDEBUG */ + return 0L; + 803b0a8: 0005883a mov r2,zero + 803b0ac: 00000206 br 803b0b8 + } + 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 : + * 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 + 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 + { + dtrap(); + 803b138: 8028cd40 call 8028cd4 + /* 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 + 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(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 + 803b26c: 00820174 movhi r2,2053 + 803b270: 10ac6004 addi r2,r2,-20096 + 803b274: 00000206 br 803b280 + 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(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(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 + + 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 : + * 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 + return NULL; + 803b390: 0005883a mov r2,zero + 803b394: 00006406 br 803b528 + * 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 + return NULL; + 803b3a0: 0005883a mov r2,zero + 803b3a4: 00006006 br 803b528 +#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 + { + 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 + { + *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 + } + } + + rtp = rt_lookup(host); + 803b3e8: e13ffc17 ldw r4,-16(fp) + 803b3ec: 803cb280 call 803cb28 + 803b3f0: e0bffd15 stw r2,-12(fp) + if(rtp) + 803b3f4: e0bffd17 ldw r2,-12(fp) + 803b3f8: 10000926 beq r2,zero,803b420 + { + 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 + * 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 +#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 + (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 + ((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 + { +#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 + 803b488: d0a09c15 stw r2,-32144(gp) +#ifdef NPDEBUG + if (cachedRoute == NULL) + 803b48c: d0a09c17 ldw r2,-32144(gp) + 803b490: 1000011e bne r2,zero,803b498 + dtrap(); + 803b494: 8028cd40 call 8028cd4 +#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 + 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 +#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 +#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 + { + *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 + 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 + /* 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 : + * 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 + np = pk_alloc(len); + 803b57c: e0bfff17 ldw r2,-4(fp) + 803b580: 1009883a mov r4,r2 + 803b584: 80284340 call 8028434 + 803b588: e0bffe15 stw r2,-8(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803b58c: 01000084 movi r4,2 + 803b590: 8028ff40 call 8028ff4 + if (np == NULL) + 803b594: e0bffe17 ldw r2,-8(fp) + 803b598: 1000061e bne r2,zero,803b5b4 + { +#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 +#endif + return NULL; + 803b5ac: 0005883a mov r2,zero + 803b5b0: 00002806 br 803b654 + } + + /* 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 + + /* 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 : + * 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 + 803b694: d0a06617 ldw r2,-32360(gp) + 803b698: 1080800c andi r2,r2,512 + 803b69c: 10000b26 beq r2,zero,803b6cc + 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 + 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 +#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 + { +#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 + 803b734: d0a06617 ldw r2,-32360(gp) + 803b738: 1080800c andi r2,r2,512 + 803b73c: 10000926 beq r2,zero,803b764 + { + dprintf("ip_rcv: bad pkt len\n"); + 803b740: 01020174 movhi r4,2053 + 803b744: 212c9104 addi r4,r4,-19900 + 803b748: 8002d9c0 call 8002d9c + if (NDEBUG & DUMP) ip_dump(p); + 803b74c: d0a06617 ldw r2,-32360(gp) + 803b750: 1080008c andi r2,r2,2 + 803b754: 10000326 beq r2,zero,803b764 + 803b758: e0bff617 ldw r2,-40(fp) + 803b75c: 1009883a mov r4,r2 + 803b760: 803b0cc0 call 803b0cc + } +#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 + pk_free(p); + 803b780: e0bff617 ldw r2,-40(fp) + 803b784: 1009883a mov r4,r2 + 803b788: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803b78c: 01000084 movi r4,2 + 803b790: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return(ENP_BAD_HEADER); + 803b794: 00bff804 movi r2,-32 + 803b798: 00008206 br 803b9a4 + } + + /* 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 + { +#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 + 803b804: d0a06617 ldw r2,-32360(gp) + 803b808: 1080800c andi r2,r2,512 + 803b80c: 10000926 beq r2,zero,803b834 + { + dprintf("ip_rcv: bad version number\n"); + 803b810: 01020174 movhi r4,2053 + 803b814: 212c9604 addi r4,r4,-19880 + 803b818: 8002d9c0 call 8002d9c + if (NDEBUG & DUMP) ip_dump(p); + 803b81c: d0a06617 ldw r2,-32360(gp) + 803b820: 1080008c andi r2,r2,2 + 803b824: 10000326 beq r2,zero,803b834 + 803b828: e0bff617 ldw r2,-40(fp) + 803b82c: 1009883a mov r4,r2 + 803b830: 803b0cc0 call 803b0cc + } +#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 + pk_free(p); + 803b850: e0bff617 ldw r2,-40(fp) + 803b854: 1009883a mov r4,r2 + 803b858: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803b85c: 01000084 movi r4,2 + 803b860: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return(ENP_BAD_HEADER); + 803b864: 00bff804 movi r2,-32 + 803b868: 00004e06 br 803b9a4 + } + + 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 + 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 + { + 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 + 803b8d8: d0a06617 ldw r2,-32360(gp) + 803b8dc: 1080800c andi r2,r2,512 + 803b8e0: 10000926 beq r2,zero,803b908 + { + dprintf("ip_rcv: bad xsum\n"); + 803b8e4: 01020174 movhi r4,2053 + 803b8e8: 212c9d04 addi r4,r4,-19852 + 803b8ec: 8002d9c0 call 8002d9c + if (NDEBUG & DUMP) ip_dump(p); + 803b8f0: d0a06617 ldw r2,-32360(gp) + 803b8f4: 1080008c andi r2,r2,2 + 803b8f8: 10000326 beq r2,zero,803b908 + 803b8fc: e0bff617 ldw r2,-40(fp) + 803b900: 1009883a mov r4,r2 + 803b904: 803b0cc0 call 803b0cc + } +#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 + pk_free(p); + 803b924: e0bff617 ldw r2,-40(fp) + 803b928: 1009883a mov r4,r2 + 803b92c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803b930: 01000084 movi r4,2 + 803b934: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return(ENP_BAD_HEADER); + 803b938: 00bff804 movi r2,-32 + 803b93c: 00001906 br 803b9a4 + } + + 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 + { + 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 + 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 + 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 : + + +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 + 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 + 803ba4c: e0bffd15 stw r2,-12(fp) + if (inm == NULL) + 803ba50: e0bffd17 ldw r2,-12(fp) + 803ba54: 1000dc1e bne r2,zero,803bdc8 + { + 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 + pk_free(p); + 803ba74: e13ff917 ldw r4,-28(fp) + 803ba78: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803ba7c: 01000084 movi r4,2 + 803ba80: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return (ENP_NOT_MINE); + 803ba84: 00800084 movi r2,2 + 803ba88: 00011a06 br 803bef4 + 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 + (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 + (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 + (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 + (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 + (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 + { +#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 + 803bb14: d0a06617 ldw r2,-32360(gp) + 803bb18: 1080800c andi r2,r2,512 + 803bb1c: 10001526 beq r2,zero,803bb74 + 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 + +#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_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 + pk_free(p); + 803bba0: e13ff917 ldw r4,-28(fp) + 803bba4: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803bba8: 01000084 movi r4,2 + 803bbac: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return ENP_NO_ROUTE; + 803bbb0: 00bff7c4 movi r2,-33 + 803bbb4: 0000cf06 br 803bef4 + 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_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 +#endif /* FULL_ICMP */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 803bc28: 01000084 movi r4,2 + 803bc2c: 8028f380 call 8028f38 + pk_free(p); + 803bc30: e13ff917 ldw r4,-28(fp) + 803bc34: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803bc38: 01000084 movi r4,2 + 803bc3c: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return ENP_NO_ROUTE; + 803bc40: 00bff7c4 movi r2,-33 + 803bc44: 0000ab06 br 803bef4 + } + + 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 + 803bc70: e0bffc15 stw r2,-16(fp) + 803bc74: e0bffc17 ldw r2,-16(fp) + 803bc78: 10000d1e bne r2,zero,803bcb0 + { + 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 + pk_free(p); + 803bc98: e13ff917 ldw r4,-28(fp) + 803bc9c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803bca0: 01000084 movi r4,2 + 803bca4: 8028ff40 call 8028ff4 + IN_PROFILER(PF_IP, PF_EXIT); + return ENP_NO_ROUTE; + 803bca8: 00bff7c4 movi r2,-33 + 803bcac: 00009106 br 803bef4 + /* 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 + 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 + (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 + { + 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 + 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 +#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 +#endif /* FULL_ICMP */ + LOCK_NET_RESOURCE(FREEQ_RESID); + 803bd58: 01000084 movi r4,2 + 803bd5c: 8028f380 call 8028f38 + pk_free(p); + 803bd60: e13ff917 ldw r4,-28(fp) + 803bd64: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803bd68: 01000084 movi r4,2 + 803bd6c: 8028ff40 call 8028ff4 + return ENP_LOGIC; + 803bd70: 00bffd44 movi r2,-11 + 803bd74: 00005f06 br 803bef4 +#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 + 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 + 803bdc4: 00004b06 br 803bef4 + goto ours; + 803bdc8: 0001883a nop + 803bdcc: 00000506 br 803bde4 + return(ENP_NOT_MINE); +#endif + } + +#if defined (IP_MULTICAST) || defined (IP_ROUTING) +ours: + 803bdd0: 0001883a nop + 803bdd4: 00000306 br 803bde4 + goto ours; + 803bdd8: 0001883a nop + 803bddc: 00000106 br 803bde4 + 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 + (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 + { +#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 + 803be3c: d0a06617 ldw r2,-32360(gp) + 803be40: 1080800c andi r2,r2,512 + 803be44: 10001726 beq r2,zero,803bea4 + { + 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 + ip_dump(p); + 803be9c: e13ff917 ldw r4,-28(fp) + 803bea0: 803b0cc0 call 803b0cc + } +#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 + pk_free(p); + 803bed4: e13ff917 ldw r4,-28(fp) + 803bed8: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803bedc: 01000084 movi r4,2 + 803bee0: 8028ff40 call 8028ff4 + 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 + { + 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 +} + 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 : + * 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 + { + 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 + (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 + { + 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 + return ENP_LOGIC; + 803bf80: 00bffd44 movi r2,-11 + 803bf84: 0000c406 br 803c298 + + /* 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 + 803bfa4: d0a06617 ldw r2,-32360(gp) + 803bfa8: 1080800c andi r2,r2,512 + 803bfac: 10001e26 beq r2,zero,803c028 + { + 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 + if (NDEBUG & DUMP) ip_dump(p); + 803c014: d0a06617 ldw r2,-32360(gp) + 803c018: 1080008c andi r2,r2,2 + 803c01c: 10000226 beq r2,zero,803c028 + 803c020: e13ffd17 ldw r4,-12(fp) + 803c024: 803b0cc0 call 803b0cc + } +#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 + 803c03c: 10c000c8 cmpgei r3,r2,3 + 803c040: 1800031e bne r3,zero,803c050 + 803c044: 10800060 cmpeqi r2,r2,1 + 803c048: 10000e1e bne r2,zero,803c084 + 803c04c: 00002806 br 803c0f0 + 803c050: 10c001a0 cmpeqi r3,r2,6 + 803c054: 18001d1e bne r3,zero,803c0cc + 803c058: 10800458 cmpnei r2,r2,17 + 803c05c: 1000241e bne r2,zero,803c0f0 + { + 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 + 803c07c: e0bfff15 stw r2,-4(fp) + break; + 803c080: 00002406 br 803c114 + 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 + 803c0a0: e0bfff15 stw r2,-4(fp) + break; + 803c0a4: 00001b06 br 803c114 +#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 + 803c0c4: e0bfff15 stw r2,-4(fp) + break; + 803c0c8: 00001206 br 803c114 +#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 + 803c0e8: e0bfff15 stw r2,-4(fp) + break; + 803c0ec: 00000906 br 803c114 + 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 + 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 + { + return err; + 803c120: e0bfff17 ldw r2,-4(fp) + 803c124: 00005c06 br 803c298 + +#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 +#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 +#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 + (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 + (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 + (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 + { + +#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 + 803c1f8: d0a06617 ldw r2,-32360(gp) + 803c1fc: 1080800c andi r2,r2,512 + 803c200: 10000c26 beq r2,zero,803c234 + { + 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 + if (NDEBUG & DUMP) ip_dump(p); + 803c220: d0a06617 ldw r2,-32360(gp) + 803c224: 1080008c andi r2,r2,2 + 803c228: 10000226 beq r2,zero,803c234 + 803c22c: e13ffd17 ldw r4,-12(fp) + 803c230: 803b0cc0 call 803b0cc + } +#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 + } +#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 + pk_free(p); + 803c284: e13ffd17 ldw r4,-12(fp) + 803c288: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803c28c: 01000084 movi r4,2 + 803c290: 8028ff40 call 8028ff4 + 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 : + * 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 + 803c2d4: e0bffd17 ldw r2,-12(fp) + 803c2d8: 10800017 ldw r2,0(r2) + 803c2dc: 1000021e bne r2,zero,803c2e8 + return ((struct in_multi *)NULL); + 803c2e0: 0005883a mov r2,zero + 803c2e4: 00003f06 br 803c3e4 + + ENTER_CRIT_SECTION(netp); + 803c2e8: 8028e940 call 8028e94 +#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 + 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 + 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 + { + /* 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 + { + /* + * 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 + 803c338: e0bfff15 stw r2,-4(fp) + + if (inm == (struct in_multi *)NULL) + 803c33c: e0bfff17 ldw r2,-4(fp) + 803c340: 1000031e bne r2,zero,803c350 + { + EXIT_CRIT_SECTION(netp); + 803c344: 8028ef40 call 8028ef4 + return ((struct in_multi *)NULL); + 803c348: 0005883a mov r2,zero + 803c34c: 00002506 br 803c3e4 +#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 + 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 + 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 + 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 + 803c3d4: e13fff17 ldw r4,-4(fp) + 803c3d8: 80258d80 call 80258d8 +#endif + } + + EXIT_CRIT_SECTION(netp); + 803c3dc: 8028ef40 call 8028ef4 + 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 : + * 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 + 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 + { + /* 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 + { + 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 + { + 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 + } + 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 + { + 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 + 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 + /* + * 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 + 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 + 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 + 803c4d8: e13ffc17 ldw r4,-16(fp) + 803c4dc: 8025b040 call 8025b04 +#endif + + IM_FREE(inm); + 803c4e0: e13ffc17 ldw r4,-16(fp) + 803c4e4: 80298600 call 8029860 + } + + EXIT_CRIT_SECTION(inm); + 803c4e8: 8028ef40 call 8028ef4 + 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 : + * 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 + { + 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 + return imp; + 803c538: e0bfff17 ldw r2,-4(fp) + 803c53c: 00000606 br 803c558 + 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 + } + 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 : + * 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 + 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 + 803c5a8: 00820174 movhi r2,2053 + 803c5ac: 10acd004 addi r2,r2,-19648 + 803c5b0: 00000206 br 803c5bc + 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 + 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 : + * 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 + + PORT_EXIT_FUNC(err); /* should not return! */ + 803c608: e13fff17 ldw r4,-4(fp) + 803c60c: 8042abc0 call 8042abc + +0803c610 : + * 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(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 + + /* 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 + 803c670: e0bfff15 stw r2,-4(fp) + if (ep == NULL) + 803c674: e0bfff17 ldw r2,-4(fp) + 803c678: 10000a1e bne r2,zero,803c6a4 + { +#ifdef NPDEBUG + if (NDEBUG & INFOMSG) + 803c67c: d0a06617 ldw r2,-32360(gp) + 803c680: 1080010c andi r2,r2,4 + 803c684: 10000326 beq r2,zero,803c694 + dprintf("IP: Couldn't allocate ep storage.\n"); + 803c688: 01020174 movhi r4,2053 + 803c68c: 212cdd04 addi r4,r4,-19596 + 803c690: 8002d9c0 call 8002d9c +#endif + UNLOCK_NET_RESOURCE(NET_RESID); + 803c694: 0009883a mov r4,zero + 803c698: 8028ff40 call 8028ff4 + return ep; + 803c69c: e0bfff17 ldw r2,-4(fp) + 803c6a0: 00001706 br 803c700 + } + + /* 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 + 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 : + * 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 + + /* 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 + 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 + 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 + 803c768: 00000106 br 803c770 + 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 + { +#ifdef NPDEBUG + /* caller passed pointer to endpoint not in list + * -- not fatal, but may be programming error + */ + dtrap(); + 803c778: 8028cd40 call 8028cd4 +#endif /* NPDEBUG */ + UNLOCK_NET_RESOURCE(NET_RESID); + 803c77c: 0009883a mov r4,zero + 803c780: 8028ff40 call 8028ff4 + return; + 803c784: 00000d06 br 803c7bc + } + + /* unlink it from the list */ + if (prev_ep) + 803c788: e0bfff17 ldw r2,-4(fp) + 803c78c: 10000426 beq r2,zero,803c7a0 + 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 + 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 + + /* and return */ + UNLOCK_NET_RESOURCE(NET_RESID); + 803c7b4: 0009883a mov r4,zero + 803c7b8: 8028ff40 call 8028ff4 +} + 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 : + * 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 + { + /* 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 + 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 + 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 + 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 + 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 + 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 + 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 + * 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 + 803c890: e0bffe17 ldw r2,-8(fp) + 803c894: 10800317 ldw r2,12(r2) + 803c898: 10001c26 beq r2,zero,803c90c + { + PACKET p2; + + p2 = ip_copypkt(p); + 803c89c: e13ff817 ldw r4,-32(fp) + 803c8a0: 803b53c0 call 803b53c + 803c8a4: e0bff915 stw r2,-28(fp) + if (p2) + 803c8a8: e0bff917 ldw r2,-28(fp) + 803c8ac: 10001726 beq r2,zero,803c90c + { + UNLOCK_NET_RESOURCE(NET_RESID); + 803c8b0: 0009883a mov r4,zero + 803c8b4: 8028ff40 call 8028ff4 + 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 + if (err) + 803c8e0: e0bffd17 ldw r2,-12(fp) + 803c8e4: 10000726 beq r2,zero,803c904 + { + LOCK_NET_RESOURCE(FREEQ_RESID); + 803c8e8: 01000084 movi r4,2 + 803c8ec: 8028f380 call 8028f38 + pk_free(p2); + 803c8f0: e13ff917 ldw r4,-28(fp) + 803c8f4: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803c8f8: 01000084 movi r4,2 + 803c8fc: 8028ff40 call 8028ff4 + 803c900: 00000206 br 803c90c + } + 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 + continue; + 803c918: 0001883a nop + 803c91c: 00000306 br 803c92c + continue; + 803c920: 0001883a nop + 803c924: 00000106 br 803c92c + 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 + /* 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 + 803c944: e0bffe17 ldw r2,-8(fp) + 803c948: 10800317 ldw r2,12(r2) + 803c94c: 10001126 beq r2,zero,803c994 + { + UNLOCK_NET_RESOURCE(NET_RESID); + 803c950: 0009883a mov r4,zero + 803c954: 8028ff40 call 8028ff4 + 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 + if (err == 0) + 803c980: e0bffd17 ldw r2,-12(fp) + 803c984: 10000a1e bne r2,zero,803c9b0 + delivered = 1; + 803c988: 00800044 movi r2,1 + 803c98c: e0bffc15 stw r2,-16(fp) + if (err == 0) + 803c990: 00000706 br 803c9b0 + } + 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_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 : + * 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 + 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 + 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 + 803ca40: e0bffe15 stw r2,-8(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803ca44: 01000084 movi r4,2 + 803ca48: 8028ff40 call 8028ff4 + if (p) + 803ca4c: e0bffe17 ldw r2,-8(fp) + 803ca50: 10000c26 beq r2,zero,803ca84 + { + if (!hdrincl) + 803ca54: e0bffc17 ldw r2,-16(fp) + 803ca58: 10000a1e bne r2,zero,803ca84 + { + 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 : + * 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 + pk_free(p); + 803cab8: e13fff17 ldw r4,-4(fp) + 803cabc: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803cac0: 01000084 movi r4,2 + 803cac4: 8028ff40 call 8028ff4 +} + 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 : + * 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 + 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 : + * 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 + { + 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 +#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 + { + /* 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 + { + 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 + 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 + } + 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 + { + /* 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 + 803cc20: 00000106 br 803cc28 + 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 + 803cc4c: 00000106 br 803cc54 + break; + 803cc50: 0001883a nop + } + } + } + + if (netmatch) + 803cc54: e0bffe17 ldw r2,-8(fp) + 803cc58: 10000326 beq r2,zero,803cc68 + 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 : + 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 + 803cca8: e0bffd15 stw r2,-12(fp) + if(!ifp) + 803ccac: e0bffd17 ldw r2,-12(fp) + 803ccb0: 1000021e bne r2,zero,803ccbc + return NULL; + 803ccb4: 0005883a mov r2,zero + 803ccb8: 0000d406 br 803d00c + + if (rt_mib == NULL) + 803ccbc: d0a09517 ldw r2,-32172(gp) + 803ccc0: 1000021e bne r2,zero,803cccc + return NULL; + 803ccc4: 0005883a mov r2,zero + 803ccc8: 0000d006 br 803d00c + + /* 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 + 803ccd4: e0bffb17 ldw r2,-20(fp) + 803ccd8: 1000221e bne r2,zero,803cd64 + { + dtrap(); /* bad configuration? */ + 803ccdc: 8028cd40 call 8028cd4 + 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 + return NULL; + 803cd5c: 0005883a mov r2,zero + 803cd60: 0000aa06 br 803d00c + } + + + + /* 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 + { + 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 + { + 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 + } + /* 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 + 803cddc: e0bffe17 ldw r2,-8(fp) + 803cde0: 10800817 ldw r2,32(r2) + 803cde4: 10004326 beq r2,zero,803cef4 + { + 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 + { + 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 + } + /* 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 + { + if (!newrt) + 803ce38: e0bffe17 ldw r2,-8(fp) + 803ce3c: 1000031e bne r2,zero,803ce4c + { + newrt = rtp; + 803ce40: e0bfff17 ldw r2,-4(fp) + 803ce44: e0bffe15 stw r2,-8(fp) + continue; + 803ce48: 00002a06 br 803cef4 + } + + /* 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 + { + newrt = rtp; /* save lower priority entry for recycle */ + 803ce80: e0bfff17 ldw r2,-4(fp) + 803ce84: e0bffe15 stw r2,-8(fp) + 803ce88: 00001a06 br 803cef4 + } + 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 + { + /* 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 + 803cedc: 1007883a mov r3,r2 + 803cee0: e0bfff17 ldw r2,-4(fp) + 803cee4: 10800917 ldw r2,36(r2) + 803cee8: 1880021e bne r3,r2,803cef4 + 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 + } + } + } + + /* 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 + 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 + 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 + 803cfbc: 00000206 br 803cfc8 + return NULL; + 803cfc0: 0005883a mov r2,zero + 803cfc4: 00001106 br 803d00c + 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 + 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 : + * 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 + ifp = NULL; /* wildcard */ + 803d04c: e03ffd15 stw zero,-12(fp) + 803d050: 00000306 br 803d060 + else + ifp = if_getbynum(iface); + 803d054: e13ffa17 ldw r4,-24(fp) + 803d058: 80240880 call 8024088 + 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 + return 0; + 803d068: 0005883a mov r2,zero + 803d06c: 00002c06 br 803d120 + + 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 + { + if (!rtp->ipRouteNextHop) /* empty slot */ + 803d07c: e0bfff17 ldw r2,-4(fp) + 803d080: 10800617 ldw r2,24(r2) + 803d084: 10001926 beq r2,zero,803d0ec + continue; + if(ifp != NULL && ifp != rtp->ifp) + 803d088: e0bffd17 ldw r2,-12(fp) + 803d08c: 10000426 beq r2,zero,803d0a0 + 803d090: e0bfff17 ldw r2,-4(fp) + 803d094: 10800e17 ldw r2,56(r2) + 803d098: e0fffd17 ldw r3,-12(fp) + 803d09c: 1880151e bne r3,r2,803d0f4 + 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 + { + 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 + 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 + cachedRoute = NULL; + 803d0e4: d0209c15 stw zero,-32144(gp) + 803d0e8: 00000306 br 803d0f8 + continue; + 803d0ec: 0001883a nop + 803d0f0: 00000106 br 803d0f8 + 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 + } + 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 : + * 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 +#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 + 803d1c4: d0a06617 ldw r2,-32360(gp) + 803d1c8: 1080400c andi r2,r2,256 + 803d1cc: 10001426 beq r2,zero,803d220 + 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 +#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 + return ENP_BAD_HEADER; + 803d23c: 00bff804 movi r2,-32 + 803d240: 00019206 br 803d88c + } + + 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 + { + 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 + 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 + 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 + 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 + 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 + { +#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 + 803d314: d0a06617 ldw r2,-32360(gp) + 803d318: 1080400c andi r2,r2,256 + 803d31c: 10001b26 beq r2,zero,803d38c + { + 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 + if (NDEBUG & DUMP) + 803d378: d0a06617 ldw r2,-32360(gp) + 803d37c: 1080008c andi r2,r2,2 + 803d380: 10000226 beq r2,zero,803d38c + ip_dump(p); + 803d384: e13ff217 ldw r4,-56(fp) + 803d388: 803b0cc0 call 803b0cc + } +#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 + return ENP_BAD_HEADER; + 803d3a8: 00bff804 movi r2,-32 + 803d3ac: 00013706 br 803d88c + } + } + +#if (BYTE_ORDER == LITTLE_ENDIAN) + udpswap(pup); + 803d3b0: e13ffa17 ldw r4,-24(fp) + 803d3b4: 803db340 call 803db34 +#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 + 803d410: d0a06617 ldw r2,-32360(gp) + 803d414: 1080400c andi r2,r2,256 + 803d418: 10001c26 beq r2,zero,803d48c + { + 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 +#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 + 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 + 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 + 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 + 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 + 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 + 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 +#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 + { + 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 + 803d580: e0bff717 ldw r2,-36(fp) + 803d584: 10800317 ldw r2,12(r2) + 803d588: 10002226 beq r2,zero,803d614 + { + 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 + { + 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 + (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 + 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 + { + goto found; + } + } + continue; + 803d610: 00004806 br 803d734 + } + } + found: + 803d614: 0001883a nop + 803d618: 00000106 br 803d620 + 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 + { + 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 + 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 + 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 + { + UNLOCK_NET_RESOURCE(NET_RESID); + 803d6b0: 0009883a mov r4,zero + 803d6b4: 8028ff40 call 8028ff4 + 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 + 803d6e0: 00000206 br 803d6ec + } + 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 + { + 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 + } + + return(e); + 803d710: e0bffd17 ldw r2,-12(fp) + 803d714: 00005d06 br 803d88c + continue; + 803d718: 0001883a nop + 803d71c: 00000506 br 803d734 + continue; + 803d720: 0001883a nop + 803d724: 00000306 br 803d734 + continue; + 803d728: 0001883a nop + 803d72c: 00000106 br 803d734 + 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 + + /* 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 + (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 + (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 + (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 + { +#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 + 803d7ac: d0a06617 ldw r2,-32360(gp) + 803d7b0: 1080400c andi r2,r2,256 + 803d7b4: 10000326 beq r2,zero,803d7c4 + dprintf("UDP: ignoring ip broadcast\n"); + 803d7b8: 01020174 movhi r4,2053 + 803d7bc: 212d1604 addi r4,r4,-19368 + 803d7c0: 8002d9c0 call 8002d9c +#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 + return ENP_NOT_MINE; + 803d7e0: 00800084 movi r2,2 + 803d7e4: 00002906 br 803d88c + } + +#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 + 803d7f4: d0a06617 ldw r2,-32360(gp) + 803d7f8: 1080400c andi r2,r2,256 + 803d7fc: 10000c26 beq r2,zero,803d830 + { + 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 + if (NDEBUG & DUMP) + 803d81c: d0a06617 ldw r2,-32360(gp) + 803d820: 1080008c andi r2,r2,2 + 803d824: 10000226 beq r2,zero,803d830 + ip_dump(p); + 803d828: e13ff217 ldw r4,-56(fp) + 803d82c: 803b0cc0 call 803b0cc +#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 +#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 +#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 + 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 : + * 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 + 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 +#endif + + LOCK_NET_RESOURCE(NET_RESID); + 803d93c: 0009883a mov r4,zero + 803d940: 8028f380 call 8028f38 + /* 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 + 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 +#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 + { + if (!p->net) + 803d9dc: e0bff517 ldw r2,-44(fp) + 803d9e0: 10800617 ldw r2,24(r2) + 803d9e4: 1000071e bne r2,zero,803da04 + { + dtrap(); /* programmer forgot to select iface */ + 803d9e8: 8028cd40 call 8028cd4 + /* 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 + UNLOCK_NET_RESOURCE(NET_RESID); + 803d9f4: 0009883a mov r4,zero + 803d9f8: 8028ff40 call 8028ff4 + return ENP_NO_IFACE; + 803d9fc: 00bff784 movi r2,-34 + 803da00: 00004706 br 803db20 + } + 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 + /* 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 + 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 + 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 + 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 + 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 + 803db10: e0bffb15 stw r2,-20(fp) + UNLOCK_NET_RESOURCE(NET_RESID); + 803db14: 0009883a mov r4,zero + 803db18: 8028ff40 call 8028ff4 + 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 : + */ + +#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 : +#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 + { + /* 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 + 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 + { + 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 + { + 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 + } + } + 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 : + * 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 + 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 + 803dd28: e0bffe15 stw r2,-8(fp) + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803dd2c: 01000084 movi r4,2 + 803dd30: 8028ff40 call 8028ff4 + + if (p != (PACKET)NULL) + 803dd34: e0bffe17 ldw r2,-8(fp) + 803dd38: 10001026 beq r2,zero,803dd7c + { + /* 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 : + * 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 : + * 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 + pk_free(p); + 803ddd4: e13fff17 ldw r4,-4(fp) + 803ddd8: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803dddc: 01000084 movi r4,2 + 803dde0: 8028ff40 call 8028ff4 +} + 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 : + * 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 + 803de5c: 108004a0 cmpeqi r2,r2,18 + 803de60: 1000501e bne r2,zero,803dfa4 + 803de64: 00006b06 br 803e014 + { + 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 + { + /* 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 + 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 + { + if (inm->inm_timer == 0) + 803dea8: e0bfff17 ldw r2,-4(fp) + 803deac: 10800317 ldw r2,12(r2) + 803deb0: 1000351e bne r2,zero,803df88 + { + 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 + 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 + } + } + } + rc = IGMP_OK; + 803df9c: e03ffe15 stw zero,-8(fp) + break; + 803dfa0: 00002406 br 803e034 + + 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 + 803dfcc: e0bfff15 stw r2,-4(fp) + if (inm != NULL) + 803dfd0: e0bfff17 ldw r2,-4(fp) + 803dfd4: 10000d26 beq r2,zero,803e00c + { + if (inm->inm_timer > 0) + 803dfd8: e0bfff17 ldw r2,-4(fp) + 803dfdc: 10800317 ldw r2,12(r2) + 803dfe0: 10000a26 beq r2,zero,803e00c + { + 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 + + 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 + pk_free(p); + 803e03c: e13ffa17 ldw r4,-24(fp) + 803e040: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803e044: 01000084 movi r4,2 + 803e048: 8028ff40 call 8028ff4 + + 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 : + * 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 + 803e0bc: 10c004c8 cmpgei r3,r2,19 + 803e0c0: 1800031e bne r3,zero,803e0d0 + 803e0c4: 10800460 cmpeqi r2,r2,17 + 803e0c8: 1000061e bne r2,zero,803e0e4 + 803e0cc: 00001406 br 803e120 + 803e0d0: 10c005a0 cmpeqi r3,r2,22 + 803e0d4: 1800071e bne r3,zero,803e0f4 + 803e0d8: 108005e0 cmpeqi r2,r2,23 + 803e0dc: 1000091e bne r2,zero,803e104 + 803e0e0: 00000f06 br 803e120 + { + case IGMP_HOST_MEMBERSHIP_QUERY: + rc = igmpv2_process_query (p); + 803e0e4: e13ffb17 ldw r4,-20(fp) + 803e0e8: 803e2840 call 803e284 + 803e0ec: e0bfff15 stw r2,-4(fp) + break; + 803e0f0: 00001306 br 803e140 + + case IGMP_HOST_MEMBERSHIP_REPORT: + case IGMPv2_MEMBERSHIP_REPORT: + rc = igmpv2_process_report (p); + 803e0f4: e13ffb17 ldw r4,-20(fp) + 803e0f8: 803e1700 call 803e170 + 803e0fc: e0bfff15 stw r2,-4(fp) + break; + 803e100: 00000f06 br 803e140 + * 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 + + 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 + pk_free(p); + 803e148: e13ffb17 ldw r4,-20(fp) + 803e14c: 80287480 call 8028748 + UNLOCK_NET_RESOURCE(FREEQ_RESID); + 803e150: 01000084 movi r4,2 + 803e154: 8028ff40 call 8028ff4 + + 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 : + * + * 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 + 803e1d0: e0bffc15 stw r2,-16(fp) + if (inm != NULL) + 803e1d4: e0bffc17 ldw r2,-16(fp) + 803e1d8: 10001f26 beq r2,zero,803e258 + { + if (inm->inm_timer != 0) + 803e1dc: e0bffc17 ldw r2,-16(fp) + 803e1e0: 10800317 ldw r2,12(r2) + 803e1e4: 10001626 beq r2,zero,803e240 + { + /* 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 + 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 + { + /* 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 + 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 + * 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 : + * + * 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 + { + /* 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 + } + 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 + { + /* 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 + } + 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 + { + 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 + { + /* 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 + /* 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_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 + 803e3c4: 00000106 br 803e3cc + 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 + 803e3e0: 00001206 br 803e42c + { + /* 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 + 803e3f8: e0bffe15 stw r2,-8(fp) + if (inm != NULL) + 803e3fc: e0bffe17 ldw r2,-8(fp) + 803e400: 10000526 beq r2,zero,803e418 + 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 + 803e414: 00000506 br 803e42c + 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 : + * + * 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 + (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 + { + 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 + 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 : + * 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 + { + /* 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 + { + /* 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 + 803e5d0: 10c00520 cmpeqi r3,r2,20 + 803e5d4: 1800081e bne r3,zero,803e5f8 + 803e5d8: 1000201e bne r2,zero,803e65c + { + 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 + + 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 + + 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 + /* found the option, return success */ + return IGMP_TRUE; + 803e64c: 00800044 movi r2,1 + 803e650: 00001306 br 803e6a0 + else return IGMP_FALSE; + 803e654: 0005883a mov r2,zero + 803e658: 00001106 br 803e6a0 + + 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 + } /* 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 : + * 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 + { + for (idx = 0; idx < ifNumber; idx++) + 803e6ec: e03fff8d sth zero,-2(fp) + 803e6f0: 00001206 br 803e73c + { + 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 + { + *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 + 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 + } + else + *netp = nets[idx]; + } + } +} + 803e748: 00001906 br 803e7b0 + 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 + *netp = NULL; + 803e764: e0bffd17 ldw r2,-12(fp) + 803e768: 10000015 stw zero,0(r2) + break; + 803e76c: 00001006 br 803e7b0 + *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 + 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 +} + 803e7ac: 00000006 br 803e7b0 + 803e7b0: 0001883a nop + 803e7b4: e037883a mov sp,fp + 803e7b8: df000017 ldw fp,0(sp) + 803e7bc: dec00104 addi sp,sp,4 + 803e7c0: f800283a ret + +0803e7c4 : + * 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 + { + /* + * 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 + 803e814: e0bffc15 stw r2,-16(fp) + + if (imo == NULL) + 803e818: e0bffc17 ldw r2,-16(fp) + 803e81c: 1000021e bne r2,zero,803e828 + return (ENOBUFS); + 803e820: 00801a44 movi r2,105 + 803e824: 00014906 br 803ed4c + *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 + 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 + { + imo->imo_multicast_netp = NULL; + 803e8a8: e0bffc17 ldw r2,-16(fp) + 803e8ac: 10000015 stw zero,0(r2) + break; + 803e8b0: 00010e06 br 803ecec + /* + * 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 + if ((netp == NULL) || (netp->n_mcastlist) == NULL) + 803e8c4: e0bff817 ldw r2,-32(fp) + 803e8c8: 10000326 beq r2,zero,803e8d8 + 803e8cc: e0bff817 ldw r2,-32(fp) + 803e8d0: 10802b17 ldw r2,172(r2) + 803e8d4: 1000031e bne r2,zero,803e8e4 + { + error = EADDRNOTAVAIL; + 803e8d8: 00801f44 movi r2,125 + 803e8dc: e0bffe15 stw r2,-8(fp) + break; + 803e8e0: 00010206 br 803ecec + } + if (addr != AADDR) + 803e8e4: e0bffa17 ldw r2,-24(fp) + 803e8e8: 1000ff26 beq r2,zero,803ece8 + 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 + + 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 + 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 + { + error = EINVAL; + 803e924: 00800584 movi r2,22 + 803e928: e0bffe15 stw r2,-8(fp) + break; + 803e92c: 0000ef06 br 803ecec + } + 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 + 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 + { + error = EINVAL; + 803e99c: 00800584 movi r2,22 + 803e9a0: e0bffe15 stw r2,-8(fp) + break; + 803e9a4: 0000d106 br 803ecec + * 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 + /* + * 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 + 803e9c8: e0bff817 ldw r2,-32(fp) + 803e9cc: 10802b17 ldw r2,172(r2) + 803e9d0: 1000031e bne r2,zero,803e9e0 + { + error = EADDRNOTAVAIL; + 803e9d4: 00801f44 movi r2,125 + 803e9d8: e0bffe15 stw r2,-8(fp) + break; + 803e9dc: 0000c306 br 803ecec + } + /* + * 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 + { + 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 + 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 + 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 + 803ea54: 00000106 br 803ea5c + { + 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 + { + error = EADDRINUSE; + 803ea70: 00801c04 movi r2,112 + 803ea74: e0bffe15 stw r2,-8(fp) + break; + 803ea78: 00009c06 br 803ecec + } + if (i == IP_MAX_MEMBERSHIPS) + 803ea7c: e0bffd8b ldhu r2,-10(fp) + 803ea80: 10800518 cmpnei r2,r2,20 + 803ea84: 1000031e bne r2,zero,803ea94 + { + error = ETOOMANYREFS; + 803ea88: 00802044 movi r2,129 + 803ea8c: e0bffe15 stw r2,-8(fp) + break; + 803ea90: 00009606 br 803ecec + /* + * 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 + 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 + { + error = ENOBUFS; + 803eae0: 00801a44 movi r2,105 + 803eae4: e0bffe15 stw r2,-8(fp) + break; + 803eae8: 00008006 br 803ecec + } + ++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 + 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 + { + error = EINVAL; + 803eb60: 00800584 movi r2,22 + 803eb64: e0bffe15 stw r2,-8(fp) + break; + 803eb68: 00006006 br 803ecec + * 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 + if (netp == NULL) + 803eb84: e0bff817 ldw r2,-32(fp) + 803eb88: 1000031e bne r2,zero,803eb98 + { + error = EADDRNOTAVAIL; + 803eb8c: 00801f44 movi r2,125 + 803eb90: e0bffe15 stw r2,-8(fp) + break; + 803eb94: 00005506 br 803ecec + } + + /* + * 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 + { + if ((netp == NULL || + 803eba0: e0bff817 ldw r2,-32(fp) + 803eba4: 10000926 beq r2,zero,803ebcc + 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 + 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 + 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 + 803ec14: 00000106 br 803ec1c + { + 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 + { + error = EADDRNOTAVAIL; + 803ec30: 00801f44 movi r2,125 + 803ec34: e0bffe15 stw r2,-8(fp) + break; + 803ec38: 00002c06 br 803ecec + } + /* + * 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 + /* + * 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 + 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 + --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 + + default: + error = EOPNOTSUPP; + 803ecdc: 008017c4 movi r2,95 + 803ece0: e0bffe15 stw r2,-8(fp) + break; + 803ece4: 00000106 br 803ecec + 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 + 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 + 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 + 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 + { + IM_FREE(*imop); + 803ed30: e0bffb17 ldw r2,-20(fp) + 803ed34: 10800017 ldw r2,0(r2) + 803ed38: 1009883a mov r4,r2 + 803ed3c: 80298600 call 8029860 + *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 : + * 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 + 803ed94: e0bffb17 ldw r2,-20(fp) + 803ed98: 108002e0 cmpeqi r2,r2,11 + 803ed9c: 1000221e bne r2,zero,803ee28 + 803eda0: e0bffb17 ldw r2,-20(fp) + 803eda4: 10800258 cmpnei r2,r2,9 + 803eda8: 10002d1e bne r2,zero,803ee60 + { + + 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 + 803edbc: e0bfff17 ldw r2,-4(fp) + 803edc0: 10800017 ldw r2,0(r2) + 803edc4: 1000031e bne r2,zero,803edd4 + *addr = AADDR; + 803edc8: e0bffe17 ldw r2,-8(fp) + 803edcc: 10000015 stw zero,0(r2) + 803edd0: 00000506 br 803ede8 + 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 + + 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 + *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 + 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 + + 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 + *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 + 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 + + 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 : + * 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 + { + for (i = 0; i < imo->imo_num_memberships; ++i) + 803ee90: e03fff8d sth zero,-2(fp) + 803ee94: 00000b06 br 803eec4 + 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 + 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 + npfree(imo); + 803eed8: e13ffe17 ldw r4,-8(fp) + 803eedc: 80298600 call 8029860 + } +} + 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 : + * + * 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 +// 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 : + * + * 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 + 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 + 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 + { + ns_printf (pio,"t_socket() failed, Err: %d\n", t_errno(s)); + 803ef80: e13ffe17 ldw r4,-8(fp) + 803ef84: 802cfbc0 call 802cfbc + 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 + exit(1); + 803ef9c: 01000044 movi r4,1 + 803efa0: 8042abc0 call 8042abc + } + + /* 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 + 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 + { + ns_printf (pio,"t_setsockopt() SO_REUSEADDR failed, Err: %d\n", + 803efdc: e13ffe17 ldw r4,-8(fp) + 803efe0: 802cfbc0 call 802cfbc + 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 + 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 + 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 + { + printf ("t_bind() failed, Err: %d\n", + 803f030: e13ffe17 ldw r4,-8(fp) + 803f034: 802cfbc0 call 802cfbc + 803f038: 100b883a mov r5,r2 + 803f03c: 01020174 movhi r4,2053 + 803f040: 212d4604 addi r4,r4,-19176 + 803f044: 8002c780 call 8002c78 + 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 + stMreq.imr_multiaddr = inet_addr(TEST_ADDR); + 803f060: 01020174 movhi r4,2053 + 803f064: 212d4d04 addi r4,r4,-19148 + 803f068: 803fc380 call 803fc38 + 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 + 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 + { + ns_printf (pio,"t_setsockopt() IP_ADD_MEMBERSHIP failed, Err: %d\n", + 803f0ac: e13ffe17 ldw r4,-8(fp) + 803f0b0: 802cfbc0 call 802cfbc + 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 + t_errno(s)); + } + tk_yield(); + 803f0c8: 8027ce40 call 8027ce4 + + /* 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 + stMreq.imr_multiaddr = inet_addr(TEST_ADDR1); + 803f0e4: 01020174 movhi r4,2053 + 803f0e8: 212d6504 addi r4,r4,-19052 + 803f0ec: 803fc380 call 803fc38 + 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 + 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 + { + ns_printf (pio,"t_setsockopt() IP_ADD_MEMBERSHIP failed, Err: %d\n", + 803f130: e13ffe17 ldw r4,-8(fp) + 803f134: 802cfbc0 call 802cfbc + 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 + t_errno(s)); + } + tk_yield(); + 803f14c: 8027ce40 call 8027ce4 + + /* 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 + stMreq.imr_multiaddr = inet_addr(TEST_ADDR2); + 803f168: 01020174 movhi r4,2053 + 803f16c: 212d6804 addi r4,r4,-19040 + 803f170: 803fc380 call 803fc38 + 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 + 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 + { + ns_printf (pio,"t_setsockopt() IP_ADD_MEMBERSHIP failed, Err: %d\n", + 803f1b4: e13ffe17 ldw r4,-8(fp) + 803f1b8: 802cfbc0 call 802cfbc + 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 + t_errno(s)); + } + tk_yield(); + 803f1d0: 8027ce40 call 8027ce4 + + /* 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 + 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 + { + ns_printf (pio,"t_setsockopt() IP_MULTICAST_TTL failed, Err: %d\n", + 803f20c: e13ffe17 ldw r4,-8(fp) + 803f210: 802cfbc0 call 802cfbc + 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 + 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 + 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 + { + ns_printf (pio,"t_setsockopt() IP_MULTICAST_LOOP failed, Err: %d\n", + 803f260: e13ffe17 ldw r4,-8(fp) + 803f264: 802cfbc0 call 802cfbc + 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 + 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 + 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 + TEST_ADDR1); + + for (i = 0; i < LOOPMAX; i++) + 803f2b4: e03fff15 stw zero,-4(fp) + 803f2b8: 00008606 br 803f4d4 + { + 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 + 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 + 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 + { + /* 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 + 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 + /* exit(1); */ + goto exitloop; + 803f334: 00006b06 br 803f4e4 + } + + /* 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 + 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 + { + ns_printf (pio,"t_setsockopt() SO_NONBLOCK (1) failed, Err: %d\n", + 803f370: e13ffe17 ldw r4,-8(fp) + 803f374: 802cfbc0 call 802cfbc + 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 + 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 + { + int sa_size = sizeof(struct sockaddr_in); + 803f39c: 00800404 movi r2,16 + 803f3a0: e0bee315 stw r2,-1140(fp) + tk_yield(); + 803f3a4: 8027ce40 call 8027ce4 + + 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 + 803f3d0: e0bffd15 stw r2,-12(fp) + if (iRet < 0) + 803f3d4: e0bffd17 ldw r2,-12(fp) + 803f3d8: 10000c0e bge r2,zero,803f40c + { + if (t_errno(s) != EWOULDBLOCK) + 803f3dc: e13ffe17 ldw r4,-8(fp) + 803f3e0: 802cfbc0 call 802cfbc + 803f3e4: 108002e0 cmpeqi r2,r2,11 + 803f3e8: 1000081e bne r2,zero,803f40c + { + /* 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 + 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 + 803f408: 00003606 br 803f4e4 + /* exit(1); */ + goto exitloop; + } + } + if (iRet > 0) + 803f40c: e0bffd17 ldw r2,-12(fp) + 803f410: 0080160e bge zero,r2,803f46c + { + 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 + 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 + while (cticks < endtime) + 803f46c: d0e07d17 ldw r3,-32268(gp) + 803f470: e0bffc17 ldw r2,-16(fp) + 803f474: 18bfc936 bltu r3,r2,803f39c + } + } /* 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 + 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 + { + ns_printf (pio,"t_setsockopt() SO_NONBLOCK (0) failed, Err: %d\n", + 803f4ac: e13ffe17 ldw r4,-8(fp) + 803f4b0: 802cfbc0 call 802cfbc + 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 + 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 + 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 + 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 + 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 + { + ns_printf (pio,"t_setsockopt() IP_DROP_MEMBERSHIP failed, Err: %d\n", + 803f530: e13ffe17 ldw r4,-8(fp) + 803f534: 802cfbc0 call 802cfbc + 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 (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 + 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 + { + ns_printf (pio,"t_socketclose() failed. Err: %d\n", t_errno(s)); + 803f564: e13ffe17 ldw r4,-8(fp) + 803f568: 802cfbc0 call 802cfbc + 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 + } + + 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 : + * 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 : + * 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 : + * 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 : + * 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 + 803f664: e0bff917 ldw r2,-28(fp) + 803f668: 10800117 ldw r2,4(r2) + 803f66c: 10000426 beq r2,zero,803f680 + { + 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 + 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 + (bcount & 0xFFFF0000) || + 803f6dc: e0bfff17 ldw r2,-4(fp) + 803f6e0: 10bfffec andhi r2,r2,65535 + if((location >= file_size) || + 803f6e4: 1000021e bne r2,zero,803f6f0 + (bcount & 0xFFFF0000) || + 803f6e8: e0bfff17 ldw r2,-4(fp) + 803f6ec: 1000021e bne r2,zero,803f6f8 + (bcount == 0)) + { + return 0; + 803f6f0: 0005883a mov r2,zero + 803f6f4: 00002006 br 803f778 + /* 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 + { + 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 + 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 + 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 : + * 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 + return 0; /* not writable device */ + 803f7c8: 0005883a mov r2,zero + 803f7cc: 00000906 br 803f7f4 + + 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 : + * 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 : + * 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 : + * 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 + return EOF; + 803f898: 00bfffc4 movi r2,-1 + 803f89c: 00001a06 br 803f908 + + 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 + { + 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 + 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 : + * 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 : + +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 + { + 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 + 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 + 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 + 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 + 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 + 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 + } + + if ( dots < 1 || dots > 3 ) + 803fa20: e0bffe17 ldw r2,-8(fp) + 803fa24: 0080030e bge zero,r2,803fa34 + 803fa28: e0bffe17 ldw r2,-8(fp) + 803fa2c: 10800110 cmplti r2,r2,4 + 803fa30: 1000031e bne r2,zero,803fa40 + return("string must contain 1 - 3 dots (.)"); + 803fa34: 00820174 movhi r2,2053 + 803fa38: 10adf604 addi r2,r2,-18472 + 803fa3c: 00007906 br 803fc24 + + 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 + 803fa50: e0bffc15 stw r2,-16(fp) + 803fa54: e0bffc17 ldw r2,-16(fp) + 803fa58: 10804010 cmplti r2,r2,256 + 803fa5c: 1000021e bne r2,zero,803fa68 + return(toobig); + 803fa60: e0bffd17 ldw r2,-12(fp) + 803fa64: 00006f06 br 803fc24 + + 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 + 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 + 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 + 803fab4: e0bffe17 ldw r2,-8(fp) + 803fab8: 10800098 cmpnei r2,r2,2 + 803fabc: 1000021e bne r2,zero,803fac8 + 803fac0: e03ffb45 stb zero,-19(fp) + 803fac4: 00001806 br 803fb28 + else + { + number = atoi(cp); + 803fac8: e13fff17 ldw r4,-4(fp) + 803facc: 8042aa40 call 8042aa4 + 803fad0: e0bffc15 stw r2,-16(fp) + while (*cp != '.')cp++; /* find dot (end of number) */ + 803fad4: 00000306 br 803fae4 + 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 + 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 + 803fb18: e0bffd17 ldw r2,-12(fp) + 803fb1c: 00004106 br 803fc24 + 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 + 803fb34: e03ffb85 stb zero,-18(fp) + 803fb38: 00001806 br 803fb9c + else + { + number = atoi(cp); + 803fb3c: e13fff17 ldw r4,-4(fp) + 803fb40: 8042aa40 call 8042aa4 + 803fb44: e0bffc15 stw r2,-16(fp) + while (*cp != '.')cp++; /* find dot (end of number) */ + 803fb48: 00000306 br 803fb58 + 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 + 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 + 803fb8c: e0bffd17 ldw r2,-12(fp) + 803fb90: 00002406 br 803fc24 + 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 + 803fba4: e0bffc15 stw r2,-16(fp) + 803fba8: e0bffc17 ldw r2,-16(fp) + 803fbac: 10804010 cmplti r2,r2,256 + 803fbb0: 1000021e bne r2,zero,803fbbc + return(toobig); + 803fbb4: e0bffd17 ldw r2,-12(fp) + 803fbb8: 00001a06 br 803fc24 + 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 + 803fbd8: e0bff917 ldw r2,-28(fp) + 803fbdc: 00c00204 movi r3,8 + 803fbe0: 10c00015 stw r3,0(r2) + 803fbe4: 00000b06 br 803fc14 + 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 + 803fbf8: e0bff917 ldw r2,-28(fp) + 803fbfc: 00c00404 movi r3,16 + 803fc00: 10c00015 stw r3,0(r2) + 803fc04: 00000306 br 803fc14 + 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 : + * 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 + 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 + 803fc78: 1000021e bne r2,zero,803fc84 + { + return ipaddr ; + 803fc7c: e0bfff17 ldw r2,-4(fp) + 803fc80: 00000106 br 803fc88 + } + 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 : + * 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 + return (char)(val + '0'); + 803fcc4: e0bfff17 ldw r2,-4(fp) + 803fcc8: 10800c04 addi r2,r2,48 + 803fccc: 00000206 br 803fcd8 + 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 : + +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 + { + 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 + 803fd28: e0bfff15 stw r2,-4(fp) + if(err == NULL) + 803fd2c: e0bfff17 ldw r2,-4(fp) + 803fd30: 1000071e bne r2,zero,803fd50 + { + /* 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 + return 0; + 803fd48: 0005883a mov r2,zero + 803fd4c: 00000606 br 803fd68 + } + 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 + 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 : + * 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 + { + 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 + 803fdbc: e0bffe15 stw r2,-8(fp) + if (strlen(cp) < size) + 803fdc0: e13ffe17 ldw r4,-8(fp) + 803fdc4: 8002dac0 call 8002dac + 803fdc8: 1007883a mov r3,r2 + 803fdcc: e0bffa17 ldw r2,-24(fp) + 803fdd0: 1880052e bgeu r3,r2,803fde8 + { + strcpy(str, cp); + 803fdd4: e17ffe17 ldw r5,-8(fp) + 803fdd8: e13ffb17 ldw r4,-20(fp) + 803fddc: 8042f600 call 8042f60 + return (str); + 803fde0: e0bffb17 ldw r2,-20(fp) + 803fde4: 00000106 br 803fdec + 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 : + * + * 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 + { + 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 + 803fe40: 00000106 br 803fe48 + 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 : + * + */ + +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 + 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 + 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 + { + 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 + 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 : + * + * 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 + { + 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 : + *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 + { + 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 + { + 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 + { + return dw; + 8040008: e0bffb17 ldw r2,-20(fp) + 804000c: 00002806 br 80400b0 + } + } + 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 + 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 + { + 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 + } + 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 : + * 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 + { + 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 + 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 + 8040200: e0fffa8b ldhu r3,-22(fp) + 8040204: 00bfffd4 movui r2,65535 + 8040208: 1880041e bne r3,r2,804021c + 804020c: e0bffd0b ldhu r2,-12(fp) + 8040210: 1000021e bne r2,zero,804021c + 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 + *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 : + 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 + 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 +#endif + + LOCK_NET_RESOURCE(NET_RESID); + 80402e0: 0009883a mov r4,zero + 80402e4: 8028f380 call 8028f38 + 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 + { + 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 + 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 + 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 + 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 + { +#ifdef NPDEBUG + if (NDEBUG & (INFOMSG|PROTERR)) + 8040344: d0a06617 ldw r2,-32360(gp) + 8040348: 1080050c andi r2,r2,20 + 804034c: 10000326 beq r2,zero,804035c + dprintf("UDP: Connection already exists.\n"); + 8040350: 01020174 movhi r4,2053 + 8040354: 212e1604 addi r4,r4,-18344 + 8040358: 8002d9c0 call 8002d9c +#endif + UNLOCK_NET_RESOURCE(NET_RESID); + 804035c: 0009883a mov r4,zero + 8040360: 8028ff40 call 8028ff4 + return(NULL); + 8040364: 0005883a mov r2,zero + 8040368: 00003506 br 8040440 + 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 + } + } + + con = (UDPCONN)UC_ALLOC(sizeof(struct udp_conn)); + 8040380: 01000804 movi r4,32 + 8040384: 802982c0 call 802982c + 8040388: e0bfff15 stw r2,-4(fp) + if (con == 0) + 804038c: e0bfff17 ldw r2,-4(fp) + 8040390: 10000a1e bne r2,zero,80403bc + { +#ifdef NPDEBUG + if (NDEBUG & INFOMSG) + 8040394: d0a06617 ldw r2,-32360(gp) + 8040398: 1080010c andi r2,r2,4 + 804039c: 10000326 beq r2,zero,80403ac + dprintf("UDP: Couldn't allocate conn storage.\n"); + 80403a0: 01020174 movhi r4,2053 + 80403a4: 212e1e04 addi r4,r4,-18312 + 80403a8: 8002d9c0 call 8002d9c +#endif + UNLOCK_NET_RESOURCE(NET_RESID); + 80403ac: 0009883a mov r4,zero + 80403b0: 8028ff40 call 8028ff4 + return(NULL); + 80403b4: 0005883a mov r2,zero + 80403b8: 00002106 br 8040440 + } + + if (ocon) /* ocon is end of list */ + 80403bc: e0bffe17 ldw r2,-8(fp) + 80403c0: 10000426 beq r2,zero,80403d4 + 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 + 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 + 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 : + * 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 + 8040470: d0a09e17 ldw r2,-32136(gp) + 8040474: 1000021e bne r2,zero,8040480 + { + dtrap(); /* bad programming! */ + 8040478: 8028cd40 call 8028cd4 + return; + 804047c: 00002606 br 8040518 + } +#endif /* NPDEBUG */ + + LOCK_NET_RESOURCE(NET_RESID); + 8040480: 0009883a mov r4,zero + 8040484: 8028f380 call 8028f38 + /* 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 + { + 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 + 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 + 80404c0: 00000106 br 80404c8 + break; + 80404c4: 0001883a nop + } + + if (!pcon) + 80404c8: e0bfff17 ldw r2,-4(fp) + 80404cc: 1000041e bne r2,zero,80404e0 + { + dtrap(); /* prog error - connenction not in list */ + 80404d0: 8028cd40 call 8028cd4 + UNLOCK_NET_RESOURCE(NET_RESID); + 80404d4: 0009883a mov r4,zero + 80404d8: 8028ff40 call 8028ff4 + return; + 80404dc: 00000e06 br 8040518 + } + + if (lcon) /* in con is not head of list */ + 80404e0: e0bffe17 ldw r2,-8(fp) + 80404e4: 10000526 beq r2,zero,80404fc + 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 + 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 + UNLOCK_NET_RESOURCE(NET_RESID); + 8040510: 0009883a mov r4,zero + 8040514: 8028ff40 call 8028ff4 +} + 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 : + */ + +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 + 804054c: e0bfff15 stw r2,-4(fp) + if (inp == 0) + 8040550: e0bfff17 ldw r2,-4(fp) + 8040554: 1000021e bne r2,zero,8040560 + return ENOMEM; + 8040558: 00800304 movi r2,12 + 804055c: 00001006 br 80405a0 + 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 + 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 : + * 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 + remque(inp); + 80405e4: e13ffe17 ldw r4,-8(fp) + 80405e8: 802a2c40 call 802a2c4 + INP_FREE (inp); + 80405ec: e13ffe17 ldw r4,-8(fp) + 80405f0: 80298600 call 8029860 +} + 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 : + +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 + 8040650: e0bffa17 ldw r2,-24(fp) + 8040654: 10800417 ldw r2,16(r2) + 8040658: 10000226 beq r2,zero,8040664 + return (EINVAL); + 804065c: 00800584 movi r2,22 + 8040660: 00006906 br 8040808 + if (nam == 0) + 8040664: e0bff917 ldw r2,-28(fp) + 8040668: 10003926 beq r2,zero,8040750 + 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 + { + 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 + 8040694: 1007883a mov r3,r2 + 8040698: e0bffb17 ldw r2,-20(fp) + 804069c: 10800117 ldw r2,4(r2) + 80406a0: 18800226 beq r3,r2,80406ac + return (EADDRNOTAVAIL); + 80406a4: 00801f44 movi r2,125 + 80406a8: 00005706 br 8040808 + } + 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 + { + 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 + ((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 + (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 + { + 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 + 8040730: 10000226 beq r2,zero,804073c + 0L, 0, sin->sin_addr.s_addr, lport, wild)) + { + return (EADDRINUSE); + 8040734: 00801c04 movi r2,112 + 8040738: 00003306 br 8040808 + } + } + 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 + goto noname; + 8040750: 0001883a nop +noname: + if (lport == 0) + 8040754: e0bfff8b ldhu r2,-2(fp) + 8040758: 1000271e bne r2,zero,80407f8 + { + 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 + 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 + { + 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 + 80407f4: 103fd91e bne r2,zero,804075c + } + 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 : + */ + +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 + return (EINVAL); + 8040850: 00800584 movi r2,22 + 8040854: 00006406 br 80409e8 + 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 + return (EAFNOSUPPORT); + 8040874: 00801a84 movi r2,106 + 8040878: 00005b06 br 80409e8 + 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 + return (EADDRNOTAVAIL); + 804088c: 00801f44 movi r2,125 + 8040890: 00005506 br 80409e8 + * 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 + { + if (inp && inp->ifp) + 80408a0: e0bffb17 ldw r2,-20(fp) + 80408a4: 10000926 beq r2,zero,80408cc + 80408a8: e0bffb17 ldw r2,-20(fp) + 80408ac: 10800a17 ldw r2,40(r2) + 80408b0: 10000626 beq r2,zero,80408cc + 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 + else + return (EADDRNOTAVAIL); + 80408cc: 00801f44 movi r2,125 + 80408d0: 00004506 br 80409e8 + } + 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 + return (EADDRNOTAVAIL); + 80408e4: 00801f44 movi r2,125 + 80408e8: 00003f06 br 80409e8 + + + 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 + { +#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 + 8040910: e0bffd15 stw r2,-12(fp) + if (!npnet) + 8040914: e0bffd17 ldw r2,-12(fp) + 8040918: 1000021e bne r2,zero,8040924 + return EADDRNOTAVAIL; + 804091c: 00801f44 movi r2,125 + 8040920: 00003106 br 80409e8 + 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 +#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 + 8040984: 10000226 beq r2,zero,8040990 + 0)) + { + return (EADDRINUSE); + 8040988: 00801c04 movi r2,112 + 804098c: 00001606 br 80409e8 + } + 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 + { + 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 + (void)in_pcbbind(inp, (struct mbuf *)0); + 80409ac: 000b883a mov r5,zero + 80409b0: e13ffb17 ldw r4,-20(fp) + 80409b4: 804060c0 call 804060c + 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 : + * 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_pcbdetach (inp); + 8040a38: e13fff17 ldw r4,-4(fp) + 8040a3c: 80405b40 call 80405b4 +} + 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 : + */ + +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 + 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 : + +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 + 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 : + 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 + { + 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 + 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 + 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 + { + if (laddr == INADDR_ANY) + 8040bec: e0bff717 ldw r2,-36(fp) + 8040bf0: 1000041e bne r2,zero,8040c04 + wildcard++; + 8040bf4: e0bffc17 ldw r2,-16(fp) + 8040bf8: 10800044 addi r2,r2,1 + 8040bfc: e0bffc15 stw r2,-16(fp) + 8040c00: 00000a06 br 8040c2c + 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 + continue; + 8040c14: 00003306 br 8040ce4 + } + else + { + if (laddr != INADDR_ANY) + 8040c18: e0bff717 ldw r2,-36(fp) + 8040c1c: 10000326 beq r2,zero,8040c2c + 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 + { + if (faddr == INADDR_ANY) + 8040c38: e0bff917 ldw r2,-28(fp) + 8040c3c: 1000041e bne r2,zero,8040c50 + wildcard++; + 8040c40: e0bffc17 ldw r2,-16(fp) + 8040c44: 10800044 addi r2,r2,1 + 8040c48: e0bffc15 stw r2,-16(fp) + 8040c4c: 00000f06 br 8040c8c + 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 + 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 + { + continue; + 8040c74: 00001806 br 8040cd8 + } + } else + { + if (faddr != INADDR_ANY) + 8040c78: e0bff917 ldw r2,-28(fp) + 8040c7c: 10000326 beq r2,zero,8040c8c + 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 + 8040c94: e0800217 ldw r2,8(fp) + 8040c98: 1080004c andi r2,r2,1 + 8040c9c: 10001026 beq r2,zero,8040ce0 + continue; + if (wildcard < matchwild) + 8040ca0: e0fffc17 ldw r3,-16(fp) + 8040ca4: e0bffd17 ldw r2,-12(fp) + 8040ca8: 18800e0e bge r3,r2,8040ce4 + { + 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 + 8040cc4: 00000706 br 8040ce4 + continue; + 8040cc8: 0001883a nop + 8040ccc: 00000506 br 8040ce4 + continue; + 8040cd0: 0001883a nop + 8040cd4: 00000306 br 8040ce4 + continue; + 8040cd8: 0001883a nop + 8040cdc: 00000106 br 8040ce4 + 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 + 8040cfc: 00000106 br 8040d04 + break; + 8040d00: 0001883a nop + } + } + if (match == NULL) + 8040d04: e0bffe17 ldw r2,-8(fp) + 8040d08: 1000021e bne r2,zero,8040d14 + return match; + 8040d0c: e0bffe17 ldw r2,-8(fp) + 8040d10: 00002406 br 8040da4 + + 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 + { + inpcb_cachehits++; + 8040d24: d0a09f17 ldw r2,-32132(gp) + 8040d28: 10800044 addi r2,r2,1 + 8040d2c: d0a09f15 stw r2,-32132(gp) + 8040d30: 00001b06 br 8040da0 + } + 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 : + * + * 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 : + * + * 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 : + * + * 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 + { +#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 + } + + /* allocate a structure to represent the open file */ + vop = VFS_VFS_OPEN_ALLOC(); + 8040e24: 01000504 movi r4,20 + 8040e28: 802982c0 call 802982c + 8040e2c: e0bfff15 stw r2,-4(fp) + + /* if the allocation succeeded */ + if (vop) + 8040e30: e0bfff17 ldw r2,-4(fp) + 8040e34: 10000826 beq r2,zero,8040e58 + { + /* 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 : + * + * 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 + return NULL; + 8040e98: 0005883a mov r2,zero + 8040e9c: 00002106 br 8040f24 + * 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 + * 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 +#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 + 8040ee4: 00000306 br 8040ef4 + dtrap(); /* you have a weird compiler */ + 8040ee8: 8028cd40 call 8028cd4 + return NULL; + 8040eec: 0005883a mov r2,zero + 8040ef0: 00000c06 br 8040f24 + return NULL; + 8040ef4: 0005883a mov r2,zero + 8040ef8: 00000a06 br 8040f24 + } + + /* 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 + 8040f04: e0bffc15 stw r2,-16(fp) + + /* if the allocation succeeded */ + if (buffer) + 8040f08: e0bffc17 ldw r2,-16(fp) + 8040f0c: 10000426 beq r2,zero,8040f20 + { + /* 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 : + * + * 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 + npfree(buffer); + 8040f58: e13fff17 ldw r4,-4(fp) + 8040f5c: 80298600 call 8029860 + + /* 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 : + * 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 + + /* 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 + 8040fb4: 10000326 beq r2,zero,8040fc4 + { + dtrap(); + 8040fb8: 8028cd40 call 8028cd4 + return NULL; + 8040fbc: 0005883a mov r2,zero + 8040fc0: 0000ba06 br 80412ac + } + + /* 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 + 8040fcc: e0bffe15 stw r2,-8(fp) + + /* if the file exists */ + if (vfp) + 8040fd0: e0bffe17 ldw r2,-8(fp) + 8040fd4: 10004a26 beq r2,zero,8041100 + +#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 + 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 + { + set_vfopen_error(ENP_FILEIO); + 8041008: 013ff984 movi r4,-26 + 804100c: 8040db40 call 8040db4 +#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 + } + +#endif /* HT_RWVFS */ + + /* allocate a VFILE structure to represent the open file */ + vop = vf_alloc_and_link_vop(); + 8041018: 8040e000 call 8040e00 + 804101c: e0bffd15 stw r2,-12(fp) + + /* check for failure */ + if (!vop) + 8041020: e0bffd17 ldw r2,-12(fp) + 8041024: 1000041e bne r2,zero,8041038 + { + set_vfopen_error(ENP_NOMEM); + 8041028: 013ffb04 movi r4,-20 + 804102c: 8040db40 call 8040db4 +#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 + } + + /* 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 + { + if (vfp->data) + 8041070: e0bffe17 ldw r2,-8(fp) + 8041074: 10800617 ldw r2,24(r2) + 8041078: 10000726 beq r2,zero,8041098 + { + 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 + { + /* 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 + +#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 + { + /* 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 + { + 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 + { + return vop; + 8041148: e0bffd17 ldw r2,-12(fp) + 804114c: 00005706 br 80412ac + 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 + +#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 + { + /* 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 + { + set_vfopen_error(ENP_NOMEM); + 804118c: 013ffb04 movi r4,-20 + 8041190: 8040db40 call 8040db4 +#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 + } + + /* 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 + 80411a4: 10800470 cmpltui r2,r2,17 + 80411a8: 1000041e bne r2,zero,80411bc + { + set_vfopen_error(ENP_PARAM); + 80411ac: 013ffd84 movi r4,-10 + 80411b0: 8040db40 call 8040db4 +#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 + } + + /* 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 + 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 + { + set_vfopen_error(ENP_NOMEM); + 80411d0: 013ffb04 movi r4,-20 + 80411d4: 8040db40 call 8040db4 +#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 + } + + /* allocate a VFILE structure to represent the open file */ + vop = vf_alloc_and_link_vop(); + 80411e0: 8040e000 call 8040e00 + 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 + { + VFS_VFS_FILE_FREE(vfp); /* free the allocated vfs_file entry */ + 80411f0: e13ffe17 ldw r4,-8(fp) + 80411f4: 80298600 call 8029860 + set_vfopen_error(ENP_NOMEM); + 80411f8: 013ffb04 movi r4,-20 + 80411fc: 8040db40 call 8040db4 +#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 + } + + /* 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 + 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 + 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 + + /* 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 + /* 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 +#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 : + * 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 + + vfd = vfopen_locked(name,mode); + 80412e0: e17ffd17 ldw r5,-12(fp) + 80412e4: e13ffe17 ldw r4,-8(fp) + 80412e8: 8040f880 call 8040f88 + 80412ec: e0bfff15 stw r2,-4(fp) + + vfs_unlock(); + 80412f0: 01000144 movi r4,5 + 80412f4: 80293680 call 8029368 + + 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 : + * 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 + { + /* 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 + 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 + 804135c: 00000106 br 8041364 + 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 + + /* 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 + 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 + { + /* 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 + + /* 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 + ((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 + 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 + { + /* 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 + 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 + { + /* 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 + /* 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 + /* 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 + break; + 8041464: 0001883a nop + 8041468: 00000106 br 8041470 + break; + 804146c: 0001883a nop + + } + + if (vlast) /* unlink from list of open files */ + 8041470: e0bffe17 ldw r2,-8(fp) + 8041474: 10000526 beq r2,zero,804148c + 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 + 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 + /* 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 + 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 : + * + * 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 + + vfclose_locked(vfd); + 80414e8: e13fff17 ldw r4,-4(fp) + 80414ec: 80413100 call 8041310 + + vfs_unlock(); + 80414f0: 01000144 movi r4,5 + 80414f4: 80293680 call 8029368 +} + 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 : + * + * 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 + + printf("vfflush(): This function needs to be implemented\n"); + 804152c: 01020174 movhi r4,2053 + 8041530: 212e2804 addi r4,r4,-18272 + 8041534: 8002d9c0 call 8002d9c + + vfs_unlock(); + 8041538: 01000144 movi r4,5 + 804153c: 80293680 call 8029368 + 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 : + +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 + 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 + 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 + 80415c8: e13ffb17 ldw r4,-20(fp) + 80415cc: 80421c00 call 80421c0 + 80415d0: e0bfff15 stw r2,-4(fp) + 80415d4: e0bfff17 ldw r2,-4(fp) + 80415d8: 10bfffd8 cmpnei r2,r2,-1 + 80415dc: 103fea1e bne r2,zero,8041588 + 80415e0: 00000106 br 80415e8 + 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 + 80415fc: e0fffe17 ldw r3,-8(fp) + 8041600: e0bffd17 ldw r2,-12(fp) + 8041604: 18800226 beq r3,r2,8041610 + 8041608: e0bffd17 ldw r2,-12(fp) + 804160c: 00000106 br 8041614 + 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 : + * + * 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 + 8041648: e0bfff15 stw r2,-4(fp) + 804164c: e0bfff17 ldw r2,-4(fp) + 8041650: 10bfffd8 cmpnei r2,r2,-1 + 8041654: 1000021e bne r2,zero,8041660 + { + return 1; + 8041658: 00800044 movi r2,1 + 804165c: 00000106 br 8041664 + } + 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 : + * + * 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 + { + /* 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 + 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 + } +} + 80416c0: 0001883a nop + 80416c4: e037883a mov sp,fp + 80416c8: df000017 ldw fp,0(sp) + 80416cc: dec00104 addi sp,sp,4 + 80416d0: f800283a ret + +080416d4 : + * 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 + 80416f4: 10800044 addi r2,r2,1 + 80416f8: 1009883a mov r4,r2 + 80416fc: 8042c980 call 8042c98 + 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 + 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 + + /* 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 + 8041720: e0bffb15 stw r2,-20(fp) + 8041724: e0bffb17 ldw r2,-20(fp) + 8041728: 1000061e bne r2,zero,8041744 + { + vfs_unlock(); + 804172c: 01000144 movi r4,5 + 8041730: 80293680 call 8029368 +#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 + return -1; + 804173c: 00bfffc4 movi r2,-1 + 8041740: 00005f06 br 80418c0 +#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 + { + if (vtmp == vfp) + 8041760: e0fffe17 ldw r3,-8(fp) + 8041764: e0bffb17 ldw r2,-20(fp) + 8041768: 18800826 beq r3,r2,804178c + 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 + 8041788: 00000106 br 8041790 + 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 + { + dtrap(); + 8041798: 8028cd40 call 8028cd4 + vfs_unlock(); + 804179c: 01000144 movi r4,5 + 80417a0: 80293680 call 8029368 + free(name); + 80417a4: e13ffc17 ldw r4,-16(fp) + 80417a8: 8042ca80 call 8042ca8 + return -1; + 80417ac: 00bfffc4 movi r2,-1 + 80417b0: 00004306 br 80418c0 + 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 + { + /* 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 + } +#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 + { + vfs_unlock(); + 80417f8: 01000144 movi r4,5 + 80417fc: 80293680 call 8029368 + free(name); + 8041800: e13ffc17 ldw r4,-16(fp) + 8041804: 8042ca80 call 8042ca8 + return -1; + 8041808: 00bfffc4 movi r2,-1 + 804180c: 00002c06 br 80418c0 + } + + /* 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 + 8041824: e0bffb17 ldw r2,-20(fp) + 8041828: 10800617 ldw r2,24(r2) + 804182c: 10000726 beq r2,zero,804184c + { + /* 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 + } + + /* 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 + { + /* 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 + 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 + 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 + 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 + + /* 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 + free(name); + 80418b4: e13ffc17 ldw r4,-16(fp) + 80418b8: 8042ca80 call 8042ca8 + 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 : + * 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 + + /* if the file is in our list of open files */ + if (isvfile_locked(vfd)) + 80418fc: e13ff817 ldw r4,-32(fp) + 8041900: 80425400 call 8042540 + 8041904: 10004d26 beq r2,zero,8041a3c + { + +#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 + { + vfs_unlock(); + 8041914: 01000144 movi r4,5 + 8041918: 80293680 call 8029368 + IN_PROFILER(PF_FS, PF_EXIT); + return 0; + 804191c: 0005883a mov r2,zero + 8041920: 00004906 br 8041a48 + } +#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 + { + 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 + IN_PROFILER(PF_FS, PF_EXIT); + return rc; + 804196c: e0bffd17 ldw r2,-12(fp) + 8041970: 00003506 br 8041a48 +#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 + { + vfs_unlock(); + 8041984: 01000144 movi r4,5 + 8041988: 80293680 call 8029368 + IN_PROFILER(PF_FS, PF_EXIT); + return 0; + 804198c: 0005883a mov r2,zero + 8041990: 00002d06 br 8041a48 + } +#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 + 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 + 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 + 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 + } + + vfs_unlock(); + 8041a3c: 01000144 movi r4,5 + 8041a40: 80293680 call 8029368 + +#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 : + * 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 + 8041a84: 1000021e bne r2,zero,8041a90 + { +#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 + } + /* 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 + { + 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 + +#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 + { + return 0; + 8041ae4: 0005883a mov r2,zero + 8041ae8: 0000c206 br 8041df4 + } + + 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 + { + 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 + } + + /* 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 + { + return 0; + 8041b38: 0005883a mov r2,zero + 8041b3c: 0000ad06 br 8041df4 + } + + /* 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 + { + /* 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 + 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 + { + 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 + } + + /* 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 + + /* return the number of "items" written */ + return items; + 8041c38: e0bff517 ldw r2,-44(fp) + 8041c3c: 00006d06 br 8041df4 + } + + /* 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 + { + /* 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 + 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 + { + 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 + } + + /* 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 + + /* 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 + { + /* 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 + } + + /* 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 + + /* 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 + { + /* 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 : + * 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 + + /* 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 + 8041e44: e0bfff15 stw r2,-4(fp) + + /* unlock the VFS */ + vfs_unlock(); + 8041e48: 01000144 movi r4,5 + 8041e4c: 80293680 call 8029368 + + 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 : + * 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 + + if (isvfile_locked(vfd)) + 8041e8c: e13ffd17 ldw r4,-12(fp) + 8041e90: 80425400 call 8042540 + 8041e94: 10004126 beq r2,zero,8041f9c + { +#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 + { + vfs_unlock(); + 8041ea4: 01000144 movi r4,5 + 8041ea8: 80293680 call 8029368 + return -1; + 8041eac: 00bfffc4 movi r2,-1 + 8041eb0: 00003d06 br 8041fa8 + } +#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 + { + 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 + return rc; + 8041ef8: e0bffe17 ldw r2,-8(fp) + 8041efc: 00002a06 br 8041fa8 + } +#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 + 8041f0c: e0bffb17 ldw r2,-20(fp) + 8041f10: 108000a0 cmpeqi r2,r2,2 + 8041f14: 1000111e bne r2,zero,8041f5c + 8041f18: e0bffb17 ldw r2,-20(fp) + 8041f1c: 10001b1e bne r2,zero,8041f8c + { + 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 + 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 + 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 + return(0); + 8041f94: 0005883a mov r2,zero + 8041f98: 00000306 br 8041fa8 + } + + vfs_unlock(); + 8041f9c: 01000144 movi r4,5 + 8041fa0: 80293680 call 8029368 + +#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 : + * 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 + + if (isvfile_locked(vfd)) + 8041fd8: e13ffd17 ldw r4,-12(fp) + 8041fdc: 80425400 call 8042540 + 8041fe0: 10003126 beq r2,zero,80420a8 + { +#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 + { + vfs_unlock(); + 8041ff0: 01000144 movi r4,5 + 8041ff4: 80293680 call 8029368 + return -1; + 8041ff8: 00bfffc4 movi r2,-1 + 8041ffc: 00002d06 br 80420b4 + } +#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 + { + 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 + return rc; + 804203c: e0bffe17 ldw r2,-8(fp) + 8042040: 00001c06 br 80420b4 + } +#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 + { + vfs_unlock(); + 804206c: 01000144 movi r4,5 + 8042070: 80293680 call 8029368 + + 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 + } + else + { + vfs_unlock(); + 8042084: 01000144 movi r4,5 + 8042088: 80293680 call 8029368 + + 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 + } + } + + vfs_unlock(); + 80420a8: 01000144 movi r4,5 + 80420ac: 80293680 call 8029368 + +#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 : + * 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 + 80420e4: 10002f26 beq r2,zero,80421a4 + { +#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 + { + return EOF; + 80420f4: 00bfffc4 movi r2,-1 + 80420f8: 00002c06 br 80421ac + } +#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 + { + 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 +#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 + return EOF; + 8042140: 00bfffc4 movi r2,-1 + 8042144: 00001906 br 80421ac + } + 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 + chr = EOF; + 8042170: 00bfffc4 movi r2,-1 + 8042174: e0bfff15 stw r2,-4(fp) + 8042178: 00000806 br 804219c + 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 + +#ifdef HT_LOCALFS + /* default to call on local system */ + return(getc((FILE*)vfd)); +#else + dtrap(); /* can this happen? */ + 80421a4: 8028cd40 call 8028cd4 + 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 : + * 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 + + /* get the character */ + rc = vgetc_locked(vfd); + 80421dc: e13ffe17 ldw r4,-8(fp) + 80421e0: 80420c80 call 80420c8 + 80421e4: e0bfff15 stw r2,-4(fp) + + /* unlock the VFS */ + vfs_unlock(); + 80421e8: 01000144 movi r4,5 + 80421ec: 80293680 call 8029368 + 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 : + * 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 + 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 + { + cp = strippath(name); + 8042254: e13ffd17 ldw r4,-12(fp) + 8042258: 80423740 call 8042374 + 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 + { + /* 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 + 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 + name++; + 80422a0: e0bffd17 ldw r2,-12(fp) + 80422a4: 10800044 addi r2,r2,1 + 80422a8: e0bffd15 stw r2,-12(fp) + 80422ac: 00000206 br 80422b8 + } + 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 + 80422c4: 10000326 beq r2,zero,80422d4 + { + dtrap(); /* is this still allowed? */ + 80422c8: 8028cd40 call 8028cd4 + return NULL; + 80422cc: 0005883a mov r2,zero + 80422d0: 00001106 br 8042318 + } + + 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 + { + 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 + 80422f4: 1000021e bne r2,zero,8042300 + return vp; + 80422f8: e0bfff17 ldw r2,-4(fp) + 80422fc: 00000606 br 8042318 + 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 + } + + 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 : + * 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 + + /* do the lookup */ + vp = vfslookup_locked(name); + 8042348: e13ffe17 ldw r4,-8(fp) + 804234c: 80422080 call 8042208 + 8042350: e0bfff15 stw r2,-4(fp) + + /* unlock the VFS */ + vfs_unlock(); + 8042354: 01000144 movi r4,5 + 8042358: 80293680 call 8029368 + 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 : + * 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 + 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 + { + 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 + 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 + 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 + 80423ec: e0bffc15 stw r2,-16(fp) + if (ptmp) + 80423f0: e0bffc17 ldw r2,-16(fp) + 80423f4: 10000526 beq r2,zero,804240c + 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 + else + dirlen = strlen(path); + 804240c: e13fff17 ldw r4,-4(fp) + 8042410: 8002dac0 call 8002dac + 8042414: e0bffd15 stw r2,-12(fp) + + while (*ntmp == '/') ntmp++; /* strip leading slash */ + 8042418: 00000306 br 8042428 + 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 + 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 + 8042458: 1000091e bne r2,zero,8042480 + { + 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 + } + else + return NULL; /* didn't match */ + 8042480: 0005883a mov r2,zero + 8042484: 00002906 br 804252c + 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 + 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 + 80424b8: 00000106 br 80424c0 + 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 + { + while (*ntmp == '\\' || *ntmp == '/') + 80424d8: 00000306 br 80424e8 + 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 + 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 + return ntmp; + 8042520: e0bffe17 ldw r2,-8(fp) + 8042524: 00000106 br 804252c + } + 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 : + * 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 + if (vtmp == vfp) + 804255c: e0ffff17 ldw r3,-4(fp) + 8042560: e0bffe17 ldw r2,-8(fp) + 8042564: 1880021e bne r3,r2,8042570 + return TRUE; + 8042568: 00800044 movi r2,1 + 804256c: 00000606 br 8042588 + 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 + + 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 : + * 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 + + /* do the lookup */ + rc = isvfile_locked(vfp); + 80425b4: e13ffe17 ldw r4,-8(fp) + 80425b8: 80425400 call 8042540 + 80425bc: e0bfff15 stw r2,-4(fp) + + /* unlock the VFS */ + vfs_unlock(); + 80425c0: 01000144 movi r4,5 + 80425c4: 80293680 call 8029368 + 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 : + * 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 + + if (isvfile_locked(vfd)) + 80425fc: e13fff17 ldw r4,-4(fp) + 8042600: 80425400 call 8042540 + 8042604: 10000526 beq r2,zero,804261c + { + vfs_unlock(); + 8042608: 01000144 movi r4,5 + 804260c: 80293680 call 8029368 + + return vfd->error; + 8042610: e0bfff17 ldw r2,-4(fp) + 8042614: 10800417 ldw r2,16(r2) + 8042618: 00000306 br 8042628 + } + + vfs_unlock(); + 804261c: 01000144 movi r4,5 + 8042620: 80293680 call 8029368 + +#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 : + * + * 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 + + if (isvfile_locked(vfd)) + 8042658: e13fff17 ldw r4,-4(fp) + 804265c: 80425400 call 8042540 + 8042660: 10000526 beq r2,zero,8042678 + { + vfs_unlock(); + 8042664: 01000144 movi r4,5 + 8042668: 80293680 call 8029368 + + vfd->error = 0; + 804266c: e0bfff17 ldw r2,-4(fp) + 8042670: 10000415 stw zero,16(r2) + return; + 8042674: 00000206 br 8042680 + } + + vfs_unlock(); + 8042678: 01000144 movi r4,5 + 804267c: 80293680 call 8029368 + +#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 : + * 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 : +{ + 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 + 80426d0: d0a02717 ldw r2,-32612(gp) + 80426d4: 103ee83a callr r2 + 80426d8: 00000106 br 80426e0 + 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 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 + 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 + 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 + { + switch (cmd) + 8042744: e0bffb17 ldw r2,-20(fp) + 8042748: 108000e0 cmpeqi r2,r2,3 + 804274c: 1000041e bne r2,zero,8042760 + 8042750: e0bffb17 ldw r2,-20(fp) + 8042754: 10800120 cmpeqi r2,r2,4 + 8042758: 1000071e bne r2,zero,8042778 + 804275c: 00001e06 br 80427d8 + { + 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 + 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 + default: + ALT_ERRNO = EINVAL; + 80427d8: 80426b80 call 80426b8 + 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_ERRNO = EBADFD; + 80427f0: 80426b80 call 80426b8 + 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 : + * 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 + { + 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 + 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 + { + 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 + 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 + !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 + if (((name[len] == '/') || (name[len] == '\0')) && + 80428e4: 1000021e bne r2,zero,80428f0 + { + /* match found */ + + return next; + 80428e8: e0bfff17 ldw r2,-4(fp) + 80428ec: 00000706 br 804290c + } + 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 + } + + /* 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 : + * 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 + * 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 + { + 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_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_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 + 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_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 + + 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 : + * 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 + 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 + + case NIOS2_EXCEPTION_TLB_MISS: + case NIOS2_EXCEPTION_ECC_TLB_ERR: + return 0; + 8042a74: 0005883a mov r2,zero + 8042a78: 00000106 br 8042a80 + + 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 : + 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 : + 8042aa4: 01800284 movi r6,10 + 8042aa8: 000b883a mov r5,zero + 8042aac: 80433281 jmpi 8043328 + +08042ab0 <_atoi_r>: + 8042ab0: 01c00284 movi r7,10 + 8042ab4: 000d883a mov r6,zero + 8042ab8: 804330c1 jmpi 804330c <_strtol_r> + +08042abc : + 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 + 8042ae4: 103ee83a callr r2 + 8042ae8: 8009883a mov r4,r16 + 8042aec: 80469740 call 8046974 <_exit> + +08042af0 : + 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 : + 8042c98: 00820174 movhi r2,2053 + 8042c9c: 200b883a mov r5,r4 + 8042ca0: 1132af17 ldw r4,-13636(r2) + 8042ca4: 8007ddc1 jmpi 8007ddc <_malloc_r> + +08042ca8 : + 8042ca8: 00820174 movhi r2,2053 + 8042cac: 200b883a mov r5,r4 + 8042cb0: 1132af17 ldw r4,-13636(r2) + 8042cb4: 80071c41 jmpi 80071c4 <_free_r> + +08042cb8 : + 8042cb8: 30800130 cmpltui r2,r6,4 + 8042cbc: 10000b1e bne r2,zero,8042cec + 8042cc0: 2144b03a or r2,r4,r5 + 8042cc4: 108000cc andi r2,r2,3 + 8042cc8: 10001a1e bne r2,zero,8042d34 + 8042ccc: 20c00017 ldw r3,0(r4) + 8042cd0: 28800017 ldw r2,0(r5) + 8042cd4: 1880171e bne r3,r2,8042d34 + 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 + 8042cec: 30ffffc4 addi r3,r6,-1 + 8042cf0: 30000e26 beq r6,zero,8042d2c + 8042cf4: 29800003 ldbu r6,0(r5) + 8042cf8: 20800003 ldbu r2,0(r4) + 8042cfc: 30800f1e bne r6,r2,8042d3c + 8042d00: 18800044 addi r2,r3,1 + 8042d04: 20c00044 addi r3,r4,1 + 8042d08: 2089883a add r4,r4,r2 + 8042d0c: 00000506 br 8042d24 + 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 + 8042d24: 29400044 addi r5,r5,1 + 8042d28: 193ff91e bne r3,r4,8042d10 + 8042d2c: 0005883a mov r2,zero + 8042d30: f800283a ret + 8042d34: 30ffffc4 addi r3,r6,-1 + 8042d38: 003fee06 br 8042cf4 + 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 : + 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 : + 8042dfc: 2a403fcc andi r9,r5,255 + 8042e00: 2811883a mov r8,r5 + 8042e04: 208000cc andi r2,r4,3 + 8042e08: 48003726 beq r9,zero,8042ee8 + 8042e0c: 10000b26 beq r2,zero,8042e3c + 8042e10: 20800003 ldbu r2,0(r4) + 8042e14: 10003226 beq r2,zero,8042ee0 + 8042e18: 48804f26 beq r9,r2,8042f58 + 8042e1c: 4807883a mov r3,r9 + 8042e20: 00000306 br 8042e30 + 8042e24: 20800003 ldbu r2,0(r4) + 8042e28: 10002d26 beq r2,zero,8042ee0 + 8042e2c: 10c04a26 beq r2,r3,8042f58 + 8042e30: 21000044 addi r4,r4,1 + 8042e34: 208000cc andi r2,r4,3 + 8042e38: 103ffa1e bne r2,zero,8042e24 + 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 + 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 + 8042ebc: 20800003 ldbu r2,0(r4) + 8042ec0: 10000726 beq r2,zero,8042ee0 + 8042ec4: 48802426 beq r9,r2,8042f58 + 8042ec8: 42003fcc andi r8,r8,255 + 8042ecc: 00000106 br 8042ed4 + 8042ed0: 12002126 beq r2,r8,8042f58 + 8042ed4: 21000044 addi r4,r4,1 + 8042ed8: 20800003 ldbu r2,0(r4) + 8042edc: 103ffc1e bne r2,zero,8042ed0 + 8042ee0: 0005883a mov r2,zero + 8042ee4: f800283a ret + 8042ee8: 10000526 beq r2,zero,8042f00 + 8042eec: 20800003 ldbu r2,0(r4) + 8042ef0: 10001926 beq r2,zero,8042f58 + 8042ef4: 21000044 addi r4,r4,1 + 8042ef8: 208000cc andi r2,r4,3 + 8042efc: 103ffb1e bne r2,zero,8042eec + 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 + 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 + 8042f44: 20800003 ldbu r2,0(r4) + 8042f48: 10000326 beq r2,zero,8042f58 + 8042f4c: 21000044 addi r4,r4,1 + 8042f50: 20800003 ldbu r2,0(r4) + 8042f54: 103ffd1e bne r2,zero,8042f4c + 8042f58: 2005883a mov r2,r4 + 8042f5c: f800283a ret + +08042f60 : + 8042f60: 2906b03a or r3,r5,r4 + 8042f64: 18c000cc andi r3,r3,3 + 8042f68: 2005883a mov r2,r4 + 8042f6c: 18001d1e bne r3,zero,8042fe4 + 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 + 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 + 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 + 8042fe0: f800283a ret + 8042fe4: 200d883a mov r6,r4 + 8042fe8: 003ff506 br 8042fc0 + +08042fec : + 8042fec: 30003726 beq r6,zero,80430cc + 8042ff0: 2144b03a or r2,r4,r5 + 8042ff4: 108000cc andi r2,r2,3 + 8042ff8: 10001f1e bne r2,zero,8043078 + 8042ffc: 30800130 cmpltui r2,r6,4 + 8043000: 10001d1e bne r2,zero,8043078 + 8043004: 20800017 ldw r2,0(r4) + 8043008: 28c00017 ldw r3,0(r5) + 804300c: 10c0311e bne r2,r3,80430d4 + 8043010: 31bfff04 addi r6,r6,-4 + 8043014: 30002d26 beq r6,zero,80430cc + 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 + 804303c: 00002306 br 80430cc + 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 + 804305c: 31bfff04 addi r6,r6,-4 + 8043060: 30001a26 beq r6,zero,80430cc + 8043064: 1000191e bne r2,zero,80430cc + 8043068: 30800130 cmpltui r2,r6,4 + 804306c: 21000104 addi r4,r4,4 + 8043070: 29400104 addi r5,r5,4 + 8043074: 103ff226 beq r2,zero,8043040 + 8043078: 20800007 ldb r2,0(r4) + 804307c: 28c00007 ldb r3,0(r5) + 8043080: 31bfffc4 addi r6,r6,-1 + 8043084: 10c00d1e bne r2,r3,80430bc + 8043088: 30001026 beq r6,zero,80430cc + 804308c: 10000f26 beq r2,zero,80430cc + 8043090: 20800044 addi r2,r4,1 + 8043094: 218d883a add r6,r4,r6 + 8043098: 00000306 br 80430a8 + 804309c: 11800b26 beq r2,r6,80430cc + 80430a0: 10800044 addi r2,r2,1 + 80430a4: 18000926 beq r3,zero,80430cc + 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 + 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 + 80430e4: 003ff506 br 80430bc + +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 : + 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 : + 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 + 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 + 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 + 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 : + 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 : + 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 + 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 + 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 + 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 + 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 + 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> diff --git a/FPGA_nios/hit_pat/inc/control.h b/FPGA_nios/hit_pat/inc/control.h new file mode 100644 index 0000000..12a69f3 --- /dev/null +++ b/FPGA_nios/hit_pat/inc/control.h @@ -0,0 +1,39 @@ +/* + * control.h + * + * Created on: Aug 14, 2017 + * Author: mdziewiecki + */ + +#ifndef CONTROL_H_ +#define CONTROL_H_ + +//************************** + +#include "dev_commands.h" + +//************************** + +#define CONTROL_TASK_PRIORITY 10 +#define CONTROL_STACK_SIZE (6144+8192) + +#define CONTROL_MAX_DATA_LENGTH 16 //maximum command data length in WORDS (16-bit) +#define CONTROL_TIMEOUT 1000 //timeout to get command data in unknown time units + +#define CONTROL_PORT 4000 +#define DATA_PORT 4001 + +#define CONTROL_SWAP_BYTES 1 //playing around endianness in PC communication + +typedef struct +{ + unsigned short marker; //must be 0x5555 + unsigned short command; + unsigned short length; +} command_header; + + //Initialize control task +void control_init(); + + +#endif /* CONTROL_H_ */ diff --git a/FPGA_nios/hit_pat/inc/dev_commands.h b/FPGA_nios/hit_pat/inc/dev_commands.h new file mode 100644 index 0000000..378fef7 --- /dev/null +++ b/FPGA_nios/hit_pat/inc/dev_commands.h @@ -0,0 +1,136 @@ +#ifndef DEV_COMMANDS_H +#define DEV_COMMANDS_H + +//This file is derived from v.1 version and it's great if it's kept compatible +//All sizes are in HALF-WORDS (16-bit)! + +#define COMMAND_PING 0x0001 + //L: 0 + //D: [] + //Return the same + +#define COMMAND_DEBUG_LED_OFF 0x0010 + //L: 0 + //D: []; + //Turn off LED 0 + +#define COMMAND_DEBUG_LED_ON 0x0011 + //L: 0 + //D: []; + //Turn on LED 0 + +// ***DEVICE CONTROL*** + +#define COMMAND_LEDS_DISABLE 0x0110 + //L: 0 + //D: []; + //Disable LED4 blinking. Other LEDs must be explicitly switched off + +#define COMMAND_LEDS_ENABLE 0x0111 + //L: 0 + //D: []; + //Enable LED4 blinking + +// ***TRIGGER SETTING*** + +#define COMMAND_TRIGGER_DISABLE 0x0210 + //L: 0 + //D: []; + //Disable trigger generation in master mode + +#define COMMAND_TRIGGER_ENABLE 0x0211 + //L: 0 + //D: []; + //Enable trigger generation in master mode + +#define COMMAND_TRIGGER_SET_SLAVE 0x0220 + //L: 0 + //D: []; + //Set trigger to slave mode + +#define COMMAND_TRIGGER_SET_MASTER 0x0221 + //L: 0 + //D: []; + //Set trigger to master mode + +#define COMMAND_TRIGGER_SET_PERIOD 0x0230 + //L: 1 L: 0 + //D: [Period_ticks] D: [] + //Set trigger period for master mode in timer ticks + +#define COMMAND_TRIGGER_SET_TINT 0x0240 + //L: 1 L: 0 + //D: [Tint_ticks] D: [] + //Set integration time in timer ticks + +#define COMMAND_SET_GAIN 0x0250 + //L: 1 L:0 + //D: [gain] D: [] + +#define COMMAND_TRIGGER_SET_MASTER_DELAY 0x0260 + //L: 1 L: 0 + //D: [Tdelay_ticks] D: [] + //Set trigger delay time in timer ticks for master mode. + +#define COMMAND_TRIGGER_SET_SLAVE_DELAY 0x0270 + //L: 1 L: 0 + //D: [Tdelay_ticks] D: [] + //Set trigger delay time in timer ticks for slave mode. + + +// ***DAQ CONTROL*** + +#define COMMAND_DAQ_DISABLE 0x0310 + //L: 0 + //D: []; + //Disable sending data + +#define COMMAND_DAQ_ENABLE 0x0311 + //L: 0 + //D: []; + //Enable sending data + +#define COMMAND_DAQ_RESET_COUNTERS 0x0321 + //L: 0 + //D: [] + //Reset synchronization counters + +#define COMMAND_DAQ_FLUSH_DATA 0x0322 + //L: 0 + //D: [] + //Send all remaining data over data socket + +#define COMMAND_DAQ_CONFIG_PEER 0x0331 + //L: 5 L: 0 + //D: [ip ip ip ip port] D: [] + //Set connection settings (peer IP and port) for data transfer + //Warning: IP is sent as 4 shorts with MSB=0! + +// ***SLOW CONTROL*** + +#define COMMAND_SLOWCTRL_SNAPSHOT 0x0410 + //L: 0 L: 10 + //D:[] D: [(Readout of 5 ADC channels as 32-bit integers)] + //Slow control snapshot - read all channels of ADC + + +// ***DATA TRANSFER - SOCKET 1!!!!*** + +#define COMMAND_DATA_TRANSFER 0x8000 + //(no incoming packet) L: 64*5*2 + 6 + //(no incoming packet) D: [Read out single frame] + + +// *** SET_CLUSTER_THRESHOLD *** // +#define COMMAND_SET_CLUSTER_THRESHOLD 0x4001 + //L: 1 +#define COMMAND_SET_CLUSTER_SIZE 0x4002 + //L: 1 +#define COMMAND_SET_CALIBRATION_FACTOR 0x4003 + //L: 2* 16bit + + + + + +#endif // DEV_COMMANDS_H diff --git a/FPGA_nios/hit_pat/inc/network_utilities.h b/FPGA_nios/hit_pat/inc/network_utilities.h new file mode 100644 index 0000000..635bc05 --- /dev/null +++ b/FPGA_nios/hit_pat/inc/network_utilities.h @@ -0,0 +1,49 @@ +/****************************************************************************** +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. All use of this software and documentation is * +* subject to the License Agreement located at the end of this file below. * +****************************************************************************** +* Date - October 24, 2006 * +* Module - network_utilities.h * +* * +******************************************************************************/ + +#ifndef __NETWORK_UTILITIES_H__ +#define __NETWORK_UTILITIES_H__ + +#include + +error_t get_board_mac_addr(unsigned char mac_addr[6]); + +#endif /*__NETWORK_UTILITIES_H__ */ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ diff --git a/FPGA_nios/hit_pat/inc/sensor.h b/FPGA_nios/hit_pat/inc/sensor.h new file mode 100644 index 0000000..6338921 --- /dev/null +++ b/FPGA_nios/hit_pat/inc/sensor.h @@ -0,0 +1,67 @@ +/* + * sensor.h + * + * Created on: Aug 19, 2019 + * Author: mdziewiecki + */ + +#ifndef SENSOR_H_ +#define SENSOR_H_ + +//SENSOR_INTERFACE_BASE - this is the base address of the interface + + //byte offsets for registers + #define SENSOR_REG_COMMAND 0 //8 bits + #define SENSOR_REG_STATUS 1 //8 bits + #define SENSOR_REG_SENSORCLK 2 //16 bits, 6 used divider for producing sensor clock ('4' MHz) + #define SESNOR_REG_ADCCNV 3 //8 bits, 6 used time of conversion pulse in ADC clocks, should be > 500 ns + #define SENSOR_REG_DELAY 4 //16 bits, 12 used reset signal delay in 50 MHz clocks + #define SENSOR_REG_SHUTTER 6 //16 bits, 12 used sensor reset ('shutter') time in sensor clocks + #define SENSOR_REG_SERSPEED 8 //8 bits synchro baudrate, 50 for 1 Mbps + #define SENSOR_REG_HEADER_ANYDATA 9 //8 bits any data transmitted with SMA state (8 bits SMA + 8 bits anydata) + #define SENSOR_REG_HEADER_CMD 10 //16 bits command field of the command header transmitted in packet + #define SENSOR_REG_CLUSTER_THRESHOLD 12 //8 bits the threshold for cluster locate, range 0~255 + #define SENSOR_REG_CLUSTER_SIZE 13 //8 bits the size for clluster locate, range 0~255 + #define SENSOR_REG_IN_ALGO_THRESHOLD 14 //8 bits the threshold inside Linear Regression, range 0~255 + #define SENSOR_REG_RESERVED 15 //8 bits not used + + //CSR bitmasks + #define SENSOR_CSR_EN_BITMASK 0x01 //enable operation + #define SENSOR_CSR_GAIN_BITMASK 0x02 //gain selection + #define SENSOR_CSR_ADCK_BITMASK 0x04 //ADC clock divider on/off + #define SENSOR_CSR_RESET_BITMASK 0x08 //Reset all logic + + //Status bitmasks + #define SENSOR_STATUS_SEND 0x01 //Sending over Avalon-ST + #define SENSOR_STATUS_TRG_WAITING 0x02 //The trigger came and is being delayed now + #define SENSOR_STATUS_RESET_ACTIVE 0x04 //The RESET signal for the sensor is active now + #define SENSOR_STATUS_ADC_ACTIVE 0x08 //The ADC is converting data (signal high over all 64 channels) or just finished and waits for reset high + #define SESNOR_STATUS_ADC_FINISHED 0x10 //The ADC waits for reset high + #define SESNOR_STATUS_TX_ACTIVE 0x20 //Sync port is sending + #define SESNOR_STATUS_RX_ACTIVE 0x40 //Sync port is receiving + + + //Register access functions/macros +void sensor_command_bit(alt_u32 base, alt_u8 bitmask, alt_u8 state); +#define sensor_command(base, val) IOWR_8DIRECT(base, SENSOR_REG_COMMAND, val) +#define sensor_set_enable(base, val) sensor_command_bit(base, SENSOR_CSR_EN_BITMASK, val); +#define sensor_set_gain(base, val) sensor_command_bit(base, SENSOR_CSR_GAIN_BITMASK, val); +#define sensor_set_adck(base, val) sensor_command_bit(base, SENSOR_CSR_ADCK_BITMASK, val); +#define sensor_reset(base) { sensor_command_bit(base,SENSOR_CSR_RESET_BITMASK,1); sensor_command_bit(base,SENSOR_CSR_RESET_BITMASK,0); } +#define sensor_set_sensorclk(base, val) IOWR_8DIRECT(base, SENSOR_REG_SENSORCLK, val) +#define sensor_set_adccnv(base, val) IOWR_8DIRECT(base, SESNOR_REG_ADCCNV, val) +#define sensor_set_delay(base, val) IOWR_16DIRECT(base, SENSOR_REG_DELAY, val) +#define sensor_set_shutter(base, val) IOWR_16DIRECT(base, SENSOR_REG_SHUTTER, val) +#define sensor_set_serspeed(base, val) IOWR_8DIRECT(base, SENSOR_REG_SERSPEED, val) +#define sensor_set_header_anydata(base, val) IOWR_8DIRECT(base, SENSOR_REG_HEADER_ANYDATA, val) +#define sensor_set_header_cmd(base, val) IOWR_16DIRECT(base, SENSOR_REG_HEADER_CMD, val) +#define sensor_set_cluster_threshold(base, val) IOWR_8DIRECT(base, SENSOR_REG_CLUSTER_THRESHOLD, val) +#define sensor_set_cluster_size(base, val) IOWR_8DIRECT(base, SENSOR_REG_CLUSTER_SIZE, val) +#define sensor_set_in_algo_threshold(base, val) IOWR_8DIRECT(base, SENSOR_REG_IN_ALGO_THRESHOLD, val) + +//write calibration factor: CALIBRATION_RAM_BASE +#define calibration_ram_set_factor(base, channelID, val) IOWR_16DIRECT(base, channelID*2, val) + +void sensor_preconfigure(alt_u32 base); + +#endif /* SENSOR_H_ */ diff --git a/FPGA_nios/hit_pat/inc/socket_server.h b/FPGA_nios/hit_pat/inc/socket_server.h new file mode 100644 index 0000000..5a9c8ed --- /dev/null +++ b/FPGA_nios/hit_pat/inc/socket_server.h @@ -0,0 +1,144 @@ +/****************************************************************************** +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. All use of this software and documentation is * +* subject to the License Agreement located at the end of this file below. * +******************************************************************************* * +* Date - October 24, 2006 * +* Module - simple_socket_server.h * +* EXTENSIVELY REWRITTEN by M.D. 2019 * * +******************************************************************************/ + +/* + SO THIS IS HOW IT WORKS: + + User can use up to NR_CHANNELS sockets. + First, ethernet_init() must be called from any task. + It will start a special 'listener' thread which is responsible for serving connection requests. + Then: + For each 'channel' (a placeholder for one socket), user may call ethernet_listen() to start listening on a specified port. + After that, ethernet_read() and ethernet_write() can be used. These functions are non-blocking and return 0 if no client is connected. + User can explicitly close connection to a client by calling ethernet_close(); + If another connection request comes when a client is already connected, the old client will be disconnected in favor of the new one. + It means, that only one client can be connected to one channel at a given time. + This weird behaviour is implemented to enable easy killing 'hanging' connections. + Channel re-configuration (i.e. repeated calls of ethernet_listen() for the same channel) is not allowed. + VERY IMPORTANT: + All the above functions (excluding ethernet_init()) must be called from a socket-compatible thread (created with TK_NEWTASK). + All ethernet_* calls are served directly in user's task. Ethernet_init() can be called from any thread after hardware configuration. + */ + + /* Validate supported Software components specified on system library properties page. + */ +#ifndef __SOCKET_SERVER_H__ +#define __SOCKET_SERVER_H__ + +#if !defined (ALT_INICHE) + #error The Simple Socket Server example requires the + #error NicheStack TCP/IP Stack Software Component. Please see the Nichestack + #error Tutorial for details on Nichestack TCP/IP Stack - Nios II Edition, + #error including notes on migrating applications from lwIP to NicheStack. +#endif + +#ifndef __ucosii__ + #error This Simple Socket Server example requires + #error the MicroC/OS-II Intellectual Property Software Component. +#endif + +#if defined (ALT_LWIP) + #error The Simple Socket Server example requires the + #error NicheStack TCP/IP Stack Software Component, and no longer works + #error with the lwIP networking stack. Please see the Altera Nichstack + #error Tutorial for details on Nichestack TCP/IP Stack - Nios II Edition, + #error including notes on migrating applications from lwIP to NicheStack. +#endif + + + + +/* + * Task Priorities: + * MicroC/OS-II only allows one task (thread) per priority number. + */ +#define SS_LISTENER_TASK_PRIORITY 9 //Also, another priority just below this one will be reserved for mutex +#define SS_LISTENER_STACK_SIZE (6144+8192) + +#define NR_CHANNELS 1 //number of listening sockets - as in Wiznet + //Each socket listens on its own port and is able to open one "talking" connection at a time + //If a new connection request comes, the old one gets preempted. This allows us killing dead connections. + + +/* + * If DHCP will not be used, select valid static _BASE_ IP addresses here: + * The contents of DIPSW[3:0] will be added to the last byte of the IP. + * DIPSW[4] is used to enable/disable DHCP. + */ +#define IPADDR0 10 +#define IPADDR1 0 +#define IPADDR2 7 +#define IPADDR3 16 + +#define GWADDR0 10 +#define GWADDR1 0 +#define GWADDR2 7 +#define GWADDR3 1 + +#define MSKADDR0 255 +#define MSKADDR1 255 +#define MSKADDR2 255 +#define MSKADDR3 0 + + +/* + * Here we structure to manage sss communication for a single connection + */ +typedef struct SS_SOCKET +{ + enum { FREE, LISTENING, CONNECTED} state; + int fd_listen; + int fd_conn; + int listenport; +} SSConn; + +// *** User's interface *** + +int ethernet_init(); +/*REMARK: All the below functions can be used ONLY: + 1: After ethernet_init(); + 2: From a task created by TK_NEWTASK. */ +int ethernet_listen(int channel, int port); //Remark: Once we listen on a port, we can not change it +int ethernet_write(int channel, int size, unsigned char* data); +int ethernet_read(int channel, int size, unsigned char* data); //Non-blocking. Returns the number of characters read. +int ethernet_close(int channel); + +#endif /* __SOCKET_SERVER_H__ */ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ diff --git a/FPGA_nios/hit_pat/inc/udpgen.h b/FPGA_nios/hit_pat/inc/udpgen.h new file mode 100644 index 0000000..bd69f56 --- /dev/null +++ b/FPGA_nios/hit_pat/inc/udpgen.h @@ -0,0 +1,54 @@ +/* + * udpgen.h + * + * Created on: Aug 7, 2019 + * Author: mdziewiecki + */ + +#ifndef UDPGEN_H_ +#define UDPGEN_H_ + +//UDP_GENERATOR_0_BASE + + //byte offsets for registers +#define UDPGEN_REG_CSR 0 //16 bits 8 bits command + 8 bits status +#define UDPGEN_REG_SIZE 2 //16 bits payload size in words +#define UDPGEN_REG_SRCIP 4 //32 bits source IP, last octet first +#define UDPGEN_REG_DSTIP 8 //32 bits destination IP. last octet first +#define UDPGEN_REG_DSTPORT 12 //16 bits destination port +#define UDPGEN_REG_SRCPORT 14 //16 bits source port +#define UDPGEN_REG_DSTMAC 16 //2*32 bits destination MAC, last octet first +#define UDPGEN_REG_RES1 24 //32 bits reserved +#define UDPGEN_REG_RES2 28 //32 bits reserved + + //csr bitmasks +#define UDPGEN_CSR_EN_BITMASK 0x0001 + + + //Register access macros +void udpgen_command_bit(alt_u32 base, alt_u8 bitmask, alt_u8 state); +#define udpgen_command(base, val) IOWR_8DIRECT(base, UDPGEN_REG_CSR, val) +#define udpgen_set_size(base, val) IOWR_16DIRECT(base, UDPGEN_REG_SIZE, val) +#define udpgen_set_srcip(base, val) IOWR_32DIRECT(base, UDPGEN_REG_SRCIP, val) +#define udpgen_set_dstip(base, val) IOWR_32DIRECT(base, UDPGEN_REG_DSTIP, val) +#define udpgen_set_srcip_a(base, val) { for(int i = 0; i < 4; i++) IOWR_8DIRECT(base, UDPGEN_REG_SRCIP+i, val[3-i]); } +#define udpgen_set_dstip_a(base, val) { for(int i = 0; i < 4; i++) IOWR_8DIRECT(base, UDPGEN_REG_DSTIP+i, val[3-i]); } +#define udpgen_set_srcport(base, val) IOWR_16DIRECT(base, UDPGEN_REG_SRCPORT, val) +#define udpgen_set_dstport(base, val) IOWR_16DIRECT(base, UDPGEN_REG_DSTPORT, val) +#define udpgen_set_dstmac_a(base, val) { for(int i = 0; i < 6; i++) IOWR_8DIRECT(base, UDPGEN_REG_DSTMAC+i, val[5-i]); } + +#define udpgen_status(base) IORD_16DIRECT(base, UDPGEN_REG_CSR) +#define udpgen_get_size(base, val) IORD_16DIRECT(base, UDPGEN_REG_SIZE) +#define udpgen_get_srcip(base, val) IORD_32DIRECT(base, UDPGEN_REG_SRCIP) +#define udpgen_get_dstip(base, val) IORD_32DIRECT(base, UDPGEN_REG_DSTIP) +#define udpgen_get_srcport(base, val) IORD_16DIRECT(base, UDPGEN_REG_SRCPORT) +#define udpgen_get_dstport(base, val) IORD_16DIRECT(base, UDPGEN_REG_DSTPORT) +#define udpgen_get_dstmac(base, val) { for(int i = 0; i < 6; i++) val[i] = IORD_8DIRECT(base, UDPGEN_REG_DSTMAC+i); } + + +//****************************************************** + +void udpgen_test(alt_u32 base); + + +#endif /* UDPGEN_H_ */ diff --git a/FPGA_nios/hit_pat/inc/utils.h b/FPGA_nios/hit_pat/inc/utils.h new file mode 100644 index 0000000..eafe646 --- /dev/null +++ b/FPGA_nios/hit_pat/inc/utils.h @@ -0,0 +1,34 @@ +/* + * utils.h + * + * Created on: Jul 31, 2019 + * Author: mdziewiecki + * Various utils for various purposes + * Mainly wrappers on hardware + */ + + + +#ifndef UTILS_H_ +#define UTILS_H_ + +//Swap opdd/even bytes in a bunch of data to align endianness of shorts +void swap_bytes(unsigned char* array, int size_bytes); +void swap_quad(unsigned char* array, int size_bytes); + +void reload_fpga(); //trigger FPGA reload + +#define TRIGGER_MASTER 1 +#define TRIGGER_SLAVE 0 +void masterslave(alt_u8 master); //set trigger system to master or slave operation +void master_clock_period(alt_u32 period); //set period of the master frame timer +void master_clock_enable(alt_u8 en); //enable/disable pulse generation + +void led_set(alt_u8 led_nr); +void led_clear(alt_u8 led_nr); +void led_toggle(alt_u8 led_nr); +void led4_blink_enable(alt_u8 en); + +void set_delay(alt_u8 master, alt_u16 value); + +#endif /* UTILS_H_ */ diff --git a/FPGA_nios/hit_pat/mem_init/hdl_sim/onchip_flash.dat b/FPGA_nios/hit_pat/mem_init/hdl_sim/onchip_flash.dat new file mode 100644 index 0000000..e69de29 diff --git a/FPGA_nios/hit_pat/mem_init/hdl_sim/onchip_flash.sym b/FPGA_nios/hit_pat/mem_init/hdl_sim/onchip_flash.sym new file mode 100644 index 0000000..d508ca2 --- /dev/null +++ b/FPGA_nios/hit_pat/mem_init/hdl_sim/onchip_flash.sym @@ -0,0 +1,1138 @@ +00000000 a OSTCBStkPtr_OFFSET +00000014 a OSTCBNext_OFFSET +00000032 a OSTCBPrio_OFFSET +00000040 a OSCtxSw_SWITCH_PC +08000000 A __alt_mem_ddr3_ram +08000120 T alt_exception +08000120 T alt_irq_entry +080001fc T alt_irq_handler +080002c4 T alt_instruction_exception_entry +08000338 T _start +0800037c t alt_after_alt_main +08000380 T control_delay +080003b0 T control_pong +08000418 T control_process_snapshot +08000478 T check_arp +080004f8 T control_process_config_peer +0800080c T control_get_header +080008a4 T control_get_data +08000950 T control_step +08001064 T ControlTask +080010f0 T control_init +08001124 T InitialTask +08001178 T main +080011e8 T get_mac_addr +0800123c T get_ip_addr +08001434 T get_serial_number +080015c8 T generate_and_store_mac_addr +08001780 T generate_mac_addr +080018b4 T get_board_mac_addr +08001a54 T FindLastFlashSectorOffset +08001b80 T sensor_command_bit +08001c08 T sensor_preconfigure +08001d1c T ss_reset_connection +08001d58 T ss_initialize_connection +08001da8 T ss_handle_accept +08001e90 T SSListenerTask +08002050 T ethernet_init +080020d0 T ethernet_listen +0800220c T ethernet_write +08002314 T ethernet_read +080024cc T ethernet_close +08002554 T udpgen_command_bit +080025dc T udpgen_test +080027a8 T swap_bytes +08002840 T swap_quad +08002904 T reload_fpga +08002944 T masterslave +080029cc T master_clock_period +08002a14 T master_clock_enable +08002a70 T led_set +08002abc T led_clear +08002b08 T led_toggle +08002b7c T led4_blink_enable +08002bc8 T set_delay +08002c30 T _getchar_r +08002c38 T getchar +08002c48 T _printf_r +08002c78 T printf +08002cb0 T _putchar_r +08002cb8 T putchar +08002cd0 T _puts_r +08002d9c T puts +08002dac T strlen +08002e44 T ___vfprintf_internal_r +08004fa4 T __vfprintf_internal +08004fbc t __sbprintf +0800507c T __swsetup_r +080051dc t quorem +080053ec T _dtoa_r +08006ab4 T __sflush_r +08006cdc T _fflush_r +08006d3c T fflush +08006d64 t __fp_lock +08006d6c T _cleanup_r +08006d78 t __sinit.part.0 +08006ee0 t __fp_unlock +08006ee8 T __sfmoreglue +08006f50 T __sfp +0800704c T _cleanup +08007060 T __sinit +08007070 T __sfp_lock_acquire +08007074 T __sfp_lock_release +08007078 T __sinit_lock_acquire +0800707c T __sinit_lock_release +08007080 T __fp_lock_all +08007094 T __fp_unlock_all +080070a8 T _malloc_trim_r +080071c4 T _free_r +080074c0 T __sfvwrite_r +08007984 T _fwalk +08007a28 T _fwalk_reent +08007adc T _getc_r +08007b58 T getc +08007be8 T __localeconv_l +08007bf0 T _localeconv_r +08007bfc T localeconv +08007c08 T __swhatbuf_r +08007ca0 T __smakebuf_r +08007ddc T _malloc_r +080085d0 T memchr +080086b8 T memcpy +080087b8 T memmove +080088e4 T memset +080089d4 T _Balloc +08008a78 T _Bfree +08008a9c T __multadd +08008bb0 T __s2b +08008cc0 T __hi0bits +08008d24 T __lo0bits +08008dd4 T __i2b +08008e08 T __multiply +08008ff4 T __pow5mult +0800911c T __lshift +08009258 T __mcmp +080092b0 T __mdiff +0800946c T __ulp +080094c8 T __b2d +080095cc T __d2b +08009714 T __ratio +080097bc T _mprec_log10 +08009830 T __copybits +0800989c T __any_on +08009910 T _putc_r +080099dc T putc +08009abc T _realloc_r +0800a0e8 T __srget_r +0800a15c T __srget +0800a16c T _sbrk_r +0800a1c4 T __sread +0800a218 T __seofread +0800a220 T __swrite +0800a2a0 T __sseek +0800a2fc T __sclose +0800a304 t __sprint_r.part.0 +0800a3f8 T __sprint_r +0800a410 T ___vfiprintf_internal_r +0800b73c T __vfiprintf_internal +0800b754 t __sbprintf +0800b814 T __swbuf_r +0800b95c T __swbuf +0800b970 T _write_r +0800b9d4 T _close_r +0800ba2c T _calloc_r +0800bae4 T _fclose_r +0800bbdc T fclose +0800bbec T __fputwc +0800bd3c T _fputwc_r +0800bd60 T fputwc +0800bddc T _fstat_r +0800be3c T _isatty_r +0800be94 T _setlocale_r +0800bf04 T __locale_mb_cur_max +0800bf10 T setlocale +0800bf24 T _lseek_r +0800bf88 T _mbtowc_r +0800bf94 T __ascii_mbtowc +0800bfd8 T _read_r +0800c03c t lflush +0800c058 T __srefill_r +0800c224 T strcmp +0800c2fc T _wcrtomb_r +0800c368 T wcrtomb +0800c3ec T _wctomb_r +0800c3f8 T __ascii_wctomb +0800c428 T __udivdi3 +0800c9c0 T __umoddi3 +0800cf00 T __divsi3 +0800cf80 T __modsi3 +0800cff8 T __udivsi3 +0800d05c T __umodsi3 +0800d0b8 T __adddf3 +0800da58 T __divdf3 +0800e300 T __eqdf2 +0800e300 T __nedf2 +0800e380 T __gedf2 +0800e380 T __gtdf2 +0800e470 T __ledf2 +0800e470 T __ltdf2 +0800e560 T __muldf3 +0800ebec T __subdf3 +0800f558 T __unorddf2 +0800f5ac T __fixdfsi +0800f62c T __floatsidf +0800f6f4 T __floatunsidf +0800f790 T __clzsi2 +0800f7e4 T alt_flash_open_dev +0800f84c T alt_flash_close_dev +0800f8a0 t alt_get_errno +0800f8dc T fstat +0800f98c t alt_get_errno +0800f9c8 T isatty +0800fa6c t alt_get_errno +0800faa8 T lseek +0800fb7c T alt_main +0800fc38 T sbrk +0800fce8 T __env_lock +0800fdac T __env_unlock +0800fe0c T __malloc_lock +0800ff2c T __malloc_unlock +0800fff8 T OSEventNameGet +080100d0 T OSEventNameSet +080101d0 T OSEventPendMulti +0801077c T OSInit +080107cc T OSIntEnter +08010818 T OSIntExit +08010908 T OSSchedLock +08010994 T OSSchedUnlock +08010a70 T OSStart +08010ad8 T OSTimeTick +08010c98 T OSVersion +08010cb8 T OS_Dummy +08010cd8 T OS_EventTaskRdy +08010e60 T OS_EventTaskWait +08010f68 T OS_EventTaskWaitMulti +080110b0 T OS_EventTaskRemove +08011160 T OS_EventTaskRemoveMulti +08011258 T OS_EventWaitListInit +080112c0 t OS_InitEventList +080113a0 t OS_InitMisc +080113dc t OS_InitRdyList +08011448 t OS_InitTaskIdle +080114cc t OS_InitTCBList +080115b0 T OS_MemClr +08011604 T OS_MemCopy +0801166c T OS_Sched +08011734 t OS_SchedNew +080117a0 T OS_StrCopy +08011814 T OS_StrLen +08011868 T OS_TaskIdle +080118c4 T OS_TCBInit +08011b98 T OSFlagAccept +08011e78 T OSFlagCreate +08011f70 T OSFlagDel +0801218c T OSFlagNameGet +0801226c T OSFlagNameSet +08012378 T OSFlagPend +08012910 T OSFlagPendGetFlagsRdy +08012970 T OSFlagPost +08012cdc T OSFlagQuery +08012d74 t OS_FlagBlock +08012ed8 T OS_FlagInit +08012fb8 t OS_FlagTaskRdy +080130ac T OS_FlagUnlink +08013150 T OSMemCreate +08013298 T OSMemGet +0801335c T OSMemNameGet +08013404 T OSMemNameSet +080134d8 T OSMemPut +08013590 T OSMemQuery +08013658 T OS_MemInit +08013724 T OSMutexAccept +0801389c T OSMutexCreate +08013a1c T OSMutexDel +08013cdc T OSMutexPend +08014238 T OSMutexPost +08014430 T OSMutexQuery +0801457c t OSMutex_RdyAtPrio +08014704 T OSQAccept +08014818 T OSQCreate +080149bc T OSQDel +08014c10 T OSQFlush +08014c9c T OSQPend +08014efc T OSQPendAbort +0801503c T OSQPost +08015194 T OSQPostFront +080152f4 T OSQPostOpt +080154f0 T OSQQuery +0801562c T OS_QInit +080156d4 T OSSemAccept +08015774 T OSSemCreate +0801584c T OSSemDel +08015a60 T OSSemPend +08015c44 T OSSemPendAbort +08015d84 T OSSemPost +08015e84 T OSSemQuery +08015f74 T OSSemSet +0801604c T OSTaskChangePrio +080164cc T OSTaskCreate +0801664c T OSTaskCreateExt +080167f0 T OSTaskDel +08016b04 T OSTaskDelReq +08016c2c T OSTaskNameGet +08016d64 T OSTaskNameSet +08016ec0 T OSTaskResume +08017078 T OSTaskSuspend +08017220 T OSTaskQuery +0801730c T OSTimeDly +08017410 T OSTimeDlyHMSM +0801750c T OSTimeDlyResume +080176d8 T OSTimeGet +08017734 T OSTimeSet +08017794 t alt_dev_reg +080177c8 T alt_irq_init +08017800 T alt_sys_init +08017a2c t alt_avalon_timer_sc_irq +08017aa4 T alt_avalon_timer_sc_init +08017b20 T no_printf +08017b50 T tse_mac_initTransInfo2 +08017bb0 T tse_mac_sTxWrite +08017c78 T tse_mac_aRxRead +08017ce8 T tse_mac_aTxWrite +08017d58 T tse_mac_SwReset +08017de0 T tse_mac_setMIImode +08017e34 T tse_mac_setGMIImode +08017e84 T alt_tse_phy_add_profile +08018038 T alt_tse_system_add_sys +080188fc T alt_tse_sys_enable_mdio_sharing +08018a40 T alt_tse_mac_get_common_speed +08018a80 T alt_tse_mac_set_common_speed +08018ac8 T alt_tse_get_system_index +08018b34 T alt_tse_get_mac_group_index +08018ba0 T alt_tse_get_mac_info_index +08018c1c T alt_tse_get_mac_info +08018ce8 T alt_tse_mac_set_speed +08018dc8 T alt_tse_mac_set_duplex +08018e54 T getPHYSpeed +080198cc T alt_tse_phy_rd_mdio_addr +08019914 T alt_tse_phy_wr_mdio_addr +0801996c T alt_tse_phy_wr_mdio_reg +08019a98 T alt_tse_phy_rd_mdio_reg +08019b68 T alt_tse_phy_add_profile_default +08019e30 T alt_tse_phy_print_profile +0801a000 T alt_tse_mac_group_init +0801a698 T alt_tse_mac_get_phy +0801aaa4 T alt_tse_mac_associate_phy +0801ace4 T alt_tse_phy_cfg_pcs +0801ae0c T alt_tse_phy_init +0801af18 T alt_tse_phy_restart_an +0801b0dc T alt_tse_phy_check_link +0801b264 T alt_tse_phy_get_cap +0801b7f0 T alt_tse_phy_set_adv_1000 +0801b9b4 T alt_tse_phy_set_adv_100 +0801bc08 T alt_tse_phy_set_adv_10 +0801bdb0 T alt_tse_phy_get_common_speed +0801c0cc T alt_tse_phy_set_common_speed +0801c57c T marvell_phy_cfg +0801c614 T marvell_cfg_gmii +0801c6f8 T marvell_cfg_sgmii +0801c7dc T marvell_cfg_rgmii +0801c8cc T DP83848C_link_status_read +0801c944 T PEF7071_config +0801c9a0 T PEF7071_link_status_read +0801ca40 T altera_avalon_uart_read_fd +0801caa0 T altera_avalon_uart_write_fd +0801cb00 T altera_avalon_uart_close_fd +0801cb50 T altera_avalon_uart_init +0801ccb0 t altera_avalon_uart_irq +0801cd4c t altera_avalon_uart_rxirq +0801ce80 t altera_avalon_uart_txirq +0801d020 T altera_avalon_uart_close +0801d074 t alt_get_errno +0801d0b0 T altera_avalon_uart_read +0801d318 t alt_get_errno +0801d354 T altera_avalon_uart_write +0801d588 t alt_flash_device_register +0801d5bc T alt_qspi_controller_lock +0801d6cc T alt_qspi_controller_get_info +0801d758 T alt_qspi_controller_erase_block +0801d87c T alt_qspi_controller_write_block +0801da8c T alt_qspi_controller_write +0801dc74 T alt_qspi_controller_read +0801dd20 T altera_qspi_controller_init +0801df74 t alt_qspi_validate_read_write_arguments +0801e010 t alt_qspi_poll_for_write_in_progress +0801e09c t alt_get_errno +0801e0d8 t alt_msgdma_write_standard_descriptor +0801e16c t alt_msgdma_write_extended_descriptor +0801e298 t alt_msgdma_irq +0801e41c t alt_msgdma_construct_standard_descriptor +0801e4a8 t alt_msgdma_construct_extended_descriptor +0801e5fc t alt_msgdma_descriptor_async_transfer +0801e938 t alt_msgdma_descriptor_sync_transfer +0801ed40 T alt_msgdma_construct_standard_st_to_mm_descriptor +0801ed98 T alt_msgdma_construct_standard_mm_to_st_descriptor +0801edf0 T alt_msgdma_construct_standard_mm_to_mm_descriptor +0801ee48 T alt_msgdma_construct_extended_st_to_mm_descriptor +0801eed8 T alt_msgdma_construct_extended_mm_to_st_descriptor +0801ef68 T alt_msgdma_construct_extended_mm_to_mm_descriptor +0801f010 t alt_msgdma_construct_prefetcher_standard_descriptor +0801f0b4 t alt_msgdma_construct_prefetcher_extended_descriptor +0801f248 T alt_msgdma_construct_prefetcher_standard_mm_to_mm_descriptor +0801f2a0 T alt_msgdma_construct_prefetcher_standard_st_to_mm_descriptor +0801f2f8 T alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor +0801f350 T alt_msgdma_construct_prefetcher_extended_st_to_mm_descriptor +0801f3f0 T alt_msgdma_construct_prefetcher_extended_mm_to_st_descriptor +0801f488 T alt_msgdma_construct_prefetcher_extended_mm_to_mm_descriptor +0801f540 T alt_msgdma_prefetcher_add_standard_desc_to_list +0801f630 T alt_msgdma_prefetcher_add_extended_desc_to_list +0801f7c8 T alt_msgdma_prefetcher_set_std_list_own_by_hw_bits +0801f8d8 T alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits +0801fa24 T alt_msgdma_start_prefetcher_with_list_addr +0801fd34 T alt_msgdma_start_prefetcher_with_std_desc_list +0801fde4 T alt_msgdma_start_prefetcher_with_extd_desc_list +0801fe94 T alt_msgdma_open +0801feec T alt_msgdma_init +08020094 T alt_msgdma_register_callback +080200e8 T alt_msgdma_standard_descriptor_async_transfer +08020124 T alt_msgdma_extended_descriptor_async_transfer +08020160 T alt_msgdma_standard_descriptor_sync_transfer +0802019c T alt_msgdma_extended_descriptor_sync_transfer +080201d8 t alt_flash_device_register +0802020c T alt_onchip_flash_read +080202d8 T alt_onchip_flash_get_info +08020374 T alt_onchip_flash_erase_block +080204dc T alt_onchip_flash_write_block +080207b4 T alt_onchip_flash_write +08020a80 T altera_onchip_flash_init +08020f20 T alt_onchip_flash_poll_for_status_to_go_idle +08020fb0 T alt_onchip_flash_poll_for_status_erase_passed +08021044 T alt_onchip_flash_poll_for_status_write_passed +080210d8 T altera_eth_tse_init +08021220 T prep_tse_mac +0802144c T msgdma_reset +080214c4 T tse_mac_init +08021f28 T tse_msgdma_write_init +08022048 T tse_mac_raw_send +08022210 T tse_msgdmaRx_isr +080223a8 T tse_msgdmaTx_isr +08022408 T tse_msgdma_read_init +080226c0 T allocate_rx_descriptor_chain +080227f8 T tse_mac_rcv +08022944 T tse_mac_stats +08022984 T tse_mac_close +08022a60 T close +08022aa8 T iniche_devices_init +08022bcc T read +08022c3c T write +08022ca4 T etainit +08022cec T et_send +08022e6c T arp_free_pending +08022ef4 T arp_send_pending +08022f68 T send_arp +080233bc T find_oldest_arp +08023528 T make_arp_entry +08023624 T arpReply +080238e4 T arprcv +08023b48 T send_via_arp +08023cc4 T cb_arpent_tmo +08023dd0 T grat_arp +08024088 T if_getbynum +080240f4 T isbcast +080241c8 T reg_type +08024254 T if_killsocks +080242e4 T Netinit +080247b4 T fixup_subnet_mask +080248e4 T netclose +080249c4 T pktdemux +08024d64 T c_older +08024df4 T ip2mac +08024f80 T ip_startup +080251e4 T exit_hook +0802524c T ip_exit +080252fc T if_netnumber +0802537c T igmp_init +0802541c T igmp_input +080254ec T igmp_fasttimo +0802565c T igmp_send +080258d8 T igmp_joingroup +08025b04 T igmp_leavegroup +08025b84 T igmp_validate +08025e60 T igmp_print_stats +08026214 T bsd_accept +08026334 T bsd_getpeername +08026454 T bsd_getsockname +08026574 T bsd_i_sockoptlen +08026704 T bsd_getsockopt +0802680c T bsd_ioctl +080268fc T bsd_inet_ntoa +08026930 T bsd_recvfrom +08026a74 T bsd_select +08026bfc T bsd_setsockopt +08026cd8 T ccksum +08026d7c T cksum +08026dd0 T do_trap +08026dfc T nextarg +08026e78 T hexdump +08026fbc T print_ipad +08027038 T print_uptime +08027178 T panic +080271c0 T print_eth +08027314 T uslash +08027390 T ns_printf +08027500 T std_out +08027544 T con_page +0802761c T parse_args +08027814 T netmain +080278f4 T tk_netmain +0802796c T tk_nettick +080279b0 T TK_OSTimeDly +080279e0 T TK_OSTaskResume +08027a54 T tcp_sleep +08027ba0 T tcp_wakeup +08027c78 T TK_OSTaskQuery +08027ce4 T tk_yield +08027d14 T tk_stats +08027f0c T icmpEcho +080281a8 T pk_init +08028434 T pk_alloc +080284f4 T pk_validate +08028748 T pk_free +080287f4 T pk_get_max_intrsafe_buf_len +08028814 T dump_buf_estats +080288d8 T getq +08028990 T putq +08028a40 T qdel +08028b40 T asm_cksum +08028b60 t asm1 +08028b88 t loop +08028c8c t loop0 +08028ca8 t fold +08028cd0 t done +08028cd4 T dtrap +08028d08 T kbhit +08028d90 T getch +08028de0 T clock_init +08028e18 T clock_c +08028e38 T cticks_hook +08028e94 T irq_Mask +08028ef4 T irq_Unmask +08028f38 T LOCK_NET_RESOURCE +08028ff4 T UNLOCK_NET_RESOURCE +08029074 T TK_NEWTASK +080292b4 T wait_app_sem +08029368 T post_app_sem +080293dc T alt_iniche_init +0802959c T pre_task_setup +080295e8 T post_task_setup +08029608 T prep_armintcp +08029640 T npalloc_base +0802974c T npfree_base +0802982c T npalloc +08029860 T npfree +080298a0 T ncpalloc +080298d4 T ncpfree +08029914 T pffindtype +080299a4 T pffindproto +08029a70 T m_getnbuf +08029bf8 T m_free +08029cfc T m_freem +08029d40 T m_copy +0802a018 T m_adj +0802a1d8 T mbuf_len +0802a22c T dtom +0802a2c4 T remque +0802a334 T insque +0802a3b0 T nptcp_init +0802a4a4 T tcp_rcv +0802a658 T ip_output +0802abe0 T in_broadcast +0802ac18 T np_stripoptions +0802ad08 T so_icmpdu +0802b050 T tcp_tick +0802b0c8 T rawip_lookup +0802b124 T rawip_soinput +0802b2e8 T rawip_usrreq +0802ba20 T DOMAIN_CHECK +0802ba70 T t_socket +0802baf0 T t_bind +0802bc50 T t_listen +0802bd24 T t_accept +0802bf74 T t_connect +0802c1e4 T t_getpeername +0802c228 T t_getsockname +0802c26c t t_getname +0802c44c T t_setsockopt +0802c60c T t_getsockopt +0802c794 T t_recv +0802c870 T t_recvfrom +0802c9ac T t_sendto +0802cb9c T t_send +0802cd9c T t_shutdown +0802ce70 T t_socketclose +0802cf30 t sockargs +0802cfbc T t_errno +0802d050 T socreate +0802d1f8 T sobind +0802d254 T solisten +0802d324 T sofree +0802d434 T soclose +0802d6fc T soabort +0802d74c T soaccept +0802d7e4 T soconnect +0802d89c T sodisconnect +0802d934 T sosend +0802de94 T soreceive +0802e5ec T soshutdown +0802e684 T sorflush +0802e780 T sosetopt +0802ec0c T sogetopt +0802f12c T sohasoutofband +0802f178 T soisconnecting +0802f1e8 T soisconnected +0802f2ec T soisdisconnecting +0802f384 T soisdisconnected +0802f448 T sonewconn +0802f640 T soqinsque +0802f6ec T soqremque +0802f7f4 T socantsendmore +0802f84c T socantrcvmore +0802f8a4 T sbselqueue +0802f8e0 T sbwait +0802f94c T sbwakeup +0802f9d8 T soreserve +0802fa60 T sbreserve +0802fab0 T sbrelease +0802fafc T sbappend +0802fb9c T sbappendrecord +0802fc74 T sbappendaddr +0802fe50 T sbcompress +0803002c T sbflush +080300b0 T sbdrop +08030268 T sbdropend +08030368 T sbdroprecord +080303f8 T t_select +080305c8 T sock_selscan +08030708 T sock_select +080308f0 T in_pcbnotify +080309b4 T tcp_notify +08030a34 T ifd_clr +08030b18 T ifd_set +08030b8c T ifd_isset +08030c00 T ifd_get +08030c60 T tcp_reass +08031050 T tcp_input +08033264 T tcp_dooptions +080333ec T tcp_pulloutofband +08033518 T tcp_xmit_timer +08033754 T ip4_tcpmss +0803379c T tcp_mss +08033894 T tcp_output +08034830 T tcp_setpersist +0803492c t bld_options +080349f8 T tcp_init +08034a40 T tcp_template +08034b48 T tcp_respond +08034f40 T tcp_newtcpcb +0803504c T tcp_drop +080350e8 T tcp_close +080351d0 T tcp_quench +0803521c T tcp_putseq +08035294 T tcp_getseq +08035308 T tcp_slowtimo +08035564 T tcp_canceltimers +080355c0 T tcp_timers +08035a14 T tcp_usrreq +080360cc T tcp_attach +080361e4 T tcp_disconnect +080362b0 T tcp_usrclosed +0803637c T tcpinit +080363bc T udp_lookup +08036418 T udp_soinput +080365b8 T udp_usrreq +080367f0 T udp4_sockbind +08036ac0 T udp4_socksend +08036e34 T udp4_sockaddr +08036f5c T alt_busy_sleep +080370b4 t alt_get_errno +080370f0 T alt_close +080371c0 T alt_dcache_flush +08037238 t alt_dev_null_write +08037264 t alt_get_errno +080372a0 T alt_dev_llist_insert +08037344 T _do_ctors +080373a4 T _do_dtors +08037404 T alt_find_dev +08037494 T alt_ic_isr_register +080374e4 T alt_ic_irq_enable +0803756c T alt_ic_irq_disable +080375f8 T alt_ic_irq_enabled +08037644 T alt_iic_isr_register +08037728 t alt_open_fd +080377d8 T alt_io_redirect +08037854 t alt_get_errno +08037890 t alt_file_locked +08037948 T open +08037a9c T alt_printf +08037cc8 T alt_putchar +08037cf8 t alt_get_errno +08037d34 T alt_read +08037e30 T alt_release_fd +08037e88 T alt_remap_cached +08037ebc T alt_alarm_stop +08037f58 T alt_tick +08038060 T alt_uncached_free +080380a4 T alt_uncached_malloc +0803811c T usleep +08038230 t alt_get_errno +0803826c T alt_write +08038364 T altera_nios2_gen2_irq_init +08038388 T OSCtxSw +08038388 T OSIntCtxSw +08038414 T OSStartHighRdy +08038434 T OSStartTsk +08038458 T OSTaskStkInit +080385a4 T OSTaskCreateHook +080385c8 T OSTaskDelHook +080385ec T OSTaskSwHook +0803860c T OSTaskStatHook +0803862c T OSTimeTickHook +08038658 T OSInitHookBegin +08038678 T OSInitHookEnd +08038698 T OSTaskIdleHook +080386b8 T OSTCBInitHook +080386dc T netmain_init +080387c4 T icmp_port_du +08038850 T station_state +080389b0 T sysuptime +080389e8 T packet_check +08038a38 T mcastlist +08038a5c T prep_modules +08038ab0 T inet_timer +08038b28 t check_interval_timers +08038c74 T in_timerset +08038da0 T in_timerkill +08038e38 T create_apptasks +08038e5c T task_stats +08038ed8 T fcntl +08038f78 T icmprcv +08039a54 T icmp_destun +08039d2c T icmp_timex +0803a01c T icmp_du +0803a070 T ip_init +0803a148 T ip_bldhead +0803a2d4 T ip_write_internal +0803a9e8 T ip_write +0803abf8 T ip_write2 +0803af6c T ip_raw_write +0803b028 T ip_mymach +0803b0cc T ip_dump +0803b370 T iproute +0803b53c T ip_copypkt +0803b668 T ip_rcv +0803b9bc T ip_rcv_phase2 +0803bf08 T ip_demux +0803c2ac T in_addmulti +0803c3f8 T in_delmulti +0803c504 T lookup_mcast +0803c568 T prep_ifaces +0803c5e8 T netexit +0803c610 T evtmap_setup +0803c63c T ip_raw_open +0803c714 T ip_raw_close +0803c7d0 T ip_raw_input +0803c9e4 T ip_raw_alloc +0803ca9c T ip_raw_free +0803cae0 T ip_raw_maxalloc +0803cb28 T rt_lookup +0803cc7c T add_route +0803d020 T del_route +0803d134 T udpdemux +0803d8a0 T udp_send +0803db34 T udpswap +0803dc28 T udp_socket +0803dcd8 T udp_alloc +0803dd94 T udp_maxalloc +0803ddb8 T udp_free +0803ddfc T igmpv1_input +0803e064 T igmpv2_input +0803e170 T igmpv2_process_report +0803e284 T igmpv2_process_query +0803e444 T igmpv2_chk_set_timer +0803e574 T igmpv2_chk4_rtr_alert_opt +0803e6b0 T IPADDR_TO_NETP +0803e7c4 T ip_setmoptions +0803ed64 T ip_getmoptions +0803ee74 T ip_freemoptions +0803eef8 T u_mctest_init +0803ef2c T u_mctest_run +0803f598 T init_memdev +0803f5e8 T md_fopen +0803f610 T md_fclose +0803f634 T md_fread +0803f78c T md_fwrite +0803f804 T md_fseek +0803f830 T md_ftell +0803f854 T md_fgetc +0803f918 T md_unlink +0803f93c T parse_ipad +0803fc38 T inet_addr +0803fc9c T hextoa +0803fce8 T inet_pton +0803fd7c T inet_ntop +0803fe00 T print46_addr +0803fe5c T inet46_addr +0803ff20 T inet_setport +0803ff8c T convert_ip +080400c0 T tcp_cksum +08040254 T udp_open +08040454 T udp_close +0804052c T in_pcballoc +080405b4 T in_pcbdetach +0804060c T in_pcbbind +0804081c T in_pcbconnect +080409fc T in_pcbdisconnect +08040a58 T in_setsockaddr +08040adc T in_setpeeraddr +08040b60 T in_pcblookup +08040db4 T set_vfopen_error +08040de0 T get_vfopen_error +08040e00 T vf_alloc_and_link_vop +08040e70 T vf_alloc_buffer +08040f38 T vf_free_buffer +08040f88 T vfopen_locked +080412c0 T vfopen +08041310 T vfclose_locked +080414cc T vfclose +08041510 T vfflush +08041558 T vfgets +08041628 T vfeof +08041678 T vunlink_flag_open_files +080416d4 T vunlink +080418d4 T vfread +08041a5c T vfwrite_locked +08041e08 T vfwrite +08041e68 T vfseek +08041fbc T vftell +080420c8 T vgetc_locked +080421c0 T vgetc +08042208 T vfslookup_locked +0804232c T vfslookup +08042374 T strippath +08042540 T isvfile_locked +08042598 T isvfile +080425e0 T vferror +0804263c T vclearerr +08042694 T prep_vfs +080426b8 t alt_get_errno +080426f4 T alt_fcntl +08042818 T alt_find_file +08042920 T alt_get_fd +080429f8 T alt_exception_cause_generated_bad_addr +08042a90 T atexit +08042aa4 T atoi +08042ab0 T _atoi_r +08042abc T exit +08042af0 T memalign +08042b04 T _memalign_r +08042c98 T malloc +08042ca8 T free +08042cb8 T memcmp +08042d44 T _sprintf_r +08042d98 T sprintf +08042dfc T strchr +08042f60 T strcpy +08042fec T strncmp +080430e8 t _strtol_l.isra.0 +0804330c T _strtol_r +08043310 T strtol_l +08043328 T strtol +08043340 T ___svfprintf_internal_r +08045458 T vprintf +08045474 T _vprintf_r +08045484 T _vsprintf_r +080454d0 T vsprintf +080454e8 T __register_exitproc +08045578 T __call_exitprocs +08045690 T __ssprint_r +08045850 T ___svfiprintf_internal_r +08046970 T _vfprintf_r +08046974 T _exit +080469a8 A __CTOR_END__ +080469a8 A __CTOR_LIST__ +080469a8 A __DTOR_END__ +080469a8 A __DTOR_LIST__ +080471d6 R _ctype_ +080472d7 R _ctype_b +0804749e r zeroes.5227 +080474ae r blanks.5226 +080474d0 r p05.4024 +080474dc R __mprec_tinytens +08047504 R __mprec_bigtens +0804752c R __mprec_tens +080475f4 r zeroes.5204 +08047604 r blanks.5203 +08047624 R __clz_tab +08047734 R OSUnMapTbl +0804b8d1 r zeroes.5208 +0804b8e1 r blanks.5207 +0804b8f1 r zeroes.5188 +0804b901 r blanks.5187 +0804b920 G controltask +0804b938 G sslistenertask +0804b950 G tse_mac_device +0804ba80 g impure_data +0804bea4 G __malloc_av_ +0804c2ac G __global_locale +0804c420 g debug_uart +0804c4f0 g ext_flash +0804c5d0 g msgdma_rx +0804c640 g msgdma_tx +0804c6b0 g onchip_flash +0804c7b0 G nettasks +0804c7e0 G tcp_protosw +0804c7f8 G udp_protosw +0804c810 G rawip_protosw +0804c828 G tcp_outflags +0804c833 G tcp_backoff +0804c840 G alt_dev_null +0804c868 G alt_fd_list +0804c928 G icmpdu_types +0804c940 g dsts +0804c958 G rtp_priority +0804c964 G mdio +0804c988 G mdlist +0804ca38 G vfs_root_path +0804cab8 G _global_impure_ptr +0804cabc G _impure_ptr +0804cac0 G __malloc_sbrk_base +0804cac4 G __malloc_trim_threshold +0804cac8 G alt_flash_dev_list +0804cad0 g heap_end +0804cad4 g lockid +0804cad8 g lockid +0804cadc G eth_tse_name +0804cae0 G max_mac_system +0804cae4 G alt_msgdma_list +0804caec G altera_onchip_flash_list +0804caf4 G alt_iniche_dev_list +0804cafc G arp_ageout +0804cb00 G ipmcfail_str +0804cb04 g cksum_select +0804cb08 G num_net_tasks +0804cb0c G pingdata +0804cb10 G lilbufs +0804cb14 G lilbufsiz +0804cb18 G bigbufs +0804cb1c G bigbufsiz +0804cb20 G kb_last +0804cb24 G TCPTV_MSL +0804cb28 G socket_defaults +0804cb2a G tcprexmtthresh +0804cb2c G tcp_ttl +0804cb30 G tcp_keepidle +0804cb34 G tcp_keepintvl +0804cb38 G tcp_sendspace +0804cb3c G tcp_recvspace +0804cb40 G alt_fs_list +0804cb48 G alt_dev_list +0804cb50 G alt_max_fd +0804cb54 G alt_errno +0804cb58 G alt_priority_mask +0804cb5c G alt_alarm_list +0804cb64 G name +0804cb68 G prompt +0804cb6c G pingdelay +0804cb70 G deflength +0804cb74 g uid +0804cb78 G ipRoutes +0804cb7c g iCounter.5304 +0804cb80 G mdlist_size +0804cb84 G pton_error +0804cb88 G http_root_path +0804cb8c A __bss_start +0804cb8c A _edata +0804cb8c b bytes_received.5850 +0804cb90 b header.5849 +0804cb98 b bytes_received.5856 +0804cb9c B to_controltask +0804cba0 B last_flash_sector_offset +0804cba4 B last_flash_sector +0804cba8 b mutex +0804cbac B to_sslistenertask +0804cbae B mastermode +0804cbb0 B delays +0804cbb4 B __malloc_max_total_mem +0804cbb8 B __malloc_max_sbrked_mem +0804cbbc B __malloc_top_pad +0804cbc0 B errno +0804cbc4 B _PathLocale +0804cbc8 B alt_argc +0804cbcc B alt_argv +0804cbd0 B alt_envp +0804cbd4 b locks +0804cbd8 B alt_envsem +0804cbdc b locks +0804cbe0 B alt_heapsem +0804cbe4 B OSLockNesting +0804cbe5 B OSRunning +0804cbe8 B OSIdleCtr +0804cbec B OSPrioHighRdy +0804cbed B OSPrioCur +0804cbf0 B OSTCBList +0804cbf4 B OSCtxSwCtr +0804cbf8 B OSTCBFreeList +0804cbfc B OSTaskCtr +0804cc00 B OSMemFreeList +0804cc04 B OSTCBHighRdy +0804cc08 B OSQFreeList +0804cc0c B OSRdyGrp +0804cc0d B OSRdyTbl +0804cc10 B OSEventFreeList +0804cc14 B OSIntNesting +0804cc18 B OSTCBCur +0804cc1c B OSTime +0804cc20 B OSFlagFreeList +0804cc24 B phy_profile_count +0804cc25 B mac_group_count +0804cc26 b tse_system_count.5331 +0804cc27 b is_init.5413 +0804cc28 B number_of_tse_mac +0804cc2c b arp_timer +0804cc30 B arpcache +0804cc34 b cachetime +0804cc38 B arpReqsIn +0804cc3c B arpReqsOut +0804cc40 B arpRepsIn +0804cc44 B arpRepsOut +0804cc48 B MaxLnh +0804cc4c B MaxMtu +0804cc50 B NDEBUG +0804cc54 B ifNumber +0804cc58 b nclosers +0804cc5c B igmp_timers_are_running +0804cc60 B igmp_cticks +0804cc64 B igmp_all_hosts_group +0804cc68 B igmp_all_rtrs_group +0804cc6c B netmain_wakes +0804cc70 B nettick_wakes +0804cc74 B iniche_net_ready +0804cc78 B to_netmain +0804cc79 B to_nettick +0804cc7c B tcp_sleep_timeout +0804cc80 B cticks_initialized +0804cc84 B irq_level +0804cc88 b cpu_statusreg +0804cc8c b kbd_init.4507 +0804cc90 B cticks_factor +0804cc94 B OS_TPS +0804cc98 B tcp_sleep_count +0804cc9c B tcp_wakeup_count +0804cca0 B netq_intmask +0804cca4 B old_mode +0804cca8 B global_TCPwakeup_setIndx +0804ccac B cticks +0804ccb0 B memtrapsize +0804ccb4 B mheap_sem_ptr +0804ccb8 B rcvdq_sem_ptr +0804ccbc B nextslow +0804ccc0 b in_tcptick +0804ccc4 B mbstat +0804cccc B select_wait +0804ccd0 B tcpprintfs +0804ccd4 B dropline +0804ccd8 B tcp_optionbuf +0804ccdc B tcp_maxidle +0804cce0 B tcp_iss +0804cce4 B alt_fd_list_lock +0804cce8 B alt_irq_active +0804ccec B _alt_tick_rate +0804ccf0 B _alt_nticks +0804ccf4 B activehost +0804ccf8 b inside_pktdemux +0804ccfc B nextppp +0804cd00 B port_1s_callout +0804cd04 b numtimers +0804cd08 B icmpdu_hook +0804cd0c B rt_mib +0804cd10 B port_prep +0804cd14 B net_system_exit +0804cd18 B so_evtmap_create +0804cd1c B so_evtmap_delete +0804cd20 B so_evtmap +0804cd24 B ipraw_eps +0804cd28 B cachedRoute +0804cd2c b usocket +0804cd30 B firstudp +0804cd34 B inpcb_cachehits +0804cd38 B inpcb_cachemiss +0804cd3c B vfsystems +0804cd40 B vfiles +0804cd44 B vfsfiles +0804cd48 B vfopen_error +0804cd4c B vfs_dir_stale +0804cd50 B vfs_open_files +0804cd54 B vfs_total_rw_space +0804cd58 B vfs_total_dyna_files +0804cd5c B alt_instruction_exception_handler +0804cd60 b packet_data.5855 +0804cd80 b connections +0804cd90 B __malloc_current_mallinfo +0804cdb8 b closers +0804cdf4 b tistring +0804ce0c b nearBuf.4931 +0804ce2c B InitialTaskStk +08054ab8 A _gp +0805ae2c B OSFlagTbl +0805b19c B OSMemTbl +0805bdcc B OSQTbl +0805bfac B OSTaskIdleStk +0805c7ac B OSEventTbl +0805d2ec B OSTCBTbl +0805d574 B OSTCBPrioTbl +0805d5c8 B eth_tse_if +0805d6a8 B pmac_groups +0805d6b8 B pphy_profiles +0805d6d8 B tse_iniche_dev_driver_data +0805d708 B tse +0805d998 B arp_table +0805da98 B netlist +0805daac B rcvdq +0805dac0 B netstatic +0805ddc0 B nets +0805ddd0 B igmpstats +0805de34 B eth_prt_buf +0805de46 B ipreturn +0805de58 B lilfreeq +0805de6c B memestats +0805de7c B pktlog +0805df6c B bigfreeq +0805df80 B global_tcb_ext +0805e07c B global_TCPwakeup_set +0805e16c B resid_semaphore +0805e1ac B app_semaphore +0805e1c4 B soq +0805e1d8 B tcpmib +0805e214 B mbufq +0805e228 B mfreeq +0805e23c B tcp_saveti +0805e264 B tcb +0805e290 B tcpstat +0805e370 B alt_irq +0805e470 B intimers +0805e4d4 B icmp_mib +0805e53c B ip_mib +0805e58c B udp_mib +0805e59c A __alt_heap_start +0805e59c A __alt_stack_base +0805e59c A __bss_end +0805e59c A _end +0805e59c A end +10000000 A __alt_data_end +10000000 A __alt_heap_limit +10000000 A __alt_stack_pointer +14000000 A __alt_mem_ext_flash_avl_mem +14000000 T __reset +18200000 A __alt_mem_onchip_flash_data +18400000 A __alt_mem_descriptor_memory +18403400 A __alt_mem_calibration_ram diff --git a/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_calibration_ram.dat b/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_calibration_ram.dat new file mode 100644 index 0000000..e69de29 diff --git a/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_calibration_ram.sym b/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_calibration_ram.sym new file mode 100644 index 0000000..d508ca2 --- /dev/null +++ b/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_calibration_ram.sym @@ -0,0 +1,1138 @@ +00000000 a OSTCBStkPtr_OFFSET +00000014 a OSTCBNext_OFFSET +00000032 a OSTCBPrio_OFFSET +00000040 a OSCtxSw_SWITCH_PC +08000000 A __alt_mem_ddr3_ram +08000120 T alt_exception +08000120 T alt_irq_entry +080001fc T alt_irq_handler +080002c4 T alt_instruction_exception_entry +08000338 T _start +0800037c t alt_after_alt_main +08000380 T control_delay +080003b0 T control_pong +08000418 T control_process_snapshot +08000478 T check_arp +080004f8 T control_process_config_peer +0800080c T control_get_header +080008a4 T control_get_data +08000950 T control_step +08001064 T ControlTask +080010f0 T control_init +08001124 T InitialTask +08001178 T main +080011e8 T get_mac_addr +0800123c T get_ip_addr +08001434 T get_serial_number +080015c8 T generate_and_store_mac_addr +08001780 T generate_mac_addr +080018b4 T get_board_mac_addr +08001a54 T FindLastFlashSectorOffset +08001b80 T sensor_command_bit +08001c08 T sensor_preconfigure +08001d1c T ss_reset_connection +08001d58 T ss_initialize_connection +08001da8 T ss_handle_accept +08001e90 T SSListenerTask +08002050 T ethernet_init +080020d0 T ethernet_listen +0800220c T ethernet_write +08002314 T ethernet_read +080024cc T ethernet_close +08002554 T udpgen_command_bit +080025dc T udpgen_test +080027a8 T swap_bytes +08002840 T swap_quad +08002904 T reload_fpga +08002944 T masterslave +080029cc T master_clock_period +08002a14 T master_clock_enable +08002a70 T led_set +08002abc T led_clear +08002b08 T led_toggle +08002b7c T led4_blink_enable +08002bc8 T set_delay +08002c30 T _getchar_r +08002c38 T getchar +08002c48 T _printf_r +08002c78 T printf +08002cb0 T _putchar_r +08002cb8 T putchar +08002cd0 T _puts_r +08002d9c T puts +08002dac T strlen +08002e44 T ___vfprintf_internal_r +08004fa4 T __vfprintf_internal +08004fbc t __sbprintf +0800507c T __swsetup_r +080051dc t quorem +080053ec T _dtoa_r +08006ab4 T __sflush_r +08006cdc T _fflush_r +08006d3c T fflush +08006d64 t __fp_lock +08006d6c T _cleanup_r +08006d78 t __sinit.part.0 +08006ee0 t __fp_unlock +08006ee8 T __sfmoreglue +08006f50 T __sfp +0800704c T _cleanup +08007060 T __sinit +08007070 T __sfp_lock_acquire +08007074 T __sfp_lock_release +08007078 T __sinit_lock_acquire +0800707c T __sinit_lock_release +08007080 T __fp_lock_all +08007094 T __fp_unlock_all +080070a8 T _malloc_trim_r +080071c4 T _free_r +080074c0 T __sfvwrite_r +08007984 T _fwalk +08007a28 T _fwalk_reent +08007adc T _getc_r +08007b58 T getc +08007be8 T __localeconv_l +08007bf0 T _localeconv_r +08007bfc T localeconv +08007c08 T __swhatbuf_r +08007ca0 T __smakebuf_r +08007ddc T _malloc_r +080085d0 T memchr +080086b8 T memcpy +080087b8 T memmove +080088e4 T memset +080089d4 T _Balloc +08008a78 T _Bfree +08008a9c T __multadd +08008bb0 T __s2b +08008cc0 T __hi0bits +08008d24 T __lo0bits +08008dd4 T __i2b +08008e08 T __multiply +08008ff4 T __pow5mult +0800911c T __lshift +08009258 T __mcmp +080092b0 T __mdiff +0800946c T __ulp +080094c8 T __b2d +080095cc T __d2b +08009714 T __ratio +080097bc T _mprec_log10 +08009830 T __copybits +0800989c T __any_on +08009910 T _putc_r +080099dc T putc +08009abc T _realloc_r +0800a0e8 T __srget_r +0800a15c T __srget +0800a16c T _sbrk_r +0800a1c4 T __sread +0800a218 T __seofread +0800a220 T __swrite +0800a2a0 T __sseek +0800a2fc T __sclose +0800a304 t __sprint_r.part.0 +0800a3f8 T __sprint_r +0800a410 T ___vfiprintf_internal_r +0800b73c T __vfiprintf_internal +0800b754 t __sbprintf +0800b814 T __swbuf_r +0800b95c T __swbuf +0800b970 T _write_r +0800b9d4 T _close_r +0800ba2c T _calloc_r +0800bae4 T _fclose_r +0800bbdc T fclose +0800bbec T __fputwc +0800bd3c T _fputwc_r +0800bd60 T fputwc +0800bddc T _fstat_r +0800be3c T _isatty_r +0800be94 T _setlocale_r +0800bf04 T __locale_mb_cur_max +0800bf10 T setlocale +0800bf24 T _lseek_r +0800bf88 T _mbtowc_r +0800bf94 T __ascii_mbtowc +0800bfd8 T _read_r +0800c03c t lflush +0800c058 T __srefill_r +0800c224 T strcmp +0800c2fc T _wcrtomb_r +0800c368 T wcrtomb +0800c3ec T _wctomb_r +0800c3f8 T __ascii_wctomb +0800c428 T __udivdi3 +0800c9c0 T __umoddi3 +0800cf00 T __divsi3 +0800cf80 T __modsi3 +0800cff8 T __udivsi3 +0800d05c T __umodsi3 +0800d0b8 T __adddf3 +0800da58 T __divdf3 +0800e300 T __eqdf2 +0800e300 T __nedf2 +0800e380 T __gedf2 +0800e380 T __gtdf2 +0800e470 T __ledf2 +0800e470 T __ltdf2 +0800e560 T __muldf3 +0800ebec T __subdf3 +0800f558 T __unorddf2 +0800f5ac T __fixdfsi +0800f62c T __floatsidf +0800f6f4 T __floatunsidf +0800f790 T __clzsi2 +0800f7e4 T alt_flash_open_dev +0800f84c T alt_flash_close_dev +0800f8a0 t alt_get_errno +0800f8dc T fstat +0800f98c t alt_get_errno +0800f9c8 T isatty +0800fa6c t alt_get_errno +0800faa8 T lseek +0800fb7c T alt_main +0800fc38 T sbrk +0800fce8 T __env_lock +0800fdac T __env_unlock +0800fe0c T __malloc_lock +0800ff2c T __malloc_unlock +0800fff8 T OSEventNameGet +080100d0 T OSEventNameSet +080101d0 T OSEventPendMulti +0801077c T OSInit +080107cc T OSIntEnter +08010818 T OSIntExit +08010908 T OSSchedLock +08010994 T OSSchedUnlock +08010a70 T OSStart +08010ad8 T OSTimeTick +08010c98 T OSVersion +08010cb8 T OS_Dummy +08010cd8 T OS_EventTaskRdy +08010e60 T OS_EventTaskWait +08010f68 T OS_EventTaskWaitMulti +080110b0 T OS_EventTaskRemove +08011160 T OS_EventTaskRemoveMulti +08011258 T OS_EventWaitListInit +080112c0 t OS_InitEventList +080113a0 t OS_InitMisc +080113dc t OS_InitRdyList +08011448 t OS_InitTaskIdle +080114cc t OS_InitTCBList +080115b0 T OS_MemClr +08011604 T OS_MemCopy +0801166c T OS_Sched +08011734 t OS_SchedNew +080117a0 T OS_StrCopy +08011814 T OS_StrLen +08011868 T OS_TaskIdle +080118c4 T OS_TCBInit +08011b98 T OSFlagAccept +08011e78 T OSFlagCreate +08011f70 T OSFlagDel +0801218c T OSFlagNameGet +0801226c T OSFlagNameSet +08012378 T OSFlagPend +08012910 T OSFlagPendGetFlagsRdy +08012970 T OSFlagPost +08012cdc T OSFlagQuery +08012d74 t OS_FlagBlock +08012ed8 T OS_FlagInit +08012fb8 t OS_FlagTaskRdy +080130ac T OS_FlagUnlink +08013150 T OSMemCreate +08013298 T OSMemGet +0801335c T OSMemNameGet +08013404 T OSMemNameSet +080134d8 T OSMemPut +08013590 T OSMemQuery +08013658 T OS_MemInit +08013724 T OSMutexAccept +0801389c T OSMutexCreate +08013a1c T OSMutexDel +08013cdc T OSMutexPend +08014238 T OSMutexPost +08014430 T OSMutexQuery +0801457c t OSMutex_RdyAtPrio +08014704 T OSQAccept +08014818 T OSQCreate +080149bc T OSQDel +08014c10 T OSQFlush +08014c9c T OSQPend +08014efc T OSQPendAbort +0801503c T OSQPost +08015194 T OSQPostFront +080152f4 T OSQPostOpt +080154f0 T OSQQuery +0801562c T OS_QInit +080156d4 T OSSemAccept +08015774 T OSSemCreate +0801584c T OSSemDel +08015a60 T OSSemPend +08015c44 T OSSemPendAbort +08015d84 T OSSemPost +08015e84 T OSSemQuery +08015f74 T OSSemSet +0801604c T OSTaskChangePrio +080164cc T OSTaskCreate +0801664c T OSTaskCreateExt +080167f0 T OSTaskDel +08016b04 T OSTaskDelReq +08016c2c T OSTaskNameGet +08016d64 T OSTaskNameSet +08016ec0 T OSTaskResume +08017078 T OSTaskSuspend +08017220 T OSTaskQuery +0801730c T OSTimeDly +08017410 T OSTimeDlyHMSM +0801750c T OSTimeDlyResume +080176d8 T OSTimeGet +08017734 T OSTimeSet +08017794 t alt_dev_reg +080177c8 T alt_irq_init +08017800 T alt_sys_init +08017a2c t alt_avalon_timer_sc_irq +08017aa4 T alt_avalon_timer_sc_init +08017b20 T no_printf +08017b50 T tse_mac_initTransInfo2 +08017bb0 T tse_mac_sTxWrite +08017c78 T tse_mac_aRxRead +08017ce8 T tse_mac_aTxWrite +08017d58 T tse_mac_SwReset +08017de0 T tse_mac_setMIImode +08017e34 T tse_mac_setGMIImode +08017e84 T alt_tse_phy_add_profile +08018038 T alt_tse_system_add_sys +080188fc T alt_tse_sys_enable_mdio_sharing +08018a40 T alt_tse_mac_get_common_speed +08018a80 T alt_tse_mac_set_common_speed +08018ac8 T alt_tse_get_system_index +08018b34 T alt_tse_get_mac_group_index +08018ba0 T alt_tse_get_mac_info_index +08018c1c T alt_tse_get_mac_info +08018ce8 T alt_tse_mac_set_speed +08018dc8 T alt_tse_mac_set_duplex +08018e54 T getPHYSpeed +080198cc T alt_tse_phy_rd_mdio_addr +08019914 T alt_tse_phy_wr_mdio_addr +0801996c T alt_tse_phy_wr_mdio_reg +08019a98 T alt_tse_phy_rd_mdio_reg +08019b68 T alt_tse_phy_add_profile_default +08019e30 T alt_tse_phy_print_profile +0801a000 T alt_tse_mac_group_init +0801a698 T alt_tse_mac_get_phy +0801aaa4 T alt_tse_mac_associate_phy +0801ace4 T alt_tse_phy_cfg_pcs +0801ae0c T alt_tse_phy_init +0801af18 T alt_tse_phy_restart_an +0801b0dc T alt_tse_phy_check_link +0801b264 T alt_tse_phy_get_cap +0801b7f0 T alt_tse_phy_set_adv_1000 +0801b9b4 T alt_tse_phy_set_adv_100 +0801bc08 T alt_tse_phy_set_adv_10 +0801bdb0 T alt_tse_phy_get_common_speed +0801c0cc T alt_tse_phy_set_common_speed +0801c57c T marvell_phy_cfg +0801c614 T marvell_cfg_gmii +0801c6f8 T marvell_cfg_sgmii +0801c7dc T marvell_cfg_rgmii +0801c8cc T DP83848C_link_status_read +0801c944 T PEF7071_config +0801c9a0 T PEF7071_link_status_read +0801ca40 T altera_avalon_uart_read_fd +0801caa0 T altera_avalon_uart_write_fd +0801cb00 T altera_avalon_uart_close_fd +0801cb50 T altera_avalon_uart_init +0801ccb0 t altera_avalon_uart_irq +0801cd4c t altera_avalon_uart_rxirq +0801ce80 t altera_avalon_uart_txirq +0801d020 T altera_avalon_uart_close +0801d074 t alt_get_errno +0801d0b0 T altera_avalon_uart_read +0801d318 t alt_get_errno +0801d354 T altera_avalon_uart_write +0801d588 t alt_flash_device_register +0801d5bc T alt_qspi_controller_lock +0801d6cc T alt_qspi_controller_get_info +0801d758 T alt_qspi_controller_erase_block +0801d87c T alt_qspi_controller_write_block +0801da8c T alt_qspi_controller_write +0801dc74 T alt_qspi_controller_read +0801dd20 T altera_qspi_controller_init +0801df74 t alt_qspi_validate_read_write_arguments +0801e010 t alt_qspi_poll_for_write_in_progress +0801e09c t alt_get_errno +0801e0d8 t alt_msgdma_write_standard_descriptor +0801e16c t alt_msgdma_write_extended_descriptor +0801e298 t alt_msgdma_irq +0801e41c t alt_msgdma_construct_standard_descriptor +0801e4a8 t alt_msgdma_construct_extended_descriptor +0801e5fc t alt_msgdma_descriptor_async_transfer +0801e938 t alt_msgdma_descriptor_sync_transfer +0801ed40 T alt_msgdma_construct_standard_st_to_mm_descriptor +0801ed98 T alt_msgdma_construct_standard_mm_to_st_descriptor +0801edf0 T alt_msgdma_construct_standard_mm_to_mm_descriptor +0801ee48 T alt_msgdma_construct_extended_st_to_mm_descriptor +0801eed8 T alt_msgdma_construct_extended_mm_to_st_descriptor +0801ef68 T alt_msgdma_construct_extended_mm_to_mm_descriptor +0801f010 t alt_msgdma_construct_prefetcher_standard_descriptor +0801f0b4 t alt_msgdma_construct_prefetcher_extended_descriptor +0801f248 T alt_msgdma_construct_prefetcher_standard_mm_to_mm_descriptor +0801f2a0 T alt_msgdma_construct_prefetcher_standard_st_to_mm_descriptor +0801f2f8 T alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor +0801f350 T alt_msgdma_construct_prefetcher_extended_st_to_mm_descriptor +0801f3f0 T alt_msgdma_construct_prefetcher_extended_mm_to_st_descriptor +0801f488 T alt_msgdma_construct_prefetcher_extended_mm_to_mm_descriptor +0801f540 T alt_msgdma_prefetcher_add_standard_desc_to_list +0801f630 T alt_msgdma_prefetcher_add_extended_desc_to_list +0801f7c8 T alt_msgdma_prefetcher_set_std_list_own_by_hw_bits +0801f8d8 T alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits +0801fa24 T alt_msgdma_start_prefetcher_with_list_addr +0801fd34 T alt_msgdma_start_prefetcher_with_std_desc_list +0801fde4 T alt_msgdma_start_prefetcher_with_extd_desc_list +0801fe94 T alt_msgdma_open +0801feec T alt_msgdma_init +08020094 T alt_msgdma_register_callback +080200e8 T alt_msgdma_standard_descriptor_async_transfer +08020124 T alt_msgdma_extended_descriptor_async_transfer +08020160 T alt_msgdma_standard_descriptor_sync_transfer +0802019c T alt_msgdma_extended_descriptor_sync_transfer +080201d8 t alt_flash_device_register +0802020c T alt_onchip_flash_read +080202d8 T alt_onchip_flash_get_info +08020374 T alt_onchip_flash_erase_block +080204dc T alt_onchip_flash_write_block +080207b4 T alt_onchip_flash_write +08020a80 T altera_onchip_flash_init +08020f20 T alt_onchip_flash_poll_for_status_to_go_idle +08020fb0 T alt_onchip_flash_poll_for_status_erase_passed +08021044 T alt_onchip_flash_poll_for_status_write_passed +080210d8 T altera_eth_tse_init +08021220 T prep_tse_mac +0802144c T msgdma_reset +080214c4 T tse_mac_init +08021f28 T tse_msgdma_write_init +08022048 T tse_mac_raw_send +08022210 T tse_msgdmaRx_isr +080223a8 T tse_msgdmaTx_isr +08022408 T tse_msgdma_read_init +080226c0 T allocate_rx_descriptor_chain +080227f8 T tse_mac_rcv +08022944 T tse_mac_stats +08022984 T tse_mac_close +08022a60 T close +08022aa8 T iniche_devices_init +08022bcc T read +08022c3c T write +08022ca4 T etainit +08022cec T et_send +08022e6c T arp_free_pending +08022ef4 T arp_send_pending +08022f68 T send_arp +080233bc T find_oldest_arp +08023528 T make_arp_entry +08023624 T arpReply +080238e4 T arprcv +08023b48 T send_via_arp +08023cc4 T cb_arpent_tmo +08023dd0 T grat_arp +08024088 T if_getbynum +080240f4 T isbcast +080241c8 T reg_type +08024254 T if_killsocks +080242e4 T Netinit +080247b4 T fixup_subnet_mask +080248e4 T netclose +080249c4 T pktdemux +08024d64 T c_older +08024df4 T ip2mac +08024f80 T ip_startup +080251e4 T exit_hook +0802524c T ip_exit +080252fc T if_netnumber +0802537c T igmp_init +0802541c T igmp_input +080254ec T igmp_fasttimo +0802565c T igmp_send +080258d8 T igmp_joingroup +08025b04 T igmp_leavegroup +08025b84 T igmp_validate +08025e60 T igmp_print_stats +08026214 T bsd_accept +08026334 T bsd_getpeername +08026454 T bsd_getsockname +08026574 T bsd_i_sockoptlen +08026704 T bsd_getsockopt +0802680c T bsd_ioctl +080268fc T bsd_inet_ntoa +08026930 T bsd_recvfrom +08026a74 T bsd_select +08026bfc T bsd_setsockopt +08026cd8 T ccksum +08026d7c T cksum +08026dd0 T do_trap +08026dfc T nextarg +08026e78 T hexdump +08026fbc T print_ipad +08027038 T print_uptime +08027178 T panic +080271c0 T print_eth +08027314 T uslash +08027390 T ns_printf +08027500 T std_out +08027544 T con_page +0802761c T parse_args +08027814 T netmain +080278f4 T tk_netmain +0802796c T tk_nettick +080279b0 T TK_OSTimeDly +080279e0 T TK_OSTaskResume +08027a54 T tcp_sleep +08027ba0 T tcp_wakeup +08027c78 T TK_OSTaskQuery +08027ce4 T tk_yield +08027d14 T tk_stats +08027f0c T icmpEcho +080281a8 T pk_init +08028434 T pk_alloc +080284f4 T pk_validate +08028748 T pk_free +080287f4 T pk_get_max_intrsafe_buf_len +08028814 T dump_buf_estats +080288d8 T getq +08028990 T putq +08028a40 T qdel +08028b40 T asm_cksum +08028b60 t asm1 +08028b88 t loop +08028c8c t loop0 +08028ca8 t fold +08028cd0 t done +08028cd4 T dtrap +08028d08 T kbhit +08028d90 T getch +08028de0 T clock_init +08028e18 T clock_c +08028e38 T cticks_hook +08028e94 T irq_Mask +08028ef4 T irq_Unmask +08028f38 T LOCK_NET_RESOURCE +08028ff4 T UNLOCK_NET_RESOURCE +08029074 T TK_NEWTASK +080292b4 T wait_app_sem +08029368 T post_app_sem +080293dc T alt_iniche_init +0802959c T pre_task_setup +080295e8 T post_task_setup +08029608 T prep_armintcp +08029640 T npalloc_base +0802974c T npfree_base +0802982c T npalloc +08029860 T npfree +080298a0 T ncpalloc +080298d4 T ncpfree +08029914 T pffindtype +080299a4 T pffindproto +08029a70 T m_getnbuf +08029bf8 T m_free +08029cfc T m_freem +08029d40 T m_copy +0802a018 T m_adj +0802a1d8 T mbuf_len +0802a22c T dtom +0802a2c4 T remque +0802a334 T insque +0802a3b0 T nptcp_init +0802a4a4 T tcp_rcv +0802a658 T ip_output +0802abe0 T in_broadcast +0802ac18 T np_stripoptions +0802ad08 T so_icmpdu +0802b050 T tcp_tick +0802b0c8 T rawip_lookup +0802b124 T rawip_soinput +0802b2e8 T rawip_usrreq +0802ba20 T DOMAIN_CHECK +0802ba70 T t_socket +0802baf0 T t_bind +0802bc50 T t_listen +0802bd24 T t_accept +0802bf74 T t_connect +0802c1e4 T t_getpeername +0802c228 T t_getsockname +0802c26c t t_getname +0802c44c T t_setsockopt +0802c60c T t_getsockopt +0802c794 T t_recv +0802c870 T t_recvfrom +0802c9ac T t_sendto +0802cb9c T t_send +0802cd9c T t_shutdown +0802ce70 T t_socketclose +0802cf30 t sockargs +0802cfbc T t_errno +0802d050 T socreate +0802d1f8 T sobind +0802d254 T solisten +0802d324 T sofree +0802d434 T soclose +0802d6fc T soabort +0802d74c T soaccept +0802d7e4 T soconnect +0802d89c T sodisconnect +0802d934 T sosend +0802de94 T soreceive +0802e5ec T soshutdown +0802e684 T sorflush +0802e780 T sosetopt +0802ec0c T sogetopt +0802f12c T sohasoutofband +0802f178 T soisconnecting +0802f1e8 T soisconnected +0802f2ec T soisdisconnecting +0802f384 T soisdisconnected +0802f448 T sonewconn +0802f640 T soqinsque +0802f6ec T soqremque +0802f7f4 T socantsendmore +0802f84c T socantrcvmore +0802f8a4 T sbselqueue +0802f8e0 T sbwait +0802f94c T sbwakeup +0802f9d8 T soreserve +0802fa60 T sbreserve +0802fab0 T sbrelease +0802fafc T sbappend +0802fb9c T sbappendrecord +0802fc74 T sbappendaddr +0802fe50 T sbcompress +0803002c T sbflush +080300b0 T sbdrop +08030268 T sbdropend +08030368 T sbdroprecord +080303f8 T t_select +080305c8 T sock_selscan +08030708 T sock_select +080308f0 T in_pcbnotify +080309b4 T tcp_notify +08030a34 T ifd_clr +08030b18 T ifd_set +08030b8c T ifd_isset +08030c00 T ifd_get +08030c60 T tcp_reass +08031050 T tcp_input +08033264 T tcp_dooptions +080333ec T tcp_pulloutofband +08033518 T tcp_xmit_timer +08033754 T ip4_tcpmss +0803379c T tcp_mss +08033894 T tcp_output +08034830 T tcp_setpersist +0803492c t bld_options +080349f8 T tcp_init +08034a40 T tcp_template +08034b48 T tcp_respond +08034f40 T tcp_newtcpcb +0803504c T tcp_drop +080350e8 T tcp_close +080351d0 T tcp_quench +0803521c T tcp_putseq +08035294 T tcp_getseq +08035308 T tcp_slowtimo +08035564 T tcp_canceltimers +080355c0 T tcp_timers +08035a14 T tcp_usrreq +080360cc T tcp_attach +080361e4 T tcp_disconnect +080362b0 T tcp_usrclosed +0803637c T tcpinit +080363bc T udp_lookup +08036418 T udp_soinput +080365b8 T udp_usrreq +080367f0 T udp4_sockbind +08036ac0 T udp4_socksend +08036e34 T udp4_sockaddr +08036f5c T alt_busy_sleep +080370b4 t alt_get_errno +080370f0 T alt_close +080371c0 T alt_dcache_flush +08037238 t alt_dev_null_write +08037264 t alt_get_errno +080372a0 T alt_dev_llist_insert +08037344 T _do_ctors +080373a4 T _do_dtors +08037404 T alt_find_dev +08037494 T alt_ic_isr_register +080374e4 T alt_ic_irq_enable +0803756c T alt_ic_irq_disable +080375f8 T alt_ic_irq_enabled +08037644 T alt_iic_isr_register +08037728 t alt_open_fd +080377d8 T alt_io_redirect +08037854 t alt_get_errno +08037890 t alt_file_locked +08037948 T open +08037a9c T alt_printf +08037cc8 T alt_putchar +08037cf8 t alt_get_errno +08037d34 T alt_read +08037e30 T alt_release_fd +08037e88 T alt_remap_cached +08037ebc T alt_alarm_stop +08037f58 T alt_tick +08038060 T alt_uncached_free +080380a4 T alt_uncached_malloc +0803811c T usleep +08038230 t alt_get_errno +0803826c T alt_write +08038364 T altera_nios2_gen2_irq_init +08038388 T OSCtxSw +08038388 T OSIntCtxSw +08038414 T OSStartHighRdy +08038434 T OSStartTsk +08038458 T OSTaskStkInit +080385a4 T OSTaskCreateHook +080385c8 T OSTaskDelHook +080385ec T OSTaskSwHook +0803860c T OSTaskStatHook +0803862c T OSTimeTickHook +08038658 T OSInitHookBegin +08038678 T OSInitHookEnd +08038698 T OSTaskIdleHook +080386b8 T OSTCBInitHook +080386dc T netmain_init +080387c4 T icmp_port_du +08038850 T station_state +080389b0 T sysuptime +080389e8 T packet_check +08038a38 T mcastlist +08038a5c T prep_modules +08038ab0 T inet_timer +08038b28 t check_interval_timers +08038c74 T in_timerset +08038da0 T in_timerkill +08038e38 T create_apptasks +08038e5c T task_stats +08038ed8 T fcntl +08038f78 T icmprcv +08039a54 T icmp_destun +08039d2c T icmp_timex +0803a01c T icmp_du +0803a070 T ip_init +0803a148 T ip_bldhead +0803a2d4 T ip_write_internal +0803a9e8 T ip_write +0803abf8 T ip_write2 +0803af6c T ip_raw_write +0803b028 T ip_mymach +0803b0cc T ip_dump +0803b370 T iproute +0803b53c T ip_copypkt +0803b668 T ip_rcv +0803b9bc T ip_rcv_phase2 +0803bf08 T ip_demux +0803c2ac T in_addmulti +0803c3f8 T in_delmulti +0803c504 T lookup_mcast +0803c568 T prep_ifaces +0803c5e8 T netexit +0803c610 T evtmap_setup +0803c63c T ip_raw_open +0803c714 T ip_raw_close +0803c7d0 T ip_raw_input +0803c9e4 T ip_raw_alloc +0803ca9c T ip_raw_free +0803cae0 T ip_raw_maxalloc +0803cb28 T rt_lookup +0803cc7c T add_route +0803d020 T del_route +0803d134 T udpdemux +0803d8a0 T udp_send +0803db34 T udpswap +0803dc28 T udp_socket +0803dcd8 T udp_alloc +0803dd94 T udp_maxalloc +0803ddb8 T udp_free +0803ddfc T igmpv1_input +0803e064 T igmpv2_input +0803e170 T igmpv2_process_report +0803e284 T igmpv2_process_query +0803e444 T igmpv2_chk_set_timer +0803e574 T igmpv2_chk4_rtr_alert_opt +0803e6b0 T IPADDR_TO_NETP +0803e7c4 T ip_setmoptions +0803ed64 T ip_getmoptions +0803ee74 T ip_freemoptions +0803eef8 T u_mctest_init +0803ef2c T u_mctest_run +0803f598 T init_memdev +0803f5e8 T md_fopen +0803f610 T md_fclose +0803f634 T md_fread +0803f78c T md_fwrite +0803f804 T md_fseek +0803f830 T md_ftell +0803f854 T md_fgetc +0803f918 T md_unlink +0803f93c T parse_ipad +0803fc38 T inet_addr +0803fc9c T hextoa +0803fce8 T inet_pton +0803fd7c T inet_ntop +0803fe00 T print46_addr +0803fe5c T inet46_addr +0803ff20 T inet_setport +0803ff8c T convert_ip +080400c0 T tcp_cksum +08040254 T udp_open +08040454 T udp_close +0804052c T in_pcballoc +080405b4 T in_pcbdetach +0804060c T in_pcbbind +0804081c T in_pcbconnect +080409fc T in_pcbdisconnect +08040a58 T in_setsockaddr +08040adc T in_setpeeraddr +08040b60 T in_pcblookup +08040db4 T set_vfopen_error +08040de0 T get_vfopen_error +08040e00 T vf_alloc_and_link_vop +08040e70 T vf_alloc_buffer +08040f38 T vf_free_buffer +08040f88 T vfopen_locked +080412c0 T vfopen +08041310 T vfclose_locked +080414cc T vfclose +08041510 T vfflush +08041558 T vfgets +08041628 T vfeof +08041678 T vunlink_flag_open_files +080416d4 T vunlink +080418d4 T vfread +08041a5c T vfwrite_locked +08041e08 T vfwrite +08041e68 T vfseek +08041fbc T vftell +080420c8 T vgetc_locked +080421c0 T vgetc +08042208 T vfslookup_locked +0804232c T vfslookup +08042374 T strippath +08042540 T isvfile_locked +08042598 T isvfile +080425e0 T vferror +0804263c T vclearerr +08042694 T prep_vfs +080426b8 t alt_get_errno +080426f4 T alt_fcntl +08042818 T alt_find_file +08042920 T alt_get_fd +080429f8 T alt_exception_cause_generated_bad_addr +08042a90 T atexit +08042aa4 T atoi +08042ab0 T _atoi_r +08042abc T exit +08042af0 T memalign +08042b04 T _memalign_r +08042c98 T malloc +08042ca8 T free +08042cb8 T memcmp +08042d44 T _sprintf_r +08042d98 T sprintf +08042dfc T strchr +08042f60 T strcpy +08042fec T strncmp +080430e8 t _strtol_l.isra.0 +0804330c T _strtol_r +08043310 T strtol_l +08043328 T strtol +08043340 T ___svfprintf_internal_r +08045458 T vprintf +08045474 T _vprintf_r +08045484 T _vsprintf_r +080454d0 T vsprintf +080454e8 T __register_exitproc +08045578 T __call_exitprocs +08045690 T __ssprint_r +08045850 T ___svfiprintf_internal_r +08046970 T _vfprintf_r +08046974 T _exit +080469a8 A __CTOR_END__ +080469a8 A __CTOR_LIST__ +080469a8 A __DTOR_END__ +080469a8 A __DTOR_LIST__ +080471d6 R _ctype_ +080472d7 R _ctype_b +0804749e r zeroes.5227 +080474ae r blanks.5226 +080474d0 r p05.4024 +080474dc R __mprec_tinytens +08047504 R __mprec_bigtens +0804752c R __mprec_tens +080475f4 r zeroes.5204 +08047604 r blanks.5203 +08047624 R __clz_tab +08047734 R OSUnMapTbl +0804b8d1 r zeroes.5208 +0804b8e1 r blanks.5207 +0804b8f1 r zeroes.5188 +0804b901 r blanks.5187 +0804b920 G controltask +0804b938 G sslistenertask +0804b950 G tse_mac_device +0804ba80 g impure_data +0804bea4 G __malloc_av_ +0804c2ac G __global_locale +0804c420 g debug_uart +0804c4f0 g ext_flash +0804c5d0 g msgdma_rx +0804c640 g msgdma_tx +0804c6b0 g onchip_flash +0804c7b0 G nettasks +0804c7e0 G tcp_protosw +0804c7f8 G udp_protosw +0804c810 G rawip_protosw +0804c828 G tcp_outflags +0804c833 G tcp_backoff +0804c840 G alt_dev_null +0804c868 G alt_fd_list +0804c928 G icmpdu_types +0804c940 g dsts +0804c958 G rtp_priority +0804c964 G mdio +0804c988 G mdlist +0804ca38 G vfs_root_path +0804cab8 G _global_impure_ptr +0804cabc G _impure_ptr +0804cac0 G __malloc_sbrk_base +0804cac4 G __malloc_trim_threshold +0804cac8 G alt_flash_dev_list +0804cad0 g heap_end +0804cad4 g lockid +0804cad8 g lockid +0804cadc G eth_tse_name +0804cae0 G max_mac_system +0804cae4 G alt_msgdma_list +0804caec G altera_onchip_flash_list +0804caf4 G alt_iniche_dev_list +0804cafc G arp_ageout +0804cb00 G ipmcfail_str +0804cb04 g cksum_select +0804cb08 G num_net_tasks +0804cb0c G pingdata +0804cb10 G lilbufs +0804cb14 G lilbufsiz +0804cb18 G bigbufs +0804cb1c G bigbufsiz +0804cb20 G kb_last +0804cb24 G TCPTV_MSL +0804cb28 G socket_defaults +0804cb2a G tcprexmtthresh +0804cb2c G tcp_ttl +0804cb30 G tcp_keepidle +0804cb34 G tcp_keepintvl +0804cb38 G tcp_sendspace +0804cb3c G tcp_recvspace +0804cb40 G alt_fs_list +0804cb48 G alt_dev_list +0804cb50 G alt_max_fd +0804cb54 G alt_errno +0804cb58 G alt_priority_mask +0804cb5c G alt_alarm_list +0804cb64 G name +0804cb68 G prompt +0804cb6c G pingdelay +0804cb70 G deflength +0804cb74 g uid +0804cb78 G ipRoutes +0804cb7c g iCounter.5304 +0804cb80 G mdlist_size +0804cb84 G pton_error +0804cb88 G http_root_path +0804cb8c A __bss_start +0804cb8c A _edata +0804cb8c b bytes_received.5850 +0804cb90 b header.5849 +0804cb98 b bytes_received.5856 +0804cb9c B to_controltask +0804cba0 B last_flash_sector_offset +0804cba4 B last_flash_sector +0804cba8 b mutex +0804cbac B to_sslistenertask +0804cbae B mastermode +0804cbb0 B delays +0804cbb4 B __malloc_max_total_mem +0804cbb8 B __malloc_max_sbrked_mem +0804cbbc B __malloc_top_pad +0804cbc0 B errno +0804cbc4 B _PathLocale +0804cbc8 B alt_argc +0804cbcc B alt_argv +0804cbd0 B alt_envp +0804cbd4 b locks +0804cbd8 B alt_envsem +0804cbdc b locks +0804cbe0 B alt_heapsem +0804cbe4 B OSLockNesting +0804cbe5 B OSRunning +0804cbe8 B OSIdleCtr +0804cbec B OSPrioHighRdy +0804cbed B OSPrioCur +0804cbf0 B OSTCBList +0804cbf4 B OSCtxSwCtr +0804cbf8 B OSTCBFreeList +0804cbfc B OSTaskCtr +0804cc00 B OSMemFreeList +0804cc04 B OSTCBHighRdy +0804cc08 B OSQFreeList +0804cc0c B OSRdyGrp +0804cc0d B OSRdyTbl +0804cc10 B OSEventFreeList +0804cc14 B OSIntNesting +0804cc18 B OSTCBCur +0804cc1c B OSTime +0804cc20 B OSFlagFreeList +0804cc24 B phy_profile_count +0804cc25 B mac_group_count +0804cc26 b tse_system_count.5331 +0804cc27 b is_init.5413 +0804cc28 B number_of_tse_mac +0804cc2c b arp_timer +0804cc30 B arpcache +0804cc34 b cachetime +0804cc38 B arpReqsIn +0804cc3c B arpReqsOut +0804cc40 B arpRepsIn +0804cc44 B arpRepsOut +0804cc48 B MaxLnh +0804cc4c B MaxMtu +0804cc50 B NDEBUG +0804cc54 B ifNumber +0804cc58 b nclosers +0804cc5c B igmp_timers_are_running +0804cc60 B igmp_cticks +0804cc64 B igmp_all_hosts_group +0804cc68 B igmp_all_rtrs_group +0804cc6c B netmain_wakes +0804cc70 B nettick_wakes +0804cc74 B iniche_net_ready +0804cc78 B to_netmain +0804cc79 B to_nettick +0804cc7c B tcp_sleep_timeout +0804cc80 B cticks_initialized +0804cc84 B irq_level +0804cc88 b cpu_statusreg +0804cc8c b kbd_init.4507 +0804cc90 B cticks_factor +0804cc94 B OS_TPS +0804cc98 B tcp_sleep_count +0804cc9c B tcp_wakeup_count +0804cca0 B netq_intmask +0804cca4 B old_mode +0804cca8 B global_TCPwakeup_setIndx +0804ccac B cticks +0804ccb0 B memtrapsize +0804ccb4 B mheap_sem_ptr +0804ccb8 B rcvdq_sem_ptr +0804ccbc B nextslow +0804ccc0 b in_tcptick +0804ccc4 B mbstat +0804cccc B select_wait +0804ccd0 B tcpprintfs +0804ccd4 B dropline +0804ccd8 B tcp_optionbuf +0804ccdc B tcp_maxidle +0804cce0 B tcp_iss +0804cce4 B alt_fd_list_lock +0804cce8 B alt_irq_active +0804ccec B _alt_tick_rate +0804ccf0 B _alt_nticks +0804ccf4 B activehost +0804ccf8 b inside_pktdemux +0804ccfc B nextppp +0804cd00 B port_1s_callout +0804cd04 b numtimers +0804cd08 B icmpdu_hook +0804cd0c B rt_mib +0804cd10 B port_prep +0804cd14 B net_system_exit +0804cd18 B so_evtmap_create +0804cd1c B so_evtmap_delete +0804cd20 B so_evtmap +0804cd24 B ipraw_eps +0804cd28 B cachedRoute +0804cd2c b usocket +0804cd30 B firstudp +0804cd34 B inpcb_cachehits +0804cd38 B inpcb_cachemiss +0804cd3c B vfsystems +0804cd40 B vfiles +0804cd44 B vfsfiles +0804cd48 B vfopen_error +0804cd4c B vfs_dir_stale +0804cd50 B vfs_open_files +0804cd54 B vfs_total_rw_space +0804cd58 B vfs_total_dyna_files +0804cd5c B alt_instruction_exception_handler +0804cd60 b packet_data.5855 +0804cd80 b connections +0804cd90 B __malloc_current_mallinfo +0804cdb8 b closers +0804cdf4 b tistring +0804ce0c b nearBuf.4931 +0804ce2c B InitialTaskStk +08054ab8 A _gp +0805ae2c B OSFlagTbl +0805b19c B OSMemTbl +0805bdcc B OSQTbl +0805bfac B OSTaskIdleStk +0805c7ac B OSEventTbl +0805d2ec B OSTCBTbl +0805d574 B OSTCBPrioTbl +0805d5c8 B eth_tse_if +0805d6a8 B pmac_groups +0805d6b8 B pphy_profiles +0805d6d8 B tse_iniche_dev_driver_data +0805d708 B tse +0805d998 B arp_table +0805da98 B netlist +0805daac B rcvdq +0805dac0 B netstatic +0805ddc0 B nets +0805ddd0 B igmpstats +0805de34 B eth_prt_buf +0805de46 B ipreturn +0805de58 B lilfreeq +0805de6c B memestats +0805de7c B pktlog +0805df6c B bigfreeq +0805df80 B global_tcb_ext +0805e07c B global_TCPwakeup_set +0805e16c B resid_semaphore +0805e1ac B app_semaphore +0805e1c4 B soq +0805e1d8 B tcpmib +0805e214 B mbufq +0805e228 B mfreeq +0805e23c B tcp_saveti +0805e264 B tcb +0805e290 B tcpstat +0805e370 B alt_irq +0805e470 B intimers +0805e4d4 B icmp_mib +0805e53c B ip_mib +0805e58c B udp_mib +0805e59c A __alt_heap_start +0805e59c A __alt_stack_base +0805e59c A __bss_end +0805e59c A _end +0805e59c A end +10000000 A __alt_data_end +10000000 A __alt_heap_limit +10000000 A __alt_stack_pointer +14000000 A __alt_mem_ext_flash_avl_mem +14000000 T __reset +18200000 A __alt_mem_onchip_flash_data +18400000 A __alt_mem_descriptor_memory +18403400 A __alt_mem_calibration_ram diff --git a/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_descriptor_memory.dat b/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_descriptor_memory.dat new file mode 100644 index 0000000..e69de29 diff --git a/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_descriptor_memory.sym b/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_descriptor_memory.sym new file mode 100644 index 0000000..d508ca2 --- /dev/null +++ b/FPGA_nios/hit_pat/mem_init/hdl_sim/q_sys_descriptor_memory.sym @@ -0,0 +1,1138 @@ +00000000 a OSTCBStkPtr_OFFSET +00000014 a OSTCBNext_OFFSET +00000032 a OSTCBPrio_OFFSET +00000040 a OSCtxSw_SWITCH_PC +08000000 A __alt_mem_ddr3_ram +08000120 T alt_exception +08000120 T alt_irq_entry +080001fc T alt_irq_handler +080002c4 T alt_instruction_exception_entry +08000338 T _start +0800037c t alt_after_alt_main +08000380 T control_delay +080003b0 T control_pong +08000418 T control_process_snapshot +08000478 T check_arp +080004f8 T control_process_config_peer +0800080c T control_get_header +080008a4 T control_get_data +08000950 T control_step +08001064 T ControlTask +080010f0 T control_init +08001124 T InitialTask +08001178 T main +080011e8 T get_mac_addr +0800123c T get_ip_addr +08001434 T get_serial_number +080015c8 T generate_and_store_mac_addr +08001780 T generate_mac_addr +080018b4 T get_board_mac_addr +08001a54 T FindLastFlashSectorOffset +08001b80 T sensor_command_bit +08001c08 T sensor_preconfigure +08001d1c T ss_reset_connection +08001d58 T ss_initialize_connection +08001da8 T ss_handle_accept +08001e90 T SSListenerTask +08002050 T ethernet_init +080020d0 T ethernet_listen +0800220c T ethernet_write +08002314 T ethernet_read +080024cc T ethernet_close +08002554 T udpgen_command_bit +080025dc T udpgen_test +080027a8 T swap_bytes +08002840 T swap_quad +08002904 T reload_fpga +08002944 T masterslave +080029cc T master_clock_period +08002a14 T master_clock_enable +08002a70 T led_set +08002abc T led_clear +08002b08 T led_toggle +08002b7c T led4_blink_enable +08002bc8 T set_delay +08002c30 T _getchar_r +08002c38 T getchar +08002c48 T _printf_r +08002c78 T printf +08002cb0 T _putchar_r +08002cb8 T putchar +08002cd0 T _puts_r +08002d9c T puts +08002dac T strlen +08002e44 T ___vfprintf_internal_r +08004fa4 T __vfprintf_internal +08004fbc t __sbprintf +0800507c T __swsetup_r +080051dc t quorem +080053ec T _dtoa_r +08006ab4 T __sflush_r +08006cdc T _fflush_r +08006d3c T fflush +08006d64 t __fp_lock +08006d6c T _cleanup_r +08006d78 t __sinit.part.0 +08006ee0 t __fp_unlock +08006ee8 T __sfmoreglue +08006f50 T __sfp +0800704c T _cleanup +08007060 T __sinit +08007070 T __sfp_lock_acquire +08007074 T __sfp_lock_release +08007078 T __sinit_lock_acquire +0800707c T __sinit_lock_release +08007080 T __fp_lock_all +08007094 T __fp_unlock_all +080070a8 T _malloc_trim_r +080071c4 T _free_r +080074c0 T __sfvwrite_r +08007984 T _fwalk +08007a28 T _fwalk_reent +08007adc T _getc_r +08007b58 T getc +08007be8 T __localeconv_l +08007bf0 T _localeconv_r +08007bfc T localeconv +08007c08 T __swhatbuf_r +08007ca0 T __smakebuf_r +08007ddc T _malloc_r +080085d0 T memchr +080086b8 T memcpy +080087b8 T memmove +080088e4 T memset +080089d4 T _Balloc +08008a78 T _Bfree +08008a9c T __multadd +08008bb0 T __s2b +08008cc0 T __hi0bits +08008d24 T __lo0bits +08008dd4 T __i2b +08008e08 T __multiply +08008ff4 T __pow5mult +0800911c T __lshift +08009258 T __mcmp +080092b0 T __mdiff +0800946c T __ulp +080094c8 T __b2d +080095cc T __d2b +08009714 T __ratio +080097bc T _mprec_log10 +08009830 T __copybits +0800989c T __any_on +08009910 T _putc_r +080099dc T putc +08009abc T _realloc_r +0800a0e8 T __srget_r +0800a15c T __srget +0800a16c T _sbrk_r +0800a1c4 T __sread +0800a218 T __seofread +0800a220 T __swrite +0800a2a0 T __sseek +0800a2fc T __sclose +0800a304 t __sprint_r.part.0 +0800a3f8 T __sprint_r +0800a410 T ___vfiprintf_internal_r +0800b73c T __vfiprintf_internal +0800b754 t __sbprintf +0800b814 T __swbuf_r +0800b95c T __swbuf +0800b970 T _write_r +0800b9d4 T _close_r +0800ba2c T _calloc_r +0800bae4 T _fclose_r +0800bbdc T fclose +0800bbec T __fputwc +0800bd3c T _fputwc_r +0800bd60 T fputwc +0800bddc T _fstat_r +0800be3c T _isatty_r +0800be94 T _setlocale_r +0800bf04 T __locale_mb_cur_max +0800bf10 T setlocale +0800bf24 T _lseek_r +0800bf88 T _mbtowc_r +0800bf94 T __ascii_mbtowc +0800bfd8 T _read_r +0800c03c t lflush +0800c058 T __srefill_r +0800c224 T strcmp +0800c2fc T _wcrtomb_r +0800c368 T wcrtomb +0800c3ec T _wctomb_r +0800c3f8 T __ascii_wctomb +0800c428 T __udivdi3 +0800c9c0 T __umoddi3 +0800cf00 T __divsi3 +0800cf80 T __modsi3 +0800cff8 T __udivsi3 +0800d05c T __umodsi3 +0800d0b8 T __adddf3 +0800da58 T __divdf3 +0800e300 T __eqdf2 +0800e300 T __nedf2 +0800e380 T __gedf2 +0800e380 T __gtdf2 +0800e470 T __ledf2 +0800e470 T __ltdf2 +0800e560 T __muldf3 +0800ebec T __subdf3 +0800f558 T __unorddf2 +0800f5ac T __fixdfsi +0800f62c T __floatsidf +0800f6f4 T __floatunsidf +0800f790 T __clzsi2 +0800f7e4 T alt_flash_open_dev +0800f84c T alt_flash_close_dev +0800f8a0 t alt_get_errno +0800f8dc T fstat +0800f98c t alt_get_errno +0800f9c8 T isatty +0800fa6c t alt_get_errno +0800faa8 T lseek +0800fb7c T alt_main +0800fc38 T sbrk +0800fce8 T __env_lock +0800fdac T __env_unlock +0800fe0c T __malloc_lock +0800ff2c T __malloc_unlock +0800fff8 T OSEventNameGet +080100d0 T OSEventNameSet +080101d0 T OSEventPendMulti +0801077c T OSInit +080107cc T OSIntEnter +08010818 T OSIntExit +08010908 T OSSchedLock +08010994 T OSSchedUnlock +08010a70 T OSStart +08010ad8 T OSTimeTick +08010c98 T OSVersion +08010cb8 T OS_Dummy +08010cd8 T OS_EventTaskRdy +08010e60 T OS_EventTaskWait +08010f68 T OS_EventTaskWaitMulti +080110b0 T OS_EventTaskRemove +08011160 T OS_EventTaskRemoveMulti +08011258 T OS_EventWaitListInit +080112c0 t OS_InitEventList +080113a0 t OS_InitMisc +080113dc t OS_InitRdyList +08011448 t OS_InitTaskIdle +080114cc t OS_InitTCBList +080115b0 T OS_MemClr +08011604 T OS_MemCopy +0801166c T OS_Sched +08011734 t OS_SchedNew +080117a0 T OS_StrCopy +08011814 T OS_StrLen +08011868 T OS_TaskIdle +080118c4 T OS_TCBInit +08011b98 T OSFlagAccept +08011e78 T OSFlagCreate +08011f70 T OSFlagDel +0801218c T OSFlagNameGet +0801226c T OSFlagNameSet +08012378 T OSFlagPend +08012910 T OSFlagPendGetFlagsRdy +08012970 T OSFlagPost +08012cdc T OSFlagQuery +08012d74 t OS_FlagBlock +08012ed8 T OS_FlagInit +08012fb8 t OS_FlagTaskRdy +080130ac T OS_FlagUnlink +08013150 T OSMemCreate +08013298 T OSMemGet +0801335c T OSMemNameGet +08013404 T OSMemNameSet +080134d8 T OSMemPut +08013590 T OSMemQuery +08013658 T OS_MemInit +08013724 T OSMutexAccept +0801389c T OSMutexCreate +08013a1c T OSMutexDel +08013cdc T OSMutexPend +08014238 T OSMutexPost +08014430 T OSMutexQuery +0801457c t OSMutex_RdyAtPrio +08014704 T OSQAccept +08014818 T OSQCreate +080149bc T OSQDel +08014c10 T OSQFlush +08014c9c T OSQPend +08014efc T OSQPendAbort +0801503c T OSQPost +08015194 T OSQPostFront +080152f4 T OSQPostOpt +080154f0 T OSQQuery +0801562c T OS_QInit +080156d4 T OSSemAccept +08015774 T OSSemCreate +0801584c T OSSemDel +08015a60 T OSSemPend +08015c44 T OSSemPendAbort +08015d84 T OSSemPost +08015e84 T OSSemQuery +08015f74 T OSSemSet +0801604c T OSTaskChangePrio +080164cc T OSTaskCreate +0801664c T OSTaskCreateExt +080167f0 T OSTaskDel +08016b04 T OSTaskDelReq +08016c2c T OSTaskNameGet +08016d64 T OSTaskNameSet +08016ec0 T OSTaskResume +08017078 T OSTaskSuspend +08017220 T OSTaskQuery +0801730c T OSTimeDly +08017410 T OSTimeDlyHMSM +0801750c T OSTimeDlyResume +080176d8 T OSTimeGet +08017734 T OSTimeSet +08017794 t alt_dev_reg +080177c8 T alt_irq_init +08017800 T alt_sys_init +08017a2c t alt_avalon_timer_sc_irq +08017aa4 T alt_avalon_timer_sc_init +08017b20 T no_printf +08017b50 T tse_mac_initTransInfo2 +08017bb0 T tse_mac_sTxWrite +08017c78 T tse_mac_aRxRead +08017ce8 T tse_mac_aTxWrite +08017d58 T tse_mac_SwReset +08017de0 T tse_mac_setMIImode +08017e34 T tse_mac_setGMIImode +08017e84 T alt_tse_phy_add_profile +08018038 T alt_tse_system_add_sys +080188fc T alt_tse_sys_enable_mdio_sharing +08018a40 T alt_tse_mac_get_common_speed +08018a80 T alt_tse_mac_set_common_speed +08018ac8 T alt_tse_get_system_index +08018b34 T alt_tse_get_mac_group_index +08018ba0 T alt_tse_get_mac_info_index +08018c1c T alt_tse_get_mac_info +08018ce8 T alt_tse_mac_set_speed +08018dc8 T alt_tse_mac_set_duplex +08018e54 T getPHYSpeed +080198cc T alt_tse_phy_rd_mdio_addr +08019914 T alt_tse_phy_wr_mdio_addr +0801996c T alt_tse_phy_wr_mdio_reg +08019a98 T alt_tse_phy_rd_mdio_reg +08019b68 T alt_tse_phy_add_profile_default +08019e30 T alt_tse_phy_print_profile +0801a000 T alt_tse_mac_group_init +0801a698 T alt_tse_mac_get_phy +0801aaa4 T alt_tse_mac_associate_phy +0801ace4 T alt_tse_phy_cfg_pcs +0801ae0c T alt_tse_phy_init +0801af18 T alt_tse_phy_restart_an +0801b0dc T alt_tse_phy_check_link +0801b264 T alt_tse_phy_get_cap +0801b7f0 T alt_tse_phy_set_adv_1000 +0801b9b4 T alt_tse_phy_set_adv_100 +0801bc08 T alt_tse_phy_set_adv_10 +0801bdb0 T alt_tse_phy_get_common_speed +0801c0cc T alt_tse_phy_set_common_speed +0801c57c T marvell_phy_cfg +0801c614 T marvell_cfg_gmii +0801c6f8 T marvell_cfg_sgmii +0801c7dc T marvell_cfg_rgmii +0801c8cc T DP83848C_link_status_read +0801c944 T PEF7071_config +0801c9a0 T PEF7071_link_status_read +0801ca40 T altera_avalon_uart_read_fd +0801caa0 T altera_avalon_uart_write_fd +0801cb00 T altera_avalon_uart_close_fd +0801cb50 T altera_avalon_uart_init +0801ccb0 t altera_avalon_uart_irq +0801cd4c t altera_avalon_uart_rxirq +0801ce80 t altera_avalon_uart_txirq +0801d020 T altera_avalon_uart_close +0801d074 t alt_get_errno +0801d0b0 T altera_avalon_uart_read +0801d318 t alt_get_errno +0801d354 T altera_avalon_uart_write +0801d588 t alt_flash_device_register +0801d5bc T alt_qspi_controller_lock +0801d6cc T alt_qspi_controller_get_info +0801d758 T alt_qspi_controller_erase_block +0801d87c T alt_qspi_controller_write_block +0801da8c T alt_qspi_controller_write +0801dc74 T alt_qspi_controller_read +0801dd20 T altera_qspi_controller_init +0801df74 t alt_qspi_validate_read_write_arguments +0801e010 t alt_qspi_poll_for_write_in_progress +0801e09c t alt_get_errno +0801e0d8 t alt_msgdma_write_standard_descriptor +0801e16c t alt_msgdma_write_extended_descriptor +0801e298 t alt_msgdma_irq +0801e41c t alt_msgdma_construct_standard_descriptor +0801e4a8 t alt_msgdma_construct_extended_descriptor +0801e5fc t alt_msgdma_descriptor_async_transfer +0801e938 t alt_msgdma_descriptor_sync_transfer +0801ed40 T alt_msgdma_construct_standard_st_to_mm_descriptor +0801ed98 T alt_msgdma_construct_standard_mm_to_st_descriptor +0801edf0 T alt_msgdma_construct_standard_mm_to_mm_descriptor +0801ee48 T alt_msgdma_construct_extended_st_to_mm_descriptor +0801eed8 T alt_msgdma_construct_extended_mm_to_st_descriptor +0801ef68 T alt_msgdma_construct_extended_mm_to_mm_descriptor +0801f010 t alt_msgdma_construct_prefetcher_standard_descriptor +0801f0b4 t alt_msgdma_construct_prefetcher_extended_descriptor +0801f248 T alt_msgdma_construct_prefetcher_standard_mm_to_mm_descriptor +0801f2a0 T alt_msgdma_construct_prefetcher_standard_st_to_mm_descriptor +0801f2f8 T alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor +0801f350 T alt_msgdma_construct_prefetcher_extended_st_to_mm_descriptor +0801f3f0 T alt_msgdma_construct_prefetcher_extended_mm_to_st_descriptor +0801f488 T alt_msgdma_construct_prefetcher_extended_mm_to_mm_descriptor +0801f540 T alt_msgdma_prefetcher_add_standard_desc_to_list +0801f630 T alt_msgdma_prefetcher_add_extended_desc_to_list +0801f7c8 T alt_msgdma_prefetcher_set_std_list_own_by_hw_bits +0801f8d8 T alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits +0801fa24 T alt_msgdma_start_prefetcher_with_list_addr +0801fd34 T alt_msgdma_start_prefetcher_with_std_desc_list +0801fde4 T alt_msgdma_start_prefetcher_with_extd_desc_list +0801fe94 T alt_msgdma_open +0801feec T alt_msgdma_init +08020094 T alt_msgdma_register_callback +080200e8 T alt_msgdma_standard_descriptor_async_transfer +08020124 T alt_msgdma_extended_descriptor_async_transfer +08020160 T alt_msgdma_standard_descriptor_sync_transfer +0802019c T alt_msgdma_extended_descriptor_sync_transfer +080201d8 t alt_flash_device_register +0802020c T alt_onchip_flash_read +080202d8 T alt_onchip_flash_get_info +08020374 T alt_onchip_flash_erase_block +080204dc T alt_onchip_flash_write_block +080207b4 T alt_onchip_flash_write +08020a80 T altera_onchip_flash_init +08020f20 T alt_onchip_flash_poll_for_status_to_go_idle +08020fb0 T alt_onchip_flash_poll_for_status_erase_passed +08021044 T alt_onchip_flash_poll_for_status_write_passed +080210d8 T altera_eth_tse_init +08021220 T prep_tse_mac +0802144c T msgdma_reset +080214c4 T tse_mac_init +08021f28 T tse_msgdma_write_init +08022048 T tse_mac_raw_send +08022210 T tse_msgdmaRx_isr +080223a8 T tse_msgdmaTx_isr +08022408 T tse_msgdma_read_init +080226c0 T allocate_rx_descriptor_chain +080227f8 T tse_mac_rcv +08022944 T tse_mac_stats +08022984 T tse_mac_close +08022a60 T close +08022aa8 T iniche_devices_init +08022bcc T read +08022c3c T write +08022ca4 T etainit +08022cec T et_send +08022e6c T arp_free_pending +08022ef4 T arp_send_pending +08022f68 T send_arp +080233bc T find_oldest_arp +08023528 T make_arp_entry +08023624 T arpReply +080238e4 T arprcv +08023b48 T send_via_arp +08023cc4 T cb_arpent_tmo +08023dd0 T grat_arp +08024088 T if_getbynum +080240f4 T isbcast +080241c8 T reg_type +08024254 T if_killsocks +080242e4 T Netinit +080247b4 T fixup_subnet_mask +080248e4 T netclose +080249c4 T pktdemux +08024d64 T c_older +08024df4 T ip2mac +08024f80 T ip_startup +080251e4 T exit_hook +0802524c T ip_exit +080252fc T if_netnumber +0802537c T igmp_init +0802541c T igmp_input +080254ec T igmp_fasttimo +0802565c T igmp_send +080258d8 T igmp_joingroup +08025b04 T igmp_leavegroup +08025b84 T igmp_validate +08025e60 T igmp_print_stats +08026214 T bsd_accept +08026334 T bsd_getpeername +08026454 T bsd_getsockname +08026574 T bsd_i_sockoptlen +08026704 T bsd_getsockopt +0802680c T bsd_ioctl +080268fc T bsd_inet_ntoa +08026930 T bsd_recvfrom +08026a74 T bsd_select +08026bfc T bsd_setsockopt +08026cd8 T ccksum +08026d7c T cksum +08026dd0 T do_trap +08026dfc T nextarg +08026e78 T hexdump +08026fbc T print_ipad +08027038 T print_uptime +08027178 T panic +080271c0 T print_eth +08027314 T uslash +08027390 T ns_printf +08027500 T std_out +08027544 T con_page +0802761c T parse_args +08027814 T netmain +080278f4 T tk_netmain +0802796c T tk_nettick +080279b0 T TK_OSTimeDly +080279e0 T TK_OSTaskResume +08027a54 T tcp_sleep +08027ba0 T tcp_wakeup +08027c78 T TK_OSTaskQuery +08027ce4 T tk_yield +08027d14 T tk_stats +08027f0c T icmpEcho +080281a8 T pk_init +08028434 T pk_alloc +080284f4 T pk_validate +08028748 T pk_free +080287f4 T pk_get_max_intrsafe_buf_len +08028814 T dump_buf_estats +080288d8 T getq +08028990 T putq +08028a40 T qdel +08028b40 T asm_cksum +08028b60 t asm1 +08028b88 t loop +08028c8c t loop0 +08028ca8 t fold +08028cd0 t done +08028cd4 T dtrap +08028d08 T kbhit +08028d90 T getch +08028de0 T clock_init +08028e18 T clock_c +08028e38 T cticks_hook +08028e94 T irq_Mask +08028ef4 T irq_Unmask +08028f38 T LOCK_NET_RESOURCE +08028ff4 T UNLOCK_NET_RESOURCE +08029074 T TK_NEWTASK +080292b4 T wait_app_sem +08029368 T post_app_sem +080293dc T alt_iniche_init +0802959c T pre_task_setup +080295e8 T post_task_setup +08029608 T prep_armintcp +08029640 T npalloc_base +0802974c T npfree_base +0802982c T npalloc +08029860 T npfree +080298a0 T ncpalloc +080298d4 T ncpfree +08029914 T pffindtype +080299a4 T pffindproto +08029a70 T m_getnbuf +08029bf8 T m_free +08029cfc T m_freem +08029d40 T m_copy +0802a018 T m_adj +0802a1d8 T mbuf_len +0802a22c T dtom +0802a2c4 T remque +0802a334 T insque +0802a3b0 T nptcp_init +0802a4a4 T tcp_rcv +0802a658 T ip_output +0802abe0 T in_broadcast +0802ac18 T np_stripoptions +0802ad08 T so_icmpdu +0802b050 T tcp_tick +0802b0c8 T rawip_lookup +0802b124 T rawip_soinput +0802b2e8 T rawip_usrreq +0802ba20 T DOMAIN_CHECK +0802ba70 T t_socket +0802baf0 T t_bind +0802bc50 T t_listen +0802bd24 T t_accept +0802bf74 T t_connect +0802c1e4 T t_getpeername +0802c228 T t_getsockname +0802c26c t t_getname +0802c44c T t_setsockopt +0802c60c T t_getsockopt +0802c794 T t_recv +0802c870 T t_recvfrom +0802c9ac T t_sendto +0802cb9c T t_send +0802cd9c T t_shutdown +0802ce70 T t_socketclose +0802cf30 t sockargs +0802cfbc T t_errno +0802d050 T socreate +0802d1f8 T sobind +0802d254 T solisten +0802d324 T sofree +0802d434 T soclose +0802d6fc T soabort +0802d74c T soaccept +0802d7e4 T soconnect +0802d89c T sodisconnect +0802d934 T sosend +0802de94 T soreceive +0802e5ec T soshutdown +0802e684 T sorflush +0802e780 T sosetopt +0802ec0c T sogetopt +0802f12c T sohasoutofband +0802f178 T soisconnecting +0802f1e8 T soisconnected +0802f2ec T soisdisconnecting +0802f384 T soisdisconnected +0802f448 T sonewconn +0802f640 T soqinsque +0802f6ec T soqremque +0802f7f4 T socantsendmore +0802f84c T socantrcvmore +0802f8a4 T sbselqueue +0802f8e0 T sbwait +0802f94c T sbwakeup +0802f9d8 T soreserve +0802fa60 T sbreserve +0802fab0 T sbrelease +0802fafc T sbappend +0802fb9c T sbappendrecord +0802fc74 T sbappendaddr +0802fe50 T sbcompress +0803002c T sbflush +080300b0 T sbdrop +08030268 T sbdropend +08030368 T sbdroprecord +080303f8 T t_select +080305c8 T sock_selscan +08030708 T sock_select +080308f0 T in_pcbnotify +080309b4 T tcp_notify +08030a34 T ifd_clr +08030b18 T ifd_set +08030b8c T ifd_isset +08030c00 T ifd_get +08030c60 T tcp_reass +08031050 T tcp_input +08033264 T tcp_dooptions +080333ec T tcp_pulloutofband +08033518 T tcp_xmit_timer +08033754 T ip4_tcpmss +0803379c T tcp_mss +08033894 T tcp_output +08034830 T tcp_setpersist +0803492c t bld_options +080349f8 T tcp_init +08034a40 T tcp_template +08034b48 T tcp_respond +08034f40 T tcp_newtcpcb +0803504c T tcp_drop +080350e8 T tcp_close +080351d0 T tcp_quench +0803521c T tcp_putseq +08035294 T tcp_getseq +08035308 T tcp_slowtimo +08035564 T tcp_canceltimers +080355c0 T tcp_timers +08035a14 T tcp_usrreq +080360cc T tcp_attach +080361e4 T tcp_disconnect +080362b0 T tcp_usrclosed +0803637c T tcpinit +080363bc T udp_lookup +08036418 T udp_soinput +080365b8 T udp_usrreq +080367f0 T udp4_sockbind +08036ac0 T udp4_socksend +08036e34 T udp4_sockaddr +08036f5c T alt_busy_sleep +080370b4 t alt_get_errno +080370f0 T alt_close +080371c0 T alt_dcache_flush +08037238 t alt_dev_null_write +08037264 t alt_get_errno +080372a0 T alt_dev_llist_insert +08037344 T _do_ctors +080373a4 T _do_dtors +08037404 T alt_find_dev +08037494 T alt_ic_isr_register +080374e4 T alt_ic_irq_enable +0803756c T alt_ic_irq_disable +080375f8 T alt_ic_irq_enabled +08037644 T alt_iic_isr_register +08037728 t alt_open_fd +080377d8 T alt_io_redirect +08037854 t alt_get_errno +08037890 t alt_file_locked +08037948 T open +08037a9c T alt_printf +08037cc8 T alt_putchar +08037cf8 t alt_get_errno +08037d34 T alt_read +08037e30 T alt_release_fd +08037e88 T alt_remap_cached +08037ebc T alt_alarm_stop +08037f58 T alt_tick +08038060 T alt_uncached_free +080380a4 T alt_uncached_malloc +0803811c T usleep +08038230 t alt_get_errno +0803826c T alt_write +08038364 T altera_nios2_gen2_irq_init +08038388 T OSCtxSw +08038388 T OSIntCtxSw +08038414 T OSStartHighRdy +08038434 T OSStartTsk +08038458 T OSTaskStkInit +080385a4 T OSTaskCreateHook +080385c8 T OSTaskDelHook +080385ec T OSTaskSwHook +0803860c T OSTaskStatHook +0803862c T OSTimeTickHook +08038658 T OSInitHookBegin +08038678 T OSInitHookEnd +08038698 T OSTaskIdleHook +080386b8 T OSTCBInitHook +080386dc T netmain_init +080387c4 T icmp_port_du +08038850 T station_state +080389b0 T sysuptime +080389e8 T packet_check +08038a38 T mcastlist +08038a5c T prep_modules +08038ab0 T inet_timer +08038b28 t check_interval_timers +08038c74 T in_timerset +08038da0 T in_timerkill +08038e38 T create_apptasks +08038e5c T task_stats +08038ed8 T fcntl +08038f78 T icmprcv +08039a54 T icmp_destun +08039d2c T icmp_timex +0803a01c T icmp_du +0803a070 T ip_init +0803a148 T ip_bldhead +0803a2d4 T ip_write_internal +0803a9e8 T ip_write +0803abf8 T ip_write2 +0803af6c T ip_raw_write +0803b028 T ip_mymach +0803b0cc T ip_dump +0803b370 T iproute +0803b53c T ip_copypkt +0803b668 T ip_rcv +0803b9bc T ip_rcv_phase2 +0803bf08 T ip_demux +0803c2ac T in_addmulti +0803c3f8 T in_delmulti +0803c504 T lookup_mcast +0803c568 T prep_ifaces +0803c5e8 T netexit +0803c610 T evtmap_setup +0803c63c T ip_raw_open +0803c714 T ip_raw_close +0803c7d0 T ip_raw_input +0803c9e4 T ip_raw_alloc +0803ca9c T ip_raw_free +0803cae0 T ip_raw_maxalloc +0803cb28 T rt_lookup +0803cc7c T add_route +0803d020 T del_route +0803d134 T udpdemux +0803d8a0 T udp_send +0803db34 T udpswap +0803dc28 T udp_socket +0803dcd8 T udp_alloc +0803dd94 T udp_maxalloc +0803ddb8 T udp_free +0803ddfc T igmpv1_input +0803e064 T igmpv2_input +0803e170 T igmpv2_process_report +0803e284 T igmpv2_process_query +0803e444 T igmpv2_chk_set_timer +0803e574 T igmpv2_chk4_rtr_alert_opt +0803e6b0 T IPADDR_TO_NETP +0803e7c4 T ip_setmoptions +0803ed64 T ip_getmoptions +0803ee74 T ip_freemoptions +0803eef8 T u_mctest_init +0803ef2c T u_mctest_run +0803f598 T init_memdev +0803f5e8 T md_fopen +0803f610 T md_fclose +0803f634 T md_fread +0803f78c T md_fwrite +0803f804 T md_fseek +0803f830 T md_ftell +0803f854 T md_fgetc +0803f918 T md_unlink +0803f93c T parse_ipad +0803fc38 T inet_addr +0803fc9c T hextoa +0803fce8 T inet_pton +0803fd7c T inet_ntop +0803fe00 T print46_addr +0803fe5c T inet46_addr +0803ff20 T inet_setport +0803ff8c T convert_ip +080400c0 T tcp_cksum +08040254 T udp_open +08040454 T udp_close +0804052c T in_pcballoc +080405b4 T in_pcbdetach +0804060c T in_pcbbind +0804081c T in_pcbconnect +080409fc T in_pcbdisconnect +08040a58 T in_setsockaddr +08040adc T in_setpeeraddr +08040b60 T in_pcblookup +08040db4 T set_vfopen_error +08040de0 T get_vfopen_error +08040e00 T vf_alloc_and_link_vop +08040e70 T vf_alloc_buffer +08040f38 T vf_free_buffer +08040f88 T vfopen_locked +080412c0 T vfopen +08041310 T vfclose_locked +080414cc T vfclose +08041510 T vfflush +08041558 T vfgets +08041628 T vfeof +08041678 T vunlink_flag_open_files +080416d4 T vunlink +080418d4 T vfread +08041a5c T vfwrite_locked +08041e08 T vfwrite +08041e68 T vfseek +08041fbc T vftell +080420c8 T vgetc_locked +080421c0 T vgetc +08042208 T vfslookup_locked +0804232c T vfslookup +08042374 T strippath +08042540 T isvfile_locked +08042598 T isvfile +080425e0 T vferror +0804263c T vclearerr +08042694 T prep_vfs +080426b8 t alt_get_errno +080426f4 T alt_fcntl +08042818 T alt_find_file +08042920 T alt_get_fd +080429f8 T alt_exception_cause_generated_bad_addr +08042a90 T atexit +08042aa4 T atoi +08042ab0 T _atoi_r +08042abc T exit +08042af0 T memalign +08042b04 T _memalign_r +08042c98 T malloc +08042ca8 T free +08042cb8 T memcmp +08042d44 T _sprintf_r +08042d98 T sprintf +08042dfc T strchr +08042f60 T strcpy +08042fec T strncmp +080430e8 t _strtol_l.isra.0 +0804330c T _strtol_r +08043310 T strtol_l +08043328 T strtol +08043340 T ___svfprintf_internal_r +08045458 T vprintf +08045474 T _vprintf_r +08045484 T _vsprintf_r +080454d0 T vsprintf +080454e8 T __register_exitproc +08045578 T __call_exitprocs +08045690 T __ssprint_r +08045850 T ___svfiprintf_internal_r +08046970 T _vfprintf_r +08046974 T _exit +080469a8 A __CTOR_END__ +080469a8 A __CTOR_LIST__ +080469a8 A __DTOR_END__ +080469a8 A __DTOR_LIST__ +080471d6 R _ctype_ +080472d7 R _ctype_b +0804749e r zeroes.5227 +080474ae r blanks.5226 +080474d0 r p05.4024 +080474dc R __mprec_tinytens +08047504 R __mprec_bigtens +0804752c R __mprec_tens +080475f4 r zeroes.5204 +08047604 r blanks.5203 +08047624 R __clz_tab +08047734 R OSUnMapTbl +0804b8d1 r zeroes.5208 +0804b8e1 r blanks.5207 +0804b8f1 r zeroes.5188 +0804b901 r blanks.5187 +0804b920 G controltask +0804b938 G sslistenertask +0804b950 G tse_mac_device +0804ba80 g impure_data +0804bea4 G __malloc_av_ +0804c2ac G __global_locale +0804c420 g debug_uart +0804c4f0 g ext_flash +0804c5d0 g msgdma_rx +0804c640 g msgdma_tx +0804c6b0 g onchip_flash +0804c7b0 G nettasks +0804c7e0 G tcp_protosw +0804c7f8 G udp_protosw +0804c810 G rawip_protosw +0804c828 G tcp_outflags +0804c833 G tcp_backoff +0804c840 G alt_dev_null +0804c868 G alt_fd_list +0804c928 G icmpdu_types +0804c940 g dsts +0804c958 G rtp_priority +0804c964 G mdio +0804c988 G mdlist +0804ca38 G vfs_root_path +0804cab8 G _global_impure_ptr +0804cabc G _impure_ptr +0804cac0 G __malloc_sbrk_base +0804cac4 G __malloc_trim_threshold +0804cac8 G alt_flash_dev_list +0804cad0 g heap_end +0804cad4 g lockid +0804cad8 g lockid +0804cadc G eth_tse_name +0804cae0 G max_mac_system +0804cae4 G alt_msgdma_list +0804caec G altera_onchip_flash_list +0804caf4 G alt_iniche_dev_list +0804cafc G arp_ageout +0804cb00 G ipmcfail_str +0804cb04 g cksum_select +0804cb08 G num_net_tasks +0804cb0c G pingdata +0804cb10 G lilbufs +0804cb14 G lilbufsiz +0804cb18 G bigbufs +0804cb1c G bigbufsiz +0804cb20 G kb_last +0804cb24 G TCPTV_MSL +0804cb28 G socket_defaults +0804cb2a G tcprexmtthresh +0804cb2c G tcp_ttl +0804cb30 G tcp_keepidle +0804cb34 G tcp_keepintvl +0804cb38 G tcp_sendspace +0804cb3c G tcp_recvspace +0804cb40 G alt_fs_list +0804cb48 G alt_dev_list +0804cb50 G alt_max_fd +0804cb54 G alt_errno +0804cb58 G alt_priority_mask +0804cb5c G alt_alarm_list +0804cb64 G name +0804cb68 G prompt +0804cb6c G pingdelay +0804cb70 G deflength +0804cb74 g uid +0804cb78 G ipRoutes +0804cb7c g iCounter.5304 +0804cb80 G mdlist_size +0804cb84 G pton_error +0804cb88 G http_root_path +0804cb8c A __bss_start +0804cb8c A _edata +0804cb8c b bytes_received.5850 +0804cb90 b header.5849 +0804cb98 b bytes_received.5856 +0804cb9c B to_controltask +0804cba0 B last_flash_sector_offset +0804cba4 B last_flash_sector +0804cba8 b mutex +0804cbac B to_sslistenertask +0804cbae B mastermode +0804cbb0 B delays +0804cbb4 B __malloc_max_total_mem +0804cbb8 B __malloc_max_sbrked_mem +0804cbbc B __malloc_top_pad +0804cbc0 B errno +0804cbc4 B _PathLocale +0804cbc8 B alt_argc +0804cbcc B alt_argv +0804cbd0 B alt_envp +0804cbd4 b locks +0804cbd8 B alt_envsem +0804cbdc b locks +0804cbe0 B alt_heapsem +0804cbe4 B OSLockNesting +0804cbe5 B OSRunning +0804cbe8 B OSIdleCtr +0804cbec B OSPrioHighRdy +0804cbed B OSPrioCur +0804cbf0 B OSTCBList +0804cbf4 B OSCtxSwCtr +0804cbf8 B OSTCBFreeList +0804cbfc B OSTaskCtr +0804cc00 B OSMemFreeList +0804cc04 B OSTCBHighRdy +0804cc08 B OSQFreeList +0804cc0c B OSRdyGrp +0804cc0d B OSRdyTbl +0804cc10 B OSEventFreeList +0804cc14 B OSIntNesting +0804cc18 B OSTCBCur +0804cc1c B OSTime +0804cc20 B OSFlagFreeList +0804cc24 B phy_profile_count +0804cc25 B mac_group_count +0804cc26 b tse_system_count.5331 +0804cc27 b is_init.5413 +0804cc28 B number_of_tse_mac +0804cc2c b arp_timer +0804cc30 B arpcache +0804cc34 b cachetime +0804cc38 B arpReqsIn +0804cc3c B arpReqsOut +0804cc40 B arpRepsIn +0804cc44 B arpRepsOut +0804cc48 B MaxLnh +0804cc4c B MaxMtu +0804cc50 B NDEBUG +0804cc54 B ifNumber +0804cc58 b nclosers +0804cc5c B igmp_timers_are_running +0804cc60 B igmp_cticks +0804cc64 B igmp_all_hosts_group +0804cc68 B igmp_all_rtrs_group +0804cc6c B netmain_wakes +0804cc70 B nettick_wakes +0804cc74 B iniche_net_ready +0804cc78 B to_netmain +0804cc79 B to_nettick +0804cc7c B tcp_sleep_timeout +0804cc80 B cticks_initialized +0804cc84 B irq_level +0804cc88 b cpu_statusreg +0804cc8c b kbd_init.4507 +0804cc90 B cticks_factor +0804cc94 B OS_TPS +0804cc98 B tcp_sleep_count +0804cc9c B tcp_wakeup_count +0804cca0 B netq_intmask +0804cca4 B old_mode +0804cca8 B global_TCPwakeup_setIndx +0804ccac B cticks +0804ccb0 B memtrapsize +0804ccb4 B mheap_sem_ptr +0804ccb8 B rcvdq_sem_ptr +0804ccbc B nextslow +0804ccc0 b in_tcptick +0804ccc4 B mbstat +0804cccc B select_wait +0804ccd0 B tcpprintfs +0804ccd4 B dropline +0804ccd8 B tcp_optionbuf +0804ccdc B tcp_maxidle +0804cce0 B tcp_iss +0804cce4 B alt_fd_list_lock +0804cce8 B alt_irq_active +0804ccec B _alt_tick_rate +0804ccf0 B _alt_nticks +0804ccf4 B activehost +0804ccf8 b inside_pktdemux +0804ccfc B nextppp +0804cd00 B port_1s_callout +0804cd04 b numtimers +0804cd08 B icmpdu_hook +0804cd0c B rt_mib +0804cd10 B port_prep +0804cd14 B net_system_exit +0804cd18 B so_evtmap_create +0804cd1c B so_evtmap_delete +0804cd20 B so_evtmap +0804cd24 B ipraw_eps +0804cd28 B cachedRoute +0804cd2c b usocket +0804cd30 B firstudp +0804cd34 B inpcb_cachehits +0804cd38 B inpcb_cachemiss +0804cd3c B vfsystems +0804cd40 B vfiles +0804cd44 B vfsfiles +0804cd48 B vfopen_error +0804cd4c B vfs_dir_stale +0804cd50 B vfs_open_files +0804cd54 B vfs_total_rw_space +0804cd58 B vfs_total_dyna_files +0804cd5c B alt_instruction_exception_handler +0804cd60 b packet_data.5855 +0804cd80 b connections +0804cd90 B __malloc_current_mallinfo +0804cdb8 b closers +0804cdf4 b tistring +0804ce0c b nearBuf.4931 +0804ce2c B InitialTaskStk +08054ab8 A _gp +0805ae2c B OSFlagTbl +0805b19c B OSMemTbl +0805bdcc B OSQTbl +0805bfac B OSTaskIdleStk +0805c7ac B OSEventTbl +0805d2ec B OSTCBTbl +0805d574 B OSTCBPrioTbl +0805d5c8 B eth_tse_if +0805d6a8 B pmac_groups +0805d6b8 B pphy_profiles +0805d6d8 B tse_iniche_dev_driver_data +0805d708 B tse +0805d998 B arp_table +0805da98 B netlist +0805daac B rcvdq +0805dac0 B netstatic +0805ddc0 B nets +0805ddd0 B igmpstats +0805de34 B eth_prt_buf +0805de46 B ipreturn +0805de58 B lilfreeq +0805de6c B memestats +0805de7c B pktlog +0805df6c B bigfreeq +0805df80 B global_tcb_ext +0805e07c B global_TCPwakeup_set +0805e16c B resid_semaphore +0805e1ac B app_semaphore +0805e1c4 B soq +0805e1d8 B tcpmib +0805e214 B mbufq +0805e228 B mfreeq +0805e23c B tcp_saveti +0805e264 B tcb +0805e290 B tcpstat +0805e370 B alt_irq +0805e470 B intimers +0805e4d4 B icmp_mib +0805e53c B ip_mib +0805e58c B udp_mib +0805e59c A __alt_heap_start +0805e59c A __alt_stack_base +0805e59c A __bss_end +0805e59c A _end +0805e59c A end +10000000 A __alt_data_end +10000000 A __alt_heap_limit +10000000 A __alt_stack_pointer +14000000 A __alt_mem_ext_flash_avl_mem +14000000 T __reset +18200000 A __alt_mem_onchip_flash_data +18400000 A __alt_mem_descriptor_memory +18403400 A __alt_mem_calibration_ram diff --git a/FPGA_nios/hit_pat/mem_init/meminit.qip b/FPGA_nios/hit_pat/mem_init/meminit.qip new file mode 100644 index 0000000..7589c13 --- /dev/null +++ b/FPGA_nios/hit_pat/mem_init/meminit.qip @@ -0,0 +1 @@ +set_global_assignment -name SEARCH_PATH $::quartus(qip_path) diff --git a/FPGA_nios/hit_pat/mem_init/meminit.spd b/FPGA_nios/hit_pat/mem_init/meminit.spd new file mode 100644 index 0000000..b546ac5 --- /dev/null +++ b/FPGA_nios/hit_pat/mem_init/meminit.spd @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/FPGA_nios/hit_pat/onchip_flash.flash b/FPGA_nios/hit_pat/onchip_flash.flash new file mode 100644 index 0000000..974c5a9 --- /dev/null +++ b/FPGA_nios/hit_pat/onchip_flash.flash @@ -0,0 +1,2 @@ +S00600002D454C3B +S70500000000FA \ No newline at end of file diff --git a/FPGA_nios/hit_pat/readme.txt b/FPGA_nios/hit_pat/readme.txt new file mode 100644 index 0000000..953ca77 --- /dev/null +++ b/FPGA_nios/hit_pat/readme.txt @@ -0,0 +1,101 @@ +Readme - Simple Socket Server Software Example + +DESCRIPTION: +A Simple Socket Server that controls development board LEDs. + +This software application may be targeted for TSE design having RGMII interface +media between Ethernet MAC and Ethernet Phy. + +RGMII (Reduced Gigabit Media Independent Interface) is intended to be an +alternative to GMII. The principle objective of RGMII is to reduce the number +of pins from 22 (GMII) down to 12 in a cost-effective manner. RGMII interface +require a 1.5 to 2ns delay (90 degree phase shift) on the transmitted clock +over the data bus. This timing requirement can be achieved through a PCB trace +delay, or optionally of introducing the delay on-chip at the physical layer +transceiver chip. This example software include a configuration file to enable +the on-chip delay method. + +Requirements: + -RTOS Type - MicroC/OS-II + -Software Component - NicheStack TCP/IP Stack - Nios II Edition + -Period System Timer - SYS_CLK_TIMER + +PERIPHERALS USED: +This example exercises the following peripherals: +- Ethernet MAC +- PIO, 8-bit output (named "led_pio" in SOPC Builder) +- PIO, 16-bit output (named "seven_seg_pio" in SOPC Builder) (optional) +- STDOUT device (UART or JTAG UART) + +SOFTWARE SOURCE FILES: +This example includes the following software source files: + +- iniche_init.c: Contains main() and SSSInitialTask() to initialize NicheStack +and then create the other tasks once network has been properly initialized. +Tasks which will use sockets, such as the SSSSimpleSocketServerTask() in this +example, must be created with TK_NEWTASK. All other tasks can be created by directly +calling the MicroC/OS-II API to create a task, i.e. OSTaskCreateExt(). + +- simple_socket_server.c: Implementation of a simple_socket_server including all necessary sockets +calls to handle a single socket connection & process received commands. + +- network_utilities.c: Contains MAC address and IP address routines to +manage addressing. These are used by NicheStack during initialization, but are +implementation-specific (you set your MAC address to whatever you want.. or read +it from your own special non-volatile memory. + +- network_utilities.h: Contains prototype for function get_board_mac_addr(). + +- led.c: Contains tasks to manage board LED commands and update LED displays. +LEDManagementTask interprets commands, and toggles the row of 8 LEDS or signals the +LED7SegLightshowTask in response to commands received from the host running telnet. +The LEDManagementTask reads data from a MicroC/OS-II SSSLEDCommandQ Queue which +receives its data from the SSSSimpleSocketServerTask. LED7SegLightshowTask controls the +7-segment display. + +- simple_socket_server.h: Definitions for the entire example application. + +- alt_error_handler.h: Definitions for 3 error handlers, one each for MicroC-OS/II, Network, +and Simple Socket Server Application. + +- alt_error_handler.c: Implementation for 3 error handlers, one each for MicroC-OS/II, +Network, and Simple Socket Server Application. + +- tse_my_system.c: Allow customization of tse_mac_device[] structure through global array initialization. +If using marvell phy, this can be set to RGMII mode in this file. Other Phys will operate in one mode or +the other depending on thier implementation in driver file altera_avalon_tse.c. + +BOARD/HOST REQUIREMENTS: +Must contain a supported phy, and use a quartus project that uses tse and msgdma. + +This example requires an Ethernet cable connected to the development board's +RJ-45 jack, and a JTAG connection with the development board. If the host +communication settings are changed from JTAG UART (default) to use a +conventional UART, a serial cable between board DB-9 connector and the host is +required. + +If DHCP is available (and enabled in the Software component configuration page, from +the BSP properties configuration), NicheStack TCP/IP Stack will attempt +to obtain an IP address from a DHCP server. Otherwise, a static IP address (defined in +Simple_Socket_Server.h) will be assigned after a DHCP timeout. + +ADDITIONAL INFORMATION: + +This is an example socket server using NicheStack TCP/IP Stack on MicroC/OS-II. The server +implements simple commands to control board LEDs through a separate MicroC/OS-II +task. It is in no way a complete implementation of a telnet server. + +A good introduction to sockets programming is the book "Unix Network Programming" by +Richard Stevens. Additionally, the text "Sockets in C", by Donahoo & Calvert, is a concise +& inexpensive text for getting started with sockets programming. + +This example will not run on the Instruction Set Simulator (ISS). + +Once the simple socket server example is running and has obtained an IP address (shown +in the terminal window of Nios II Software Build Tools for Eclipse), +you can connect to it over a network by typing the +following command in a command shell on a development host: + + telnet 30 + +This command will try to connect to the Simple Socket Server using port 30. diff --git a/FPGA_nios/hit_pat/src/control.c b/FPGA_nios/hit_pat/src/control.c new file mode 100644 index 0000000..4611a64 --- /dev/null +++ b/FPGA_nios/hit_pat/src/control.c @@ -0,0 +1,390 @@ +/* + * control.c + * + * Created on: Aug 14, 2017 + * Author: mdziewiecki + */ + + +#include +#include +#include + +/* MicroC/OS-II definitions */ +#include "includes.h" + +#include +#include + +/* Nichestack definitions */ +#include "ipport.h" +#include "tcpport.h" +#include "libport.h" +#include "osport.h" + +#include "socket_server.h" +#include "control.h" +#include "sensor.h" +#include "udpgen.h" +#include "utils.h" + +// **************************** + +extern NET nets[MAXNETS]; /* pointers to the static network structs */ + +// **************************** + +void control_delay() +{ + TK_SLEEP(1); +} + + +// **************************** + + //simple reply +void control_pong(command_header* header) +{ + command_header tmp; + tmp = *header; + swap_bytes((char*)(void*)(&tmp), sizeof(tmp)); + ethernet_write(0, sizeof(command_header), (unsigned char*)(header)); +} + +void control_process_snapshot() +{ + command_header header = {.marker = 0x5555, .command = COMMAND_SLOWCTRL_SNAPSHOT, + .length = 0}; //SLOWCTRL_ADC_CHANNEL_COUNT * sizeof(SLOWCTRL_ADC_DATA_TYPE) / sizeof(unsigned short)}; + swap_bytes((char*)(void*)(&header), sizeof(header)); + ethernet_write(0, sizeof(command_header), (unsigned char*)(&header)); + //ethernet_write(0, SLOWCTRL_ADC_CHANNEL_COUNT*sizeof(SLOWCTRL_ADC_DATA_TYPE), (unsigned char*)slowctrl_adc_buffer); +} + + //helper for the one below +int check_arp(struct arptabent * arp_entry, ip_addr ip) +{ + if (arp_entry->t_pro_addr != ip) + return 0; //bad IP + + for (int i = 0; i < 6; i++) + if (arp_entry->t_phy_addr[i] != 0) + return 1; //non-zero MAC + + return 0; +} + +void control_process_config_peer(unsigned short* data) +{ + ip_addr ip = 0; + ip_addr srcip = 0; + int i; + command_header header = {.marker = 0x5555, .command = COMMAND_DAQ_CONFIG_PEER, .length = 0}; + + for (i = 0; i < 4; i++) + ip = (ip << 8) | (unsigned char)(data[3-i] & 0x00FF); + + //daq_configure_peer_addr(ip, data[4]); + + printf("Querying ARP for %d.%d.%d.%d ...\n",data[0],data[1],data[2],data[3]); + + struct arptabent * arp_entry = find_oldest_arp(ip); + + int pingseq = 0; + while (!check_arp(arp_entry, ip)) //big loop for pinging 10 times + { + printf("ARP entry could not be found, pinging!\n"); + //ping the peer to ARP it. + icmpEcho(ip, NULL, 8, pingseq++); + + for (int i = 0; (i < 5) && (!check_arp(arp_entry, ip)); i++) //small loop for waiting 5 times after each ping + { + TK_SLEEP(10); + arp_entry = find_oldest_arp(ip); + } + + if (pingseq > 10) + { + printf("Could not resolve MAC! The result below is random!\n"); + break; + } + } + + 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], + arp_entry->t_phy_addr[3], arp_entry->t_phy_addr[4], arp_entry->t_phy_addr[5]); + + srcip = nets[0]->n_ipaddr; + swap_quad((unsigned char*)(void*)(&srcip), 4); //UDP generator needs such a format + swap_quad((unsigned char*)(void*)(&ip), 4); + + //set up udpgen with correct values + udpgen_set_size(UDP_GENERATOR_BASE, 167); //sensor_interface.v:39 + udpgen_set_srcip(UDP_GENERATOR_BASE, srcip); + udpgen_set_dstip(UDP_GENERATOR_BASE, ip); + udpgen_set_srcport(UDP_GENERATOR_BASE, DATA_PORT); + udpgen_set_dstport(UDP_GENERATOR_BASE, data[4]); + udpgen_set_dstmac_a(UDP_GENERATOR_BASE, arp_entry->t_phy_addr); + + swap_bytes((unsigned char*)(void*)(&header), sizeof(header)); + ethernet_write(0, sizeof(command_header), (unsigned char*)(&header)); +} + + + +// **************************** + + //Receive command header. Return (without loosing data!) if number of received bytes is insufficient. +unsigned char control_get_header(command_header** result) +{ + 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); + + if (bytes_received < sizeof(command_header)) + return 0; + + swap_bytes((unsigned char*)(void*)(&header),sizeof(header)); //if the header is complete, swap bytes and return it + *result = &header; + bytes_received = 0; + return 1; +} + + //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) +{ + 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); + + if (bytes_received < (2*expected_length)) + return 0; + + *data = packet_data; + bytes_received = 0; + return 1; +} + +// **************************** + +void control_step() +{ + command_header* header; + unsigned short* data; + unsigned int loop_ctr = 0; + + + //get header - at this moment this is blocking! + while (!control_get_header(&header)) + { + control_delay(); + + if (++loop_ctr > CONTROL_TIMEOUT) + { + return; + } + } + + //check start marker + if (header->marker != 0x5555) + return; + + + //get packet data - at this moment this is blocking! + while (!control_get_data(header->length, &data)) + { + control_delay(); + + if (++loop_ctr > CONTROL_TIMEOUT) + { + return; + } + } + //swap data bytes + swap_bytes((unsigned char*)(void*)data, header->length*2); + + switch(header->command) + { + case COMMAND_PING: + printf("COMMAND_PING\n"); + control_pong(header); + break; + case COMMAND_DEBUG_LED_OFF: + printf("COMMAND_DEBUG_LED_OFF\n"); + led_clear(0); + control_pong(header); + break; + case COMMAND_DEBUG_LED_ON: + printf("COMMAND_DEBUG_LED_ON\n"); + led_set(0); + control_pong(header); + break; + + case COMMAND_LEDS_DISABLE: + printf("COMMAND_LEDS_DISABLE\n"); + led4_blink_enable(0); + control_pong(header); + break; + case COMMAND_LEDS_ENABLE: + printf("COMMAND_LEDS_ENABLE\n"); + led4_blink_enable(1); + control_pong(header); + break; + + case COMMAND_TRIGGER_DISABLE: + printf("COMMAND_TRIGGER_DISABLE\n"); + master_clock_enable(0); + control_pong(header); + break; + case COMMAND_TRIGGER_ENABLE: + printf("COMMAND_TRIGGER_ENABLE\n"); + master_clock_enable(1); + control_pong(header); + break; + case COMMAND_TRIGGER_SET_SLAVE: + printf("COMMAND_TRIGGER_SET_SLAVE\n"); + masterslave(TRIGGER_SLAVE); + control_pong(header); + break; + case COMMAND_TRIGGER_SET_MASTER: + printf("COMMAND_TRIGGER_SET_MASTER\n"); + masterslave(TRIGGER_MASTER); + control_pong(header); + break; + case COMMAND_TRIGGER_SET_PERIOD: + printf("COMMAND_TRIGGER_SET_PERIOD: %d\n", data[0]); + master_clock_period((alt_u32)data[0]); //we set only 16 lsbs! + header->length = 0; + control_pong(header); + break; + case COMMAND_TRIGGER_SET_TINT: + printf("COMMAND_TRIGGER_SET_TINT: %d\n", data[0]); + sensor_set_shutter(SENSOR_INTERFACE_BASE, data[0]); + header->length = 0; + control_pong(header); + break; + case COMMAND_SET_GAIN: + printf("COMMAND_SET_GAIN: %d\n", data[0]); + sensor_set_gain(SENSOR_INTERFACE_BASE, data[0]); + header->length = 0; + control_pong(header); + break; + case COMMAND_TRIGGER_SET_MASTER_DELAY: + printf("COMMAND_TRIGGER_SET_MASTER_DELAY: %d\n", data[0]); + set_delay(TRIGGER_MASTER, data[0]); + header->length = 0; + control_pong(header); + break; + case COMMAND_TRIGGER_SET_SLAVE_DELAY: + printf("COMMAND_TRIGGER_SET_SLAVE_DELAY: %d\n", data[0]); + set_delay(TRIGGER_SLAVE, data[0]); + header->length = 0; + control_pong(header); + break; + + case COMMAND_DAQ_DISABLE: + printf("COMMAND_DAQ_DISABLE\n"); + sensor_set_enable(SENSOR_INTERFACE_BASE, 0); + udpgen_command_bit(UDP_GENERATOR_BASE, UDPGEN_CSR_EN_BITMASK,0); + control_pong(header); + break; + case COMMAND_DAQ_ENABLE: + printf("COMMAND_DAQ_ENABLE\n"); + udpgen_command_bit(UDP_GENERATOR_BASE, UDPGEN_CSR_EN_BITMASK,1); + sensor_set_enable(SENSOR_INTERFACE_BASE, 1); + control_pong(header); + break; + case COMMAND_DAQ_RESET_COUNTERS: + printf("COMMAND_DAQ_RESET_COUNTERS\n"); + sensor_reset(SENSOR_INTERFACE_BASE); + control_pong(header); + break; + case COMMAND_DAQ_FLUSH_DATA: + printf("COMMAND_DAQ_FLUSH_DATA\n"); + //nothing + control_pong(header); + break; + case COMMAND_DAQ_CONFIG_PEER: + printf("COMMAND_DAQ_CONFIG_PEER\n"); + control_process_config_peer(data); + break; + + case COMMAND_SLOWCTRL_SNAPSHOT: + printf("COMMAND_SLOWCTRL_SNAPSHOT\n"); + control_process_snapshot(); + break; + + case COMMAND_SET_CLUSTER_THRESHOLD: + printf("COMMAND_SET_CLUSTER_THRESHOLD: %d\n", data[0]); + sensor_set_cluster_threshold(SENSOR_INTERFACE_BASE,data[0]); + header->length = 0; + control_pong(header); + break; + + case COMMAND_SET_CLUSTER_SIZE: + printf("COMMAND_SET_CLUSTER_SIZE: %d\n", data[0]); + sensor_set_cluster_size(SENSOR_INTERFACE_BASE,data[0]); + header->length = 0; + control_pong(header); + break; + + case COMMAND_SET_CALIBRATION_FACTOR: //data[i] is 16 bit unsigned short; calibration factor is 16 bit + if (header->length>=2){ + calibration_ram_set_factor(CALIBRATION_RAM_BASE,data[0],data[1]); //i is channelID + printf("COMMAND_SET_CALIBRATION_FACTOR ChannelIP%d : %d\n", data[0],data[1]); + }else{ + printf("COMMAND_SET_CALIBRATION_FACTOR length: %d\n", header->length); + } + header->length = 0; + control_pong(header); + break; + + + default: + break; + } + +} + +// ******************** The task ***************** + +TK_OBJECT(to_controltask); +TK_ENTRY(ControlTask); + +struct inet_taskinfo controltask = +{ + &to_controltask, + "Control thread", + ControlTask, + CONTROL_TASK_PRIORITY, + CONTROL_STACK_SIZE, +}; + + +void ControlTask(void* param) +{ + printf ("::: Control task started ::: \n"); + ethernet_listen(0, CONTROL_PORT); + + sensor_preconfigure(SENSOR_INTERFACE_BASE); + + //initial calibration factor here + printf("Initiate Calibration Factor 1 to 320 from channel1 to channel320 \n"); + + + for (alt_u32 i = 0; i < 320; i++) { + //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 + } + + while(1) + control_step(); +} + +void control_init() +{ + TK_NEWTASK(&controltask); +} diff --git a/FPGA_nios/hit_pat/src/main.c b/FPGA_nios/hit_pat/src/main.c new file mode 100644 index 0000000..e41efc4 --- /dev/null +++ b/FPGA_nios/hit_pat/src/main.c @@ -0,0 +1,161 @@ +/****************************************************************************** +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. All use of this software and documentation is * +* subject to the License Agreement located at the end of this file below. * +******************************************************************************* * +* Date - October 24, 2006 * +* Module - iniche_init.c * +* * * +******************************************************************************/ + +/****************************************************************************** + * NicheStack TCP/IP stack initialization and Operating System Start in main() + * for Simple Socket Server (SSS) example. + * + * This example demonstrates the use of MicroC/OS-II running on NIOS II. + * In addition it is to serve as a good starting point for designs using + * MicroC/OS-II and Altera NicheStack TCP/IP Stack - NIOS II Edition. + * + * Please refer to the Altera NicheStack Tutorial documentation for details on + * this software example, as well as details on how to configure the NicheStack + * TCP/IP networking stack and MicroC/OS-II Real-Time Operating System. + */ + + +#include + +/* MicroC/OS-II definitions */ +#include "includes.h" + +/* Simple Socket Server definitions */ +#include "socket_server.h" +#include "control.h" +//#include "alt_error_handler.h" + + +/* Nichestack definitions */ +#include "ipport.h" +#include "libport.h" +#include "osport.h" + +#define SS_INITIAL_TASK_PRIORITY 5 +/* Definition of task stack for the initial task which will initialize the NicheStack + * TCP/IP Stack and then initialize the rest of the Simple Socket Server example tasks. + */ +OS_STK InitialTaskStk[APP_STACK_SIZE]; + +/* 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) +{ + INT8U error_code; + + /* + * Initialize Altera NicheStack TCP/IP Stack - Nios II Edition specific code. + * NicheStack is initialized from a task, so that RTOS will have started, and + * I/O drivers are available. Two tasks are created: + * "Inet main" task with priority 2 + * "clock tick" task with priority 3 + */ + + alt_iniche_init(); + 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){ + TK_SLEEP(1); + } + + /* Now that the stack is running, perform the application initialization steps */ + + /* Application Specific Task Launching Code Block Begin */ + + printf("\nSocket Server starting up\n"); + + /* Create tasks */ + ethernet_init(); + 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); + //alt_uCOSIIErrorHandler(error_code, 0); + + while (1); /* Correct Program Flow should never get here */ +} + +/* Main creates a single task, SSSInitialTask, and starts task scheduler. + */ + +int main (int argc, char* argv[], char* envp[]) +{ + + INT8U error_code; + + /* Clear the RTOS timer */ + OSTimeSet(0); + + /* 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, + NULL, + (void *)&InitialTaskStk[APP_STACK_SIZE], + SS_INITIAL_TASK_PRIORITY, + SS_INITIAL_TASK_PRIORITY, + InitialTaskStk, + APP_STACK_SIZE, + NULL, + 0); + //alt_uCOSIIErrorHandler(error_code, 0); + + /* + * 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(); + + + + while(1); /* Correct Program Flow never gets here. */ + + return -1; +} + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ diff --git a/FPGA_nios/hit_pat/src/network_utilities.c b/FPGA_nios/hit_pat/src/network_utilities.c new file mode 100644 index 0000000..1b54881 --- /dev/null +++ b/FPGA_nios/hit_pat/src/network_utilities.c @@ -0,0 +1,456 @@ +/****************************************************************************** +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. All use of this software and documentation is * +* subject to the License Agreement located at the end of this file below. * +****************************************************************************** +* Date - October 24, 2006 * +* Module - network_utilities.c * +* * +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "includes.h" +#include "io.h" +#include + +#include "ipport.h" +#include "tcpport.h" +#include "network_utilities.h" + +#include +#include + +#define IP4_ADDR(ipaddr, a,b,c,d) ipaddr = \ + htonl((((alt_u32)(a & 0xff) << 24) | ((alt_u32)(b & 0xff) << 16) | \ + ((alt_u32)(c & 0xff) << 8) | (alt_u32)(d & 0xff))) + +error_t generate_mac_addr(unsigned char mac_addr[6]); + +/* +* 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]) +{ + error_t error = 0; + + error = get_board_mac_addr(mac_addr); + + if(error) + { + /* Failed read MAC address from flash, prompt user to enter serial + number to generate MAC address. */ + error = generate_mac_addr(mac_addr); + } + return error; +} + +/* + * get_ip_addr() + * + * This routine is called by InterNiche to obtain an IP address for the + * specified network adapter. Like the MAC address, obtaining an IP address is + * very system-dependant and therefore this function is exported for the + * developer to control. + * + * In our system, we are either attempting DHCP auto-negotiation of IP address, + * or we are setting our own static IP, Gateway, and Subnet Mask addresses our + * self. This routine is where that happens. + */ +int get_ip_addr(alt_iniche_dev *p_dev, + ip_addr* ipaddr, + ip_addr* netmask, + ip_addr* gw, + int* use_dhcp) +{ + + alt_u32 sw_state = ~(IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE)); + + printf("Input state: 0x%08lx\n", sw_state); + + /*if (sw_state & 0x100) + { + *use_dhcp = 1; + IP4_ADDR(*ipaddr, 0, 0, 0, 0); + IP4_ADDR(*gw, 0, 0, 0, 0); + IP4_ADDR(*netmask, 0, 0, 0, 0); + printf("DHCP enabled.\n"); + } + else + {*/ + *use_dhcp = 0; + IP4_ADDR(*ipaddr, IPADDR0, IPADDR1, IPADDR2, IPADDR3+((sw_state>>4)&0x0F)); + IP4_ADDR(*gw, GWADDR0, GWADDR1, GWADDR2, GWADDR3); + IP4_ADDR(*netmask, MSKADDR0, MSKADDR1, MSKADDR2, MSKADDR3); + printf("DHCP disabled.\n"); + printf("Static IP Address is %d.%d.%d.%d\n", + ip4_addr1(*ipaddr), + ip4_addr2(*ipaddr), + ip4_addr3(*ipaddr), + ip4_addr4(*ipaddr)); + //} + + + /* Non-standard API: return 1 for success */ + return 1; +} + +int FindLastFlashSectorOffset( + alt_u32 *pLastFlashSectorOffset); + +alt_u32 last_flash_sector_offset; +alt_u32 last_flash_sector; + +/* +* get_serial_number +* +* Prompt user to enter 9-digit serial number. +* +*/ +alt_u32 get_serial_number (void) +{ + alt_u32 ser_num = 0; + char serial_number[9]; + int i = 0; + + while(!ser_num) + { + printf("Please enter your 9-digit serial number. This is printed on a \n"); + printf("label under your Nios dev. board. The first 3 digits of the \n"); + printf("label are ASJ and the serial number follows this.\n -->"); + + for(i=0; i<9; i++) + { + serial_number[i] = getchar(); + putchar(serial_number[i]); + + /* Handle backspaces. How civilized. */ + if ((serial_number[i] == 0x08) && (i >= 0)) + { + i--; + } + } + printf("\n"); + + for(i=0; i<9; i++) + { + if (isdigit(serial_number[i])) + { + ser_num *= 10; + ser_num += serial_number[i] - '0'; + } + else + { + ser_num = 0; + printf("Serial number only contains decimal digits and is non-zero\n"); + break; + } + } + } + + return ser_num; +} + +/* + * generate_and_store_mac_addr() + * + * This routine is called when, upon program initialization, we discover + * that there is no valid network settings (including MAC address) programmed + * into flash memory at the last flash sector. If it is not safe to use the + * contents of this last sector of flash, the user is prompted to + * enter the serial number at the console. A MAC address is then + * generated using 0xFF followed by the last 2 bytes of the serial number + * appended to Altera's Vendor ID, an assigned MAC address range with the first + * 3 bytes of 00:07:ED. For example, if the Nios Development Board serial + * number is 040800017, the corresponding ethernet number generated will be + * 00:07:ED:FF:8F:11. + * + * It should be noted that this number, while unique, will likely differ from + * the also unique (but now lost forever) MAC address programmed into the + * development board on the production line. + * + * As we are erasing the entire flash sector, we'll re-program it with not + * only the MAC address, but static IP, subnet, gateway, and "Use DHCP" + * 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() +{ + error_t error = -1; + alt_u32 ser_num = 0; + char flash_content[32]; + alt_flash_fd* flash_handle; + + printf("Can't read the MAC address from your board (this probably means\n"); + printf("that your flash was erased). We will assign you a MAC address and\n"); + printf("static network settings\n\n"); + + ser_num = get_serial_number(); + + if (ser_num) + { + /* This says the image is safe */ + flash_content[0] = 0xfe; + flash_content[1] = 0x5a; + flash_content[2] = 0x0; + flash_content[3] = 0x0; + + /* This is the Altera Vendor ID */ + flash_content[4] = 0x0; + flash_content[5] = 0x7; + flash_content[6] = 0xed; + + /* Reserverd Board identifier for erase boards */ + flash_content[7] = 0xFF; + flash_content[8] = (ser_num & 0xff00) >> 8; + flash_content[9] = ser_num & 0xff; + + /* Then comes a 16-bit "flags" field */ + flash_content[10] = 0xFF; + flash_content[11] = 0xFF; + + /* Then comes the static IP address */ + flash_content[12] = IPADDR0; + flash_content[13] = IPADDR1; + flash_content[14] = IPADDR2; + flash_content[15] = IPADDR3; + + /* Then comes the static nameserver address */ + flash_content[16] = 0xFF; + flash_content[17] = 0xFF; + flash_content[18] = 0xFF; + flash_content[19] = 0xFF; + + /* Then comes the static subnet mask */ + flash_content[20] = MSKADDR0; + flash_content[21] = MSKADDR1; + flash_content[22] = MSKADDR2; + flash_content[23] = MSKADDR3; + + /* Then comes the static gateway address */ + flash_content[24] = GWADDR0; + flash_content[25] = GWADDR1; + flash_content[26] = GWADDR2; + flash_content[27] = GWADDR3; + + /* And finally whether to use DHCP - set all bits to be safe */ + flash_content[28] = 0xFF; + flash_content[29] = 0xFF; + flash_content[30] = 0xFF; + flash_content[31] = 0xFF; + + /* Write the MAC address to flash */ + flash_handle = alt_flash_open_dev(EXT_FLASH_AVL_MEM_NAME); + if (flash_handle) + { + alt_write_flash(flash_handle, + last_flash_sector_offset, + flash_content, + 32); + alt_flash_close_dev(flash_handle); + error = 0; + } + } + + return error; +} + +/* + * generate_mac_addr() + * + * This routine is called when failed to read MAC address from flash (i.e: no + * flash on the board). The user is prompted to enter the serial number at the + * console. A MAC address is then generated using 0xFF followed by the last 2 + * bytes of the serial number appended to Altera's Vendor ID, an assigned MAC + * address range with the first 3 bytes of 00:07:ED. For example, if the Nios + * 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]) +{ + error_t error = -1; + alt_u32 ser_num = 0; + + printf("\nCan't read the MAC address from your board. We will assign you\n"); + printf("a MAC address.\n\n"); + + ser_num = get_serial_number(); + + if (ser_num) + { + /* This is the Altera Vendor ID */ + mac_addr[0] = 0x0; + mac_addr[1] = 0x7; + mac_addr[2] = 0xed; + + /* Reserverd Board identifier */ + mac_addr[3] = 0xFF; + mac_addr[4] = (ser_num & 0xff00) >> 8; + mac_addr[5] = ser_num & 0xff; + + printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n", + mac_addr[0], + mac_addr[1], + mac_addr[2], + mac_addr[3], + mac_addr[4], + mac_addr[5]); + + error = 0; + } + + return error; +} + +/* +* get_board_mac_addr +* +* Read the MAC address in a board specific way +* +*/ +error_t get_board_mac_addr(unsigned char mac_addr[6]) +{ + error_t error = 0; + alt_u32 signature; + + /* Get the flash sector with the MAC address. */ + error = FindLastFlashSectorOffset(&last_flash_sector_offset); + if (!error) + last_flash_sector = EXT_FLASH_AVL_MEM_BASE + last_flash_sector_offset; + + /* This last_flash_sector region of flash is examined to see if + * 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) + { + signature = IORD_32DIRECT(last_flash_sector, 0); + if (signature != 0x00005afe) + { + error = generate_and_store_mac_addr(); + } + } + + if (!error) + { + mac_addr[0] = IORD_8DIRECT(last_flash_sector, 4); + mac_addr[1] = IORD_8DIRECT(last_flash_sector, 5); + mac_addr[2] = IORD_8DIRECT(last_flash_sector, 6); + mac_addr[3] = IORD_8DIRECT(last_flash_sector, 7); + mac_addr[4] = IORD_8DIRECT(last_flash_sector, 8); + mac_addr[5] = IORD_8DIRECT(last_flash_sector, 9); + + printf("Your Ethernet MAC address is %02x:%02x:%02x:%02x:%02x:%02x\n", + mac_addr[0], + mac_addr[1], + mac_addr[2], + mac_addr[3], + mac_addr[4], + mac_addr[5]); + + } + + return error; +} + +/******************************************************************************* + * + * Flash service functions. + * + ******************************************************************************/ + +#include "sys/alt_flash.h" +#include "sys/alt_flash_dev.h" + +/* + * FindLastFlashSectorOffset + * + * <-- pLastFlashSectorOffset Offset of last sector in flash. + * + * This function finds the offset to the last sector in flash and returns it + * in pLastFlashSectorOffset. + */ + +int FindLastFlashSectorOffset( + alt_u32 *pLastFlashSectorOffset) +{ + alt_flash_fd *fd; + flash_region *regions; + int numRegions; + flash_region *pLastRegion; + int lastFlashSectorOffset; + int n; + int error = 0; + + /* Open the flash device. */ + fd = alt_flash_open_dev(EXT_FLASH_AVL_MEM_NAME); + if (fd <= 0) + error = -1; + + /* Get the flash info. */ + if (!error) + error = alt_get_flash_info(fd, ®ions, &numRegions); + + /* Find the last flash sector. */ + if (!error) + { + pLastRegion = &(regions[0]); + for (n = 1; n < numRegions; n++) + { + if (regions[n].offset > pLastRegion->offset) + pLastRegion = &(regions[n]); + } + lastFlashSectorOffset = pLastRegion->offset + + pLastRegion->region_size + - pLastRegion->block_size; + } + + /* Return results. */ + if (!error) + *pLastFlashSectorOffset = lastFlashSectorOffset; + + return (error); +} + + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ diff --git a/FPGA_nios/hit_pat/src/sensor.c b/FPGA_nios/hit_pat/src/sensor.c new file mode 100644 index 0000000..ca468d8 --- /dev/null +++ b/FPGA_nios/hit_pat/src/sensor.c @@ -0,0 +1,53 @@ +/* + * sensor.c + * + * Created on: Aug 19, 2019 + * Author: mdziewiecki + */ + +#include +#include "includes.h" +#include +#include +#include + +/* Nichestack definitions */ +#include "ipport.h" +#include "libport.h" +#include "osport.h" + +#include "utils.h" +#include "dev_commands.h" +#include "sensor.h" + + +void sensor_command_bit(alt_u32 base, alt_u8 bitmask, alt_u8 state) +{ + alt_u8 tmp = IORD_8DIRECT(base, SENSOR_REG_COMMAND); + if (state) + tmp |= bitmask; + else + tmp &= ~bitmask; + IOWR_8DIRECT(base, SENSOR_REG_COMMAND, tmp); +} + + +void sensor_preconfigure(alt_u32 base) +{ + printf(" *** Preconfiguring sensor module... \n"); + + sensor_command(base, 0); //disable + sensor_set_sensorclk(base, 6); //sensor clock - 3.57 MHz + sensor_set_adccnv(base, 31); //conversion delay - default + sensor_set_delay(base, 1); //trigger delay - default + sensor_set_shutter(base, 100); //integration time - dummy default + sensor_set_serspeed(base, 50); //synchro serial port - 1 Mbps + sensor_set_header_anydata(base, 0x00); //should be 0 + sensor_set_header_cmd(base, COMMAND_DATA_TRANSFER); //command header, must be this one + sensor_command(base, 1); //enable, gain low, SCLK full + + sensor_set_cluster_threshold(base, 10); //default cluster threshold 10 + sensor_set_cluster_size(base, 4); //default cluster size 4 + sensor_set_in_algo_threshold(base, 4); //default algo threshold 4 + +} diff --git a/FPGA_nios/hit_pat/src/socket_server.c b/FPGA_nios/hit_pat/src/socket_server.c new file mode 100644 index 0000000..ba4f205 --- /dev/null +++ b/FPGA_nios/hit_pat/src/socket_server.c @@ -0,0 +1,332 @@ +/****************************************************************************** +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. All use of this software and documentation is * +* subject to the License Agreement located at the end of this file below. * +******************************************************************************* +* Date - October 24, 2006 * +* Module - simple_socket_server.c * +* * +******************************************************************************/ + +/****************************************************************************** + * Simple Socket Server (SSS) example. + * + * This example demonstrates the use of MicroC/OS-II running on NIOS II. + * In addition it is to serve as a good starting point for designs using + * MicroC/OS-II and Altera NicheStack TCP/IP Stack - NIOS II Edition. + * + * -Known Issues + * None. + * + * Please refer to the Altera NicheStack Tutorial documentation for details on this + * software example, as well as details on how to configure the NicheStack TCP/IP + * networking stack and MicroC/OS-II Real-Time Operating System. + */ + +#include +#include +#include + +/* MicroC/OS-II definitions */ +#include "includes.h" + +/* Simple Socket Server definitions */ +#include "socket_server.h" +//#include "alt_error_handler.h" + +/* Nichestack definitions */ +#include "ipport.h" +#include "tcpport.h" +#include "libport.h" +#include "osport.h" + + +static OS_EVENT *mutex; + +static SSConn connections[NR_CHANNELS]; + +TK_OBJECT(to_sslistenertask); +TK_ENTRY(SSListenerTask); + +struct inet_taskinfo sslistenertask = +{ + &to_sslistenertask, + "socket server listener", + SSListenerTask, + SS_LISTENER_TASK_PRIORITY, + SS_LISTENER_STACK_SIZE, +}; + +// ******************************************************** + + + +void ss_reset_connection(SSConn* conn) //called e.g. after closing a socket +{ + conn->fd_conn = -1; + conn->state = LISTENING; + return; +} + +void ss_initialize_connection(SSConn* conn) //called only at initialization +{ + conn->fd_conn = -1; + conn->fd_listen = -1; + conn->listenport = -1; + conn->state = FREE; + return; +} + +void ss_handle_accept(SSConn* conn) +{ + int socket; + int len; + struct sockaddr_in incoming_addr; + + INT8U err; + OSMutexPend(mutex, 0, &err); + + len = sizeof(incoming_addr); + + //Close old connection if needed + if ((conn)->fd_conn != -1) + { + printf("[ss_handle_accept] closing old connection\n"); + close(conn->fd_conn); + ss_reset_connection(conn); + } + + if((socket=accept(conn->fd_listen,(struct sockaddr*)&incoming_addr,&len))<0) + { + //alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE, + // "[ss_handle_accept] accept failed"); + } + else + { + (conn)->fd_conn = socket; + (conn)->state = CONNECTED; + printf("[ss_handle_accept] accepted connection request from %s\n", + inet_ntoa(incoming_addr.sin_addr)); + } + + OSMutexPost(mutex); + return; +} + +/* + * Listener Task() + */ +void SSListenerTask(void* param) +{ + + int max_socket = 0; + BSD_TIMEVAL_T timeout; + + INT8U err; + OSMutexPend(mutex, 0, &err); //wrap initialization in a mutex - just in case... + + timeout.tv_sec = 0; + timeout.tv_usec = 100000; + + fd_set readfds; //set of descriptors + + for (int ch = 0; ch < NR_CHANNELS; ch++) + if ((connections[ch].fd_listen = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + //printf("Errot initializing socket #%d!\n", ch); + //alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE,"[sss_task] Socket creation failed"); + } + + //Binding etc. is done by ethernet_listen() + + OSMutexPost(mutex); + + //Now run in loop to handle incoming requests on all listening ports + while(1) + { + FD_ZERO(&readfds); + + for (int ch = 0; ch < NR_CHANNELS; ch++) + if (connections[ch].listenport >= 0) + { + FD_SET(connections[ch].fd_listen, &readfds); + if (connections[ch].fd_listen >= max_socket) + max_socket = connections[ch].fd_listen+1; + } + + if (max_socket == 0) + TK_SLEEP(10); //just sleep a bit if nothing to do + else + { + select(max_socket, &readfds, NULL, NULL, &timeout); //we must timeout from time to time to find newly set-up channels + + for (int ch = 0; ch < NR_CHANNELS; ch++) + if (FD_ISSET(connections[ch].fd_listen, &readfds)) + ss_handle_accept(&(connections[ch])); + } + } /* while(1) */ + + //never come here +} + + +// ****************** User interface ******************** + +int ethernet_init() +{ + INT8U err; + mutex = OSMutexCreate(SS_LISTENER_TASK_PRIORITY-1, &err); + + + for (int ch = 0; ch < NR_CHANNELS; ch++) + ss_initialize_connection(&(connections[ch])); + + TK_NEWTASK(&sslistenertask); + return 0; +} + +int ethernet_listen(int channel, int port) +{ + struct sockaddr_in addr; + + INT8U err; + OSMutexPend(mutex, 0, &err); + + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr.s_addr = INADDR_ANY; + + if (bind(connections[channel].fd_listen,(struct sockaddr *)&addr,sizeof(addr)) < 0) + { + //alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE,"[sss_task] Bind failed"); + OSMutexPost(mutex); + return -1; + } + + if (listen(connections[channel].fd_listen,1) < 0) + { + //alt_NetworkErrorHandler(EXPANDED_DIAGNOSIS_CODE,"[sss_task] Listen failed"); + OSMutexPost(mutex); + return -2; + } + + ss_reset_connection(&(connections[channel])); + connections[channel].listenport = port; + printf("[sss_task] Simple Socket Server listening on port %d\n", port); + + OSMutexPost(mutex); + return 0; +} + +int ethernet_write(int channel, int size, unsigned char* data) +{ + int result; + + INT8U err; + OSMutexPend(mutex, 0, &err); + + if (connections[channel].fd_conn == -1) //socket is closed or channel unconfigured + { + OSMutexPost(mutex); + return 0; + } + + result = (int)send(connections[channel].fd_conn, data, size, 0); + if (result == -1) + { + printf("[ethernet_write] closing connection due to error\n"); + close(connections[channel].fd_conn); //close connection on error + ss_reset_connection(&(connections[channel])); + result = 0; + } + + OSMutexPost(mutex); + return result; +} + +int ethernet_read(int channel, int size, unsigned char* data) +{ + fd_set readfds; //set of descriptors + int max_socket; + BSD_TIMEVAL_T timeout; + int result; + + INT8U err; + OSMutexPend(mutex, 0, &err); + + if (connections[channel].fd_conn == -1) //socket is closed or channel unconfigured + { + OSMutexPost(mutex); + return 0; + } + + //prepare call parameters + FD_ZERO(&readfds); + FD_SET(connections[channel].fd_conn, &readfds); + max_socket = connections[channel].fd_conn+1; + timeout.tv_sec = 0; + timeout.tv_usec = 0; + + //check for data + if (select(max_socket, &readfds, NULL, NULL, &timeout)) + if (FD_ISSET(connections[channel].fd_conn, &readfds)) + { + result = (int)recv(connections[channel].fd_conn, data, size, 0); + if (result == -1) + { + printf("[ethernet_read] closing connection due to error\n"); + close(connections[channel].fd_conn); //close connection on error + ss_reset_connection(&(connections[channel])); + result = 0; + } + OSMutexPost(mutex); + return result; + } + + OSMutexPost(mutex); + return 0; +} + +int ethernet_close(int channel) +{ + INT8U err; + OSMutexPend(mutex, 0, &err); + + close(connections[channel].fd_conn); + ss_reset_connection(&(connections[channel])); + + OSMutexPost(mutex); + return 0; +} + + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ diff --git a/FPGA_nios/hit_pat/src/tse_my_system.c b/FPGA_nios/hit_pat/src/tse_my_system.c new file mode 100644 index 0000000..a6cbb18 --- /dev/null +++ b/FPGA_nios/hit_pat/src/tse_my_system.c @@ -0,0 +1,12 @@ +#ifdef ALT_INICHE + #include "ipport.h" +#endif + +#include "system.h" +#include "altera_avalon_tse.h" +#include "altera_avalon_tse_system_info.h" + +alt_tse_system_info tse_mac_device[MAXNETS] = { + TSE_SYSTEM_EXT_MEM_NO_SHARED_FIFO(ETH_TSE, 0, MSGDMA_TX, MSGDMA_RX, TSE_PHY_AUTO_ADDRESS, &marvell_cfg_rgmii, DESCRIPTOR_MEMORY) + +}; diff --git a/FPGA_nios/hit_pat/src/udpgen.c b/FPGA_nios/hit_pat/src/udpgen.c new file mode 100644 index 0000000..0f2bf44 --- /dev/null +++ b/FPGA_nios/hit_pat/src/udpgen.c @@ -0,0 +1,51 @@ +/* + * udpgen.c + * + * Created on: Aug 7, 2019 + * Author: mdziewiecki + */ + +#include +#include "includes.h" +#include +#include +#include + +/* Nichestack definitions */ +#include "ipport.h" +#include "libport.h" +#include "osport.h" + +#include "utils.h" + +#include "udpgen.h" + +//******************************************************************* + + +void udpgen_command_bit(alt_u32 base, alt_u8 bitmask, alt_u8 state) +{ + alt_u8 tmp = IORD_8DIRECT(base, UDPGEN_REG_CSR); + if (state) + tmp |= bitmask; + else + tmp &= ~bitmask; + IOWR_8DIRECT(base, UDPGEN_REG_CSR, tmp); +} + +void udpgen_test(alt_u32 base) +{ + printf (" *** Setting up UDP generator... \n"); + + unsigned char dstmac[] = {0x18, 0xd6, 0xc7, 0x05, 0xaa, 0x63}; + unsigned char srcip[] = {10,0,7,17}; + unsigned char dstip[] = {10,0,7,1}; + + udpgen_command(UDP_GENERATOR_BASE, 0x01); + udpgen_set_size(UDP_GENERATOR_BASE, 16); + udpgen_set_srcip_a(UDP_GENERATOR_BASE, srcip); + udpgen_set_dstip_a(UDP_GENERATOR_BASE, dstip); + udpgen_set_srcport(UDP_GENERATOR_BASE, 4096); + udpgen_set_dstport(UDP_GENERATOR_BASE, 4097); + udpgen_set_dstmac_a(UDP_GENERATOR_BASE, dstmac); +} diff --git a/FPGA_nios/hit_pat/src/utils.c b/FPGA_nios/hit_pat/src/utils.c new file mode 100644 index 0000000..926a6cc --- /dev/null +++ b/FPGA_nios/hit_pat/src/utils.c @@ -0,0 +1,131 @@ +/* + * utils.c + * + * Created on: Jul 31, 2019 + * Author: mdziewiecki + */ + + +#include +#include "includes.h" +#include +#include + +/* Nichestack definitions */ +#include "ipport.h" +#include "libport.h" +#include "osport.h" + +#include "altera_avalon_pio_regs.h" +#include "altera_avalon_timer_regs.h" +#include "utils.h" + +#include "sensor.h" + +alt_u16 delays[2]; +alt_u8 mastermode; + +//****************************************************** + +//Swap odd/even bytes in a bunch of data to align endianness of shorts +void swap_bytes(unsigned char* array, int size_bytes) +{ + for (int i = 0; i < size_bytes; i+= 2) + { + unsigned char tmp = array[i]; + array[i] = array[i+1]; + array[i+1] = tmp; + } +} +//The same, but four-byte-wise +void swap_quad(unsigned char* array, int size_bytes) +{ + unsigned char buf[4]; + + for (int i = 0; i < size_bytes; i+= 4) + { + memcpy(buf, array+i, 4); + for (int j = 0; j < 4; j++) + array[i+j] = buf[3-j]; + } +} + + //trigger FPGA reload +void reload_fpga() +{ + printf("$$$$ RECONFIGURING FPGA!!! $$$$\n"); + //TK_SLEEP(100); //let it print the message before dying + //IOWR(DUAL_BOOT_BASE, 0, 0x1); + printf("*** DISABLED! ***\n"); +} + +void masterslave(alt_u8 master) +{ + if (master) + IOWR_ALTERA_AVALON_PIO_SET_BITS(OUTPUT_PIO_BASE, 0x80); + else + IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(OUTPUT_PIO_BASE, 0x80); + mastermode = master; + set_delay(mastermode, delays[mastermode]); //update sensor delay setting +} + +void master_clock_period(alt_u32 period) +{ + //set period + IOWR_ALTERA_AVALON_TIMER_PERIODL(FRAME_TIMER_BASE, (alt_u16)(period & 0xFFFF)); + IOWR_ALTERA_AVALON_TIMER_PERIODH(FRAME_TIMER_BASE, (alt_u16)((period>>16) & 0xFFFF)); + //start timer in continuous mode + //IOWR_ALTERA_AVALON_TIMER_CONTROL(FRAME_TIMER_BASE, + // ALTERA_AVALON_TIMER_CONTROL_CONT_MSK); +} + +void master_clock_enable(alt_u8 en) +{ + alt_u16 tmp = 0; // = IORD_ALTERA_AVALON_TIMER_CONTROL(FRAME_TIMER_BASE); + + if (en) + tmp |= ALTERA_AVALON_TIMER_CONTROL_START_MSK | ALTERA_AVALON_TIMER_CONTROL_CONT_MSK; + else + tmp |= ALTERA_AVALON_TIMER_CONTROL_STOP_MSK; + + IOWR_ALTERA_AVALON_TIMER_CONTROL(FRAME_TIMER_BASE,tmp); +} + +void led_set(alt_u8 led_nr) +{ + if (led_nr > 4) + return; + IOWR_ALTERA_AVALON_PIO_SET_BITS(OUTPUT_PIO_BASE, 1< 4) + return; + IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(OUTPUT_PIO_BASE, 1< 4) + return; + alt_u32 tmp = IORD_ALTERA_AVALON_PIO_DATA(OUTPUT_PIO_BASE); + tmp ^= (1< + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/alt_types.h b/FPGA_nios/hit_pat_bsp/HAL/inc/alt_types.h new file mode 100644 index 0000000..8eb438f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/alt_types.h @@ -0,0 +1,54 @@ +#ifndef __ALT_TYPES_H__ +#define __ALT_TYPES_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/* + * Don't declare these typedefs if this file is included by assembly source. + */ +#ifndef ALT_ASM_SRC +typedef signed char alt_8; +typedef unsigned char alt_u8; +typedef signed short alt_16; +typedef unsigned short alt_u16; +typedef signed long alt_32; +typedef unsigned long alt_u32; +typedef long long alt_64; +typedef unsigned long long alt_u64; +#endif + +#define ALT_INLINE __inline__ +#define ALT_ALWAYS_INLINE __attribute__ ((always_inline)) +#define ALT_WEAK __attribute__((weak)) + +#endif /* __ALT_TYPES_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/altera_nios2_gen2_irq.h b/FPGA_nios/hit_pat_bsp/HAL/inc/altera_nios2_gen2_irq.h new file mode 100644 index 0000000..048e02f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/altera_nios2_gen2_irq.h @@ -0,0 +1,80 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * Support for the Nios II internal interrupt controller. + */ + +#ifndef __ALT_NIOS2_GEN2_IRQ_H__ +#define __ALT_NIOS2_GEN2_IRQ_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * The macro ALTERA_NIOS2_GEN2_IRQ_INSTANCE is used by the alt_irq_init() + * function in the auto-generated file alt_sys_init.c to create an + * instance of this interrupt controller device driver state if this + * module contains an interrupt controller. + * Only one instance of a Nios II is allowed so this macro is just empty. + */ + +#define ALTERA_NIOS2_GEN2_IRQ_INSTANCE(name, state) + +/* + * altera_nios2_gen2_irq_init() is called by the auto-generated function + * alt_irq_init() once for the Nios II if it contains an interrupt controller. + * The altera_nios2_gen2_irq_init() routine is called using the + * ALTERA_NIOS2_GEN2_IRQ_INIT macro given below. + * + * This function initializes the internal interrupt controller + * so is not called if the Nios II contains an external interrupt + * controller port (because the internal interrupt controller + * is removed if this port is present). + */ + +extern void altera_nios2_gen2_irq_init( void ); + +/* + * The macro ALTERA_NIOS2_GEN2_IRQ_INIT is used by the alt_irq_init() routine + * in the auto-generated file alt_sys_init.c to initialize an instance + * of the interrupt controller device driver state. + */ + +#define ALTERA_NIOS2_GEN2_IRQ_INIT(name, state) altera_nios2_gen2_irq_init() + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_NIOS2_ULTRA_IRQ_H__ */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/includes.h b/FPGA_nios/hit_pat_bsp/HAL/inc/includes.h new file mode 100644 index 0000000..ac95016 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/includes.h @@ -0,0 +1,65 @@ +#ifndef __INCLUDES_H__ +#define __INCLUDES_H__ + +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* +* (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL +* All Rights Reserved +* +* MASTER INCLUDE FILE +********************************************************************************************************* +*/ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#include "os_cpu.h" +#include "os_cfg.h" +#include "ucos_ii.h" + +#ifdef ONT_GLOBALS +#define ONT_EXT +#else +#define ONT_EXT extern +#endif + +/* +********************************************************************************************************* +* DATA TYPES +********************************************************************************************************* +*/ + +typedef struct { + char TaskName[30]; + INT16U TaskCtr; + INT16U TaskExecTime; + INT32U TaskTotExecTime; +} TASK_USER_DATA; + +/* +********************************************************************************************************* +* VARIABLES +********************************************************************************************************* +*/ + +ONT_EXT TASK_USER_DATA TaskUserData[10]; + +/* +********************************************************************************************************* +* FUNCTION PROTOTYPES +********************************************************************************************************* +*/ + +void DispTaskStat(INT8U id); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __INCLUDES_H__ */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/io.h b/FPGA_nios/hit_pat_bsp/HAL/inc/io.h new file mode 100644 index 0000000..05efdd0 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/io.h @@ -0,0 +1,81 @@ +#ifndef __IO_H__ +#define __IO_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/* IO Header file for Nios II Toolchain */ + +#include "alt_types.h" +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#ifndef SYSTEM_BUS_WIDTH +#define SYSTEM_BUS_WIDTH 32 +#endif + +/* Dynamic bus access functions */ + +#define __IO_CALC_ADDRESS_DYNAMIC(BASE, OFFSET) \ + ((void *)(((alt_u8*)BASE) + (OFFSET))) + +#define IORD_32DIRECT(BASE, OFFSET) \ + __builtin_ldwio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) +#define IORD_16DIRECT(BASE, OFFSET) \ + __builtin_ldhuio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) +#define IORD_8DIRECT(BASE, OFFSET) \ + __builtin_ldbuio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET))) + +#define IOWR_32DIRECT(BASE, OFFSET, DATA) \ + __builtin_stwio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)), (DATA)) +#define IOWR_16DIRECT(BASE, OFFSET, DATA) \ + __builtin_sthio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)), (DATA)) +#define IOWR_8DIRECT(BASE, OFFSET, DATA) \ + __builtin_stbio (__IO_CALC_ADDRESS_DYNAMIC ((BASE), (OFFSET)), (DATA)) + +/* Native bus access functions */ + +#define __IO_CALC_ADDRESS_NATIVE(BASE, REGNUM) \ + ((void *)(((alt_u8*)BASE) + ((REGNUM) * (SYSTEM_BUS_WIDTH/8)))) + +#define IORD(BASE, REGNUM) \ + __builtin_ldwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM))) +#define IOWR(BASE, REGNUM, DATA) \ + __builtin_stwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)), (DATA)) + +#ifdef __cplusplus +} +#endif + +#endif /* __IO_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/nios2.h b/FPGA_nios/hit_pat_bsp/HAL/inc/nios2.h new file mode 100644 index 0000000..7d4a550 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/nios2.h @@ -0,0 +1,300 @@ +#ifndef __NIOS2_H__ +#define __NIOS2_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2008 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * This header provides processor specific macros for accessing the Nios2 + * control registers. + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * Number of available IRQs in internal interrupt controller. + */ +#define NIOS2_NIRQ 32 + +/* + * Macros for accessing select Nios II general-purpose registers. + */ + +/* ET (Exception Temporary) register */ +#define NIOS2_READ_ET(et) \ + do { __asm ("mov %0, et" : "=r" (et) ); } while (0) + +#define NIOS2_WRITE_ET(et) \ + do { __asm volatile ("mov et, %z0" : : "rM" (et)); } while (0) + +/* SP (Stack Pointer) register */ +#define NIOS2_READ_SP(sp) \ + do { __asm ("mov %0, sp" : "=r" (sp) ); } while (0) + +/* + * Macros for useful processor instructions. + */ +#define NIOS2_BREAK() \ + do { __asm volatile ("break"); } while (0) + +#define NIOS2_REPORT_STACK_OVERFLOW() \ + do { __asm volatile("break 3"); } while (0) + +/* + * Macros for accessing Nios II control registers. + */ +#define NIOS2_READ_STATUS(dest) \ + do { dest = __builtin_rdctl(0); } while (0) + +#define NIOS2_WRITE_STATUS(src) \ + do { __builtin_wrctl(0, src); } while (0) + +#define NIOS2_READ_ESTATUS(dest) \ + do { dest = __builtin_rdctl(1); } while (0) + +#define NIOS2_READ_BSTATUS(dest) \ + do { dest = __builtin_rdctl(2); } while (0) + +#define NIOS2_READ_IENABLE(dest) \ + do { dest = __builtin_rdctl(3); } while (0) + +#define NIOS2_WRITE_IENABLE(src) \ + do { __builtin_wrctl(3, src); } while (0) + +#define NIOS2_READ_IPENDING(dest) \ + do { dest = __builtin_rdctl(4); } while (0) + +#define NIOS2_READ_CPUID(dest) \ + do { dest = __builtin_rdctl(5); } while (0) + +#define NIOS2_READ_EXCEPTION(dest) \ + do { dest = __builtin_rdctl(7); } while (0) + +#define NIOS2_READ_PTEADDR(dest) \ + do { dest = __builtin_rdctl(8); } while (0) + +#define NIOS2_WRITE_PTEADDR(src) \ + do { __builtin_wrctl(8, src); } while (0) + +#define NIOS2_READ_TLBACC(dest) \ + do { dest = __builtin_rdctl(9); } while (0) + +#define NIOS2_WRITE_TLBACC(src) \ + do { __builtin_wrctl(9, src); } while (0) + +#define NIOS2_READ_TLBMISC(dest) \ + do { dest = __builtin_rdctl(10); } while (0) + +#define NIOS2_WRITE_TLBMISC(src) \ + do { __builtin_wrctl(10, src); } while (0) + +#define NIOS2_READ_ECCINJ(dest) \ + do { dest = __builtin_rdctl(11); } while (0) + +#define NIOS2_WRITE_ECCINJ(src) \ + do { __builtin_wrctl(11, src); } while (0) + +#define NIOS2_READ_BADADDR(dest) \ + do { dest = __builtin_rdctl(12); } while (0) + +#define NIOS2_WRITE_CONFIG(src) \ + do { __builtin_wrctl(13, src); } while (0) + +#define NIOS2_READ_CONFIG(dest) \ + do { dest = __builtin_rdctl(13); } while (0) + +#define NIOS2_WRITE_MPUBASE(src) \ + do { __builtin_wrctl(14, src); } while (0) + +#define NIOS2_READ_MPUBASE(dest) \ + do { dest = __builtin_rdctl(14); } while (0) + +#define NIOS2_WRITE_MPUACC(src) \ + do { __builtin_wrctl(15, src); } while (0) + +#define NIOS2_READ_MPUACC(dest) \ + do { dest = __builtin_rdctl(15); } while (0) + +/* + * Nios II control registers that are always present + */ +#define NIOS2_STATUS status +#define NIOS2_ESTATUS estatus +#define NIOS2_BSTATUS bstatus +#define NIOS2_IENABLE ienable +#define NIOS2_IPENDING ipending +#define NIOS2_CPUID cpuid + +/* + * Bit masks & offsets for Nios II control registers. + * The presence and size of a field is sometimes dependent on the Nios II + * configuration. Bit masks for every possible field and the maximum size of + * that field are defined. + * + * All bit-masks are expressed relative to the position + * of the data with a register. To read data that is LSB- + * aligned, the register read data should be masked, then + * right-shifted by the designated "OFST" macro value. The + * opposite should be used for register writes when starting + * with LSB-aligned data. + */ + +/* STATUS, ESTATUS, BSTATUS, and SSTATUS registers */ +#define NIOS2_STATUS_PIE_MSK (0x00000001) +#define NIOS2_STATUS_PIE_OFST (0) +#define NIOS2_STATUS_U_MSK (0x00000002) +#define NIOS2_STATUS_U_OFST (1) +#define NIOS2_STATUS_EH_MSK (0x00000004) +#define NIOS2_STATUS_EH_OFST (2) +#define NIOS2_STATUS_IH_MSK (0x00000008) +#define NIOS2_STATUS_IH_OFST (3) +#define NIOS2_STATUS_IL_MSK (0x000003f0) +#define NIOS2_STATUS_IL_OFST (4) +#define NIOS2_STATUS_CRS_MSK (0x0000fc00) +#define NIOS2_STATUS_CRS_OFST (10) +#define NIOS2_STATUS_PRS_MSK (0x003f0000) +#define NIOS2_STATUS_PRS_OFST (16) +#define NIOS2_STATUS_NMI_MSK (0x00400000) +#define NIOS2_STATUS_NMI_OFST (22) +#define NIOS2_STATUS_RSIE_MSK (0x00800000) +#define NIOS2_STATUS_RSIE_OFST (23) +#define NIOS2_STATUS_SRS_MSK (0x80000000) +#define NIOS2_STATUS_SRS_OFST (31) + +/* EXCEPTION register */ +#define NIOS2_EXCEPTION_REG_CAUSE_MASK (0x0000007c) +#define NIOS2_EXCEPTION_REG_CAUSE_OFST (2) +#define NIOS2_EXCEPTION_REG_ECCFTL_MASK (0x80000000) +#define NIOS2_EXCEPTION_REG_ECCFTL_OFST (31) + +/* PTEADDR (Page Table Entry Address) register */ +#define NIOS2_PTEADDR_REG_VPN_OFST 2 +#define NIOS2_PTEADDR_REG_VPN_MASK 0x3ffffc +#define NIOS2_PTEADDR_REG_PTBASE_OFST 22 +#define NIOS2_PTEADDR_REG_PTBASE_MASK 0xffc00000 + +/* TLBACC (TLB Access) register */ +#define NIOS2_TLBACC_REG_PFN_OFST 0 +#define NIOS2_TLBACC_REG_PFN_MASK 0xfffff +#define NIOS2_TLBACC_REG_G_OFST 20 +#define NIOS2_TLBACC_REG_G_MASK 0x100000 +#define NIOS2_TLBACC_REG_X_OFST 21 +#define NIOS2_TLBACC_REG_X_MASK 0x200000 +#define NIOS2_TLBACC_REG_W_OFST 22 +#define NIOS2_TLBACC_REG_W_MASK 0x400000 +#define NIOS2_TLBACC_REG_R_OFST 23 +#define NIOS2_TLBACC_REG_R_MASK 0x800000 +#define NIOS2_TLBACC_REG_C_OFST 24 +#define NIOS2_TLBACC_REG_C_MASK 0x1000000 +#define NIOS2_TLBACC_REG_IG_OFST 25 +#define NIOS2_TLBACC_REG_IG_MASK 0xfe000000 + +/* TLBMISC (TLB Miscellaneous) register */ +#define NIOS2_TLBMISC_REG_D_OFST 0 +#define NIOS2_TLBMISC_REG_D_MASK 0x1 +#define NIOS2_TLBMISC_REG_PERM_OFST 1 +#define NIOS2_TLBMISC_REG_PERM_MASK 0x2 +#define NIOS2_TLBMISC_REG_BAD_OFST 2 +#define NIOS2_TLBMISC_REG_BAD_MASK 0x4 +#define NIOS2_TLBMISC_REG_DBL_OFST 3 +#define NIOS2_TLBMISC_REG_DBL_MASK 0x8 +#define NIOS2_TLBMISC_REG_PID_OFST 4 +#define NIOS2_TLBMISC_REG_PID_MASK 0x3fff0 +#define NIOS2_TLBMISC_REG_WE_OFST 18 +#define NIOS2_TLBMISC_REG_WE_MASK 0x40000 +#define NIOS2_TLBMISC_REG_RD_OFST 19 +#define NIOS2_TLBMISC_REG_RD_MASK 0x80000 +#define NIOS2_TLBMISC_REG_WAY_OFST 20 +#define NIOS2_TLBMISC_REG_WAY_MASK 0xf00000 +#define NIOS2_TLBMISC_REG_EE_OFST 24 +#define NIOS2_TLBMISC_REG_EE_MASK 0x1000000 + +/* ECCINJ (ECC Inject) register */ +#define NIOS2_ECCINJ_REG_RF_OFST 0 +#define NIOS2_ECCINJ_REG_RF_MASK 0x3 +#define NIOS2_ECCINJ_REG_ICTAG_OFST 2 +#define NIOS2_ECCINJ_REG_ICTAG_MASK 0xc +#define NIOS2_ECCINJ_REG_ICDAT_OFST 4 +#define NIOS2_ECCINJ_REG_ICDAT_MASK 0x30 +#define NIOS2_ECCINJ_REG_DCTAG_OFST 6 +#define NIOS2_ECCINJ_REG_DCTAG_MASK 0xc0 +#define NIOS2_ECCINJ_REG_DCDAT_OFST 8 +#define NIOS2_ECCINJ_REG_DCDAT_MASK 0x300 +#define NIOS2_ECCINJ_REG_TLB_OFST 10 +#define NIOS2_ECCINJ_REG_TLB_MASK 0xc00 +#define NIOS2_ECCINJ_REG_DTCM0_OFST 12 +#define NIOS2_ECCINJ_REG_DTCM0_MASK 0x3000 +#define NIOS2_ECCINJ_REG_DTCM1_OFST 14 +#define NIOS2_ECCINJ_REG_DTCM1_MASK 0xc000 +#define NIOS2_ECCINJ_REG_DTCM2_OFST 16 +#define NIOS2_ECCINJ_REG_DTCM2_MASK 0x30000 +#define NIOS2_ECCINJ_REG_DTCM3_OFST 18 +#define NIOS2_ECCINJ_REG_DTCM3_MASK 0xc0000 + +/* CONFIG register */ +#define NIOS2_CONFIG_REG_PE_MASK (0x00000001) +#define NIOS2_CONFIG_REG_PE_OFST (0) +#define NIOS2_CONFIG_REG_ANI_MASK (0x00000002) +#define NIOS2_CONFIG_REG_ANI_OFST (1) +#define NIOS2_CONFIG_REG_ECCEN_MASK (0x00000004) +#define NIOS2_CONFIG_REG_ECCEN_OFST (2) +#define NIOS2_CONFIG_REG_ECCEXC_MASK (0x00000008) +#define NIOS2_CONFIG_REG_ECCEXC_OFST (3) + +/* MPUBASE (MPU Base Address) Register */ +#define NIOS2_MPUBASE_D_MASK (0x00000001) +#define NIOS2_MPUBASE_D_OFST (0) +#define NIOS2_MPUBASE_INDEX_MASK (0x0000003e) +#define NIOS2_MPUBASE_INDEX_OFST (1) +#define NIOS2_MPUBASE_BASE_ADDR_MASK (0xffffffc0) +#define NIOS2_MPUBASE_BASE_ADDR_OFST (6) + +/* MPUACC (MPU Access) Register */ +#define NIOS2_MPUACC_LIMIT_MASK (0xffffffc0) +#define NIOS2_MPUACC_LIMIT_OFST (6) +#define NIOS2_MPUACC_MASK_MASK (0xffffffc0) +#define NIOS2_MPUACC_MASK_OFST (6) +#define NIOS2_MPUACC_C_MASK (0x00000020) +#define NIOS2_MPUACC_C_OFST (5) +#define NIOS2_MPUACC_PERM_MASK (0x0000001c) +#define NIOS2_MPUACC_PERM_OFST (2) +#define NIOS2_MPUACC_RD_MASK (0x00000002) +#define NIOS2_MPUACC_RD_OFST (1) +#define NIOS2_MPUACC_WR_MASK (0x00000001) +#define NIOS2_MPUACC_WR_OFST (0) + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __NIOS2_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/os_cpu.h b/FPGA_nios/hit_pat_bsp/HAL/inc/os_cpu.h new file mode 100644 index 0000000..d7591fe --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/os_cpu.h @@ -0,0 +1,145 @@ +#ifndef __OS_CPU_H__ +#define __OS_CPU_H__ + +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* +* (c) Copyright 1992-1999, Jean J. Labrosse, Weston, FL +* All Rights Reserved +* +* 80x86/80x88 Specific code +* LARGE MEMORY MODEL +* +* Borland C/C++ V4.51 +* +* File : OS_CPU.H +* By : IS (modified from version by Jean J. Labrosse) +********************************************************************************************************* +*/ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-5 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#include "sys/alt_irq.h" + +#ifdef OS_CPU_GLOBALS +#define OS_CPU_EXT +#else +#define OS_CPU_EXT extern +#endif + +/***************************************************************************************** +/ REVISION HISTORY +/ +*****************************************************************************************/ + +/***************************************************************************************** +/ DATA TYPES +/ (Compiler Specific) +*****************************************************************************************/ + +/* This is the definition for Nios32. */ +typedef unsigned char BOOLEAN; +typedef unsigned char INT8U; /* Unsigned 8 bit quantity */ +typedef signed char INT8S; /* Signed 8 bit quantity */ +typedef unsigned short INT16U; /* Unsigned 16 bit quantity */ +typedef signed short INT16S; /* Signed 16 bit quantity */ +typedef unsigned long INT32U; /* Unsigned 32 bit quantity */ +typedef signed long INT32S; /* Signed 32 bit quantity */ +typedef float FP32; /* Single precision floating point */ +typedef double FP64; /* Double precision floating point */ +typedef unsigned int OS_STK; /* Each stack entry is 32-bits */ + +/**************************************************************************** +* Nios2 Miscellaneous defines +****************************************************************************/ + +#define OS_STK_GROWTH 1 /* Stack grows from HIGH to LOW memory */ +#define OS_TASK_SW OSCtxSw + +/****************************************************************************************** + * Disable and Enable Interrupts - 2 methods + * + * Method #1: Disable/Enable interrupts using simple instructions. After critical + * section, interrupts will be enabled even if they were disabled before + * entering the critical section. + * + * Method #2: Disable/Enable interrupts by preserving the state of interrupts. In + * other words, if interrupts were disabled before entering the critical + * section, they will be disabled when leaving the critical section. + * + * Method #3: Disable/Enable interrupts by preserving the state of interrupts. Generally speaking you + * would store the state of the interrupt disable flag in the local variable 'cpu_sr' and then + * disable interrupts. 'cpu_sr' is allocated in all of uC/OS-II's functions that need to + * disable interrupts. You would restore the interrupt disable state by copying back 'cpu_sr' + * into the CPU's status register. + * + *****************************************************************************************/ + +#define OS_CRITICAL_METHOD 3 + +#if OS_CRITICAL_METHOD == 1 +#error OS_CRITICAL_METHOD == 1 not supported, please use method 3 instead. +#endif + +#if OS_CRITICAL_METHOD == 2 +#error OS_CRITICAL_METHOD == 2 not supported, please use method 3 instead. +#endif + +#if OS_CRITICAL_METHOD == 3 +#define OS_CPU_SR alt_irq_context +#define OS_ENTER_CRITICAL() \ + cpu_sr = alt_irq_disable_all () +#define OS_EXIT_CRITICAL() \ + alt_irq_enable_all (cpu_sr); +#endif + +/* Prototypes */ +void OSStartHighRdy(void); +void OSCtxSw(void); +void OSIntCtxSw(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __OS_CPU_H__ */ + + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_alarm.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_alarm.h new file mode 100644 index 0000000..ae687bb --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_alarm.h @@ -0,0 +1,101 @@ +#ifndef __ALT_PRIV_ALARM_H__ +#define __ALT_PRIV_ALARM_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "alt_types.h" + +/* + * This header provides the internal defenitions required by the public + * interface alt_alarm.h. These variables and structures are not guaranteed to + * exist in future implementations of the HAL. + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * "alt_alarm_s" is a structure type used to maintain lists of alarm callback + * functions. + */ + +struct alt_alarm_s +{ + alt_llist llist; /* linked list */ + alt_u32 time; /* time in system ticks of the callback */ + alt_u32 (*callback) (void* context); /* callback function. The return + * value is the period for the next callback; where + * zero indicates that the alarm should be removed + * from the list. + */ + alt_u8 rollover; /* set when desired alarm time + current time causes + overflow, to prevent premature alarm */ + void* context; /* Argument for the callback */ +}; + +/* + * "_alt_tick_rate" is a global variable used to store the system clock rate + * in ticks per second. This is initialised to zero, which coresponds to there + * being no system clock available. + * + * It is then set to it's final value by the system clock driver through a call + * to alt_sysclk_init(). + */ + +extern alt_u32 _alt_tick_rate; + +/* + * "_alt_nticks" is a global variable which records the elapsed number of + * system clock ticks since the last call to settimeofday() or since reset if + * settimeofday() has not been called. + */ + +extern volatile alt_u32 _alt_nticks; + +/* The list of registered alarms. */ + +extern alt_llist alt_alarm_list; + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_PRIV_ALARM_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_busy_sleep.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_busy_sleep.h new file mode 100644 index 0000000..a165e93 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_busy_sleep.h @@ -0,0 +1,35 @@ +#ifndef __ALT_BUSY_SLEEP_H +#define __ALT_BUSY_SLEEP_H + +/* + * Copyright (c) 2003 Altera Corporation, San Jose, California, USA. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +/* + * The function alt_busy_sleep provides a busy loop implementation of usleep. + * This is used to provide usleep for the standalone HAL, or when the timer is + * unavailable in uC/OS-II. + */ + +extern unsigned int alt_busy_sleep (unsigned int us); + +#endif /* __ALT_BUSY_SLEEP_H */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_dev_llist.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_dev_llist.h new file mode 100644 index 0000000..0ab7a28 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_dev_llist.h @@ -0,0 +1,77 @@ +#ifndef __ALT_DEV_LLIST_H__ +#define __ALT_DEV_LLIST_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "sys/alt_llist.h" +#include "alt_types.h" + +/* + * This header provides the internal defenitions required to control file + * access. These variables and functions are not guaranteed to exist in + * future implementations of the HAL. + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * The alt_dev_llist is an internal structure used to form a common base + * class for all device types. The use of this structure allows common code + * to be used to manipulate the various device lists. + */ + +typedef struct { + alt_llist llist; + const char* name; +} alt_dev_llist; + +/* + * + */ + +extern int alt_dev_llist_insert (alt_dev_llist* dev, alt_llist* list); + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_DEV_LLIST_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_exception_handler_registry.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_exception_handler_registry.h new file mode 100644 index 0000000..4502ea7 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_exception_handler_registry.h @@ -0,0 +1,39 @@ +#ifndef __ALT_EXCEPTION_HANDLER_REGISTRY_H__ +#define __ALT_EXCEPTION_HANDLER_REGISTRY_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2008 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ +#include "sys/alt_exceptions.h" + +/* Function pointer to exception callback routine */ +extern alt_exception_result (*alt_instruction_exception_handler) + (alt_exception_cause, alt_u32, alt_u32); + +#endif /* __ALT_EXCEPTION_HANDLER_REGISTRY_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_file.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_file.h new file mode 100644 index 0000000..94007a6 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_file.h @@ -0,0 +1,179 @@ +#ifndef __ALT_FILE_H__ +#define __ALT_FILE_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "sys/alt_dev.h" +#include "sys/alt_llist.h" +#include "os/alt_sem.h" + +#include "alt_types.h" + +/* + * This header provides the internal defenitions required to control file + * access. These variables and functions are not guaranteed to exist in + * future implementations of the HAL. + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * The function alt_find_dev() is used to search the device list "list" to + * locate a device named "name". If a match is found, then a pointer to the + * device is returned, otherwise NULL is returned. + */ + +extern alt_dev* alt_find_dev (const char* name, alt_llist* list); + +/* + * alt_find_file() is used to search the list of registered file systems to + * find the filesystem that the file named "name" belongs to. If a match is + * found, then a pointer to the filesystems alt_dev structure is returned, + * otherwise NULL is returned. + * + * Note that a match does not indicate that the file exists, only that a + * filesystem exists that is registered for a partition that could contain + * the file. The filesystems open() function would need to be called in order + * to determine if the file exists. + */ + +extern alt_dev* alt_find_file (const char* name); + +/* + * alt_get_fd() is used to allocate a file descriptor for the device or + * filesystem "dev". A negative return value indicates an error, otherwise the + * return value is the index of the file descriptor within the file descriptor + * pool. + */ + +extern int alt_get_fd (alt_dev* dev); + +/* + * alt_release_fd() is called to free the file descriptor with index "fd". + */ + +extern void alt_release_fd (int fd); + +/* + * alt_fd_lock() is called by ioctl() to mark the file descriptor "fd" as + * being open for exclusive access. Subsequent calls to open() for the device + * associated with "fd" will fail. A device is unlocked by either calling + * close() for "fd", or by an alternate call to ioctl() (see ioctl.c for + * details). + */ + +extern int alt_fd_lock (alt_fd* fd); + +/* + * alt_fd_unlock() is called by ioctl() to unlock a descriptor previously + * locked by a call to alt_fd_lock(). + */ + +extern int alt_fd_unlock (alt_fd* fd); + +/* + * "alt_fd_list" is the pool of file descriptors. + */ + +extern alt_fd alt_fd_list[]; + +/* + * flags used by alt_fd. + * + * ALT_FD_EXCL is used to mark a file descriptor as locked for exclusive + * access, i.e. further calls to open() for the associated device should + * fail. + * + * ALT_FD_DEV marks a dile descriptor as belonging to a device as oposed to a + * filesystem. + */ + +#define ALT_FD_EXCL 0x80000000 +#define ALT_FD_DEV 0x40000000 + +#define ALT_FD_FLAGS_MASK (ALT_FD_EXCL | ALT_FD_DEV) + +/* + * "alt_dev_list" is the head of the linked list of registered devices. + */ + +extern alt_llist alt_dev_list; + +/* + * "alt_fs_list" is the head of the linked list of registered filesystems. + */ + +extern alt_llist alt_fs_list; + +/* + * "alt_fd_list_lock" is a semaphore used to ensure that access to the pool + * of file descriptors is thread safe. + */ + +ALT_EXTERN_SEM(alt_fd_list_lock) + +/* + * "alt_max_fd" is a 'high water mark'. It indicates the highest file + * descriptor allocated. Use of this can save searching the entire pool + * for active file descriptors, which helps avoid contention on access + * to the file descriptor pool. + */ + +extern alt_32 alt_max_fd; + +/* + * alt_io_redirect() is called at startup to redirect stdout, stdin, and + * stderr to the devices named in the input arguments. By default these streams + * are directed at /dev/null, and are then redirected using this function once + * all of the devices have been registered within the system. + */ + +extern void alt_io_redirect(const char* stdout_dev, + const char* stdin_dev, + const char* stderr_dev); + + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_FILE_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_iic_isr_register.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_iic_isr_register.h new file mode 100644 index 0000000..6c53c86 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_iic_isr_register.h @@ -0,0 +1,39 @@ +#ifndef __ALT_IIC_ISR_REGISTER_H_ +#define __ALT_IIC_ISR_REGISTER_H_ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ +#include "alt_types.h" +#include "sys/alt_irq.h" + +extern int alt_iic_isr_register(alt_u32 ic_id, alt_u32 irq, alt_isr_func isr, + void *isr_context, void *flags); + +#endif /* __ALT_IIC_ISR_REGISTER_H_ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_irq_table.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_irq_table.h new file mode 100644 index 0000000..5b4a787 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_irq_table.h @@ -0,0 +1,59 @@ +#ifndef __ALT_IRQ_TABLE_H__ +#define __ALT_IRQ_TABLE_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +/* + * Definition of a table describing each interrupt handler. The index into + * the array is the interrupt id associated with the handler. + * + * When an interrupt occurs, the associated handler is called with + * the argument stored in the context member. + * + * The table is physically created in alt_irq_handler.c + */ +extern struct ALT_IRQ_HANDLER +{ +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT + void (*handler)(void*); +#else + void (*handler)(void*, alt_u32); +#endif + void *context; +} alt_irq[ALT_NIRQ]; + +#endif diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_legacy_irq.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_legacy_irq.h new file mode 100644 index 0000000..0e19af2 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_legacy_irq.h @@ -0,0 +1,158 @@ +#ifndef __ALT_LEGACY_IRQ_H__ +#define __ALT_LEGACY_IRQ_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * This file provides prototypes and inline implementations of certain routines + * used by the legacy interrupt API. Do not include this in your driver or + * application source files, use "sys/alt_irq.h" instead to access the proper + * public API. + */ + +#include +#include "system.h" + +#ifndef NIOS2_EIC_PRESENT + +#include "nios2.h" +#include "alt_types.h" + +#include "sys/alt_irq.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * alt_irq_register() can be used to register an interrupt handler. If the + * function is succesful, then the requested interrupt will be enabled upon + * return. + */ +extern int alt_irq_register (alt_u32 id, + void* context, + alt_isr_func handler); + +/* + * alt_irq_disable() disables the individual interrupt indicated by "id". + */ +static ALT_INLINE int ALT_ALWAYS_INLINE alt_irq_disable (alt_u32 id) +{ + alt_irq_context status; + extern volatile alt_u32 alt_irq_active; + + status = alt_irq_disable_all (); + + alt_irq_active &= ~(1 << id); + NIOS2_WRITE_IENABLE (alt_irq_active); + + alt_irq_enable_all(status); + + return 0; +} + +/* + * alt_irq_enable() enables the individual interrupt indicated by "id". + */ +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 (); + + alt_irq_active |= (1 << id); + NIOS2_WRITE_IENABLE (alt_irq_active); + + alt_irq_enable_all(status); + + return 0; +} + +#ifndef ALT_EXCEPTION_STACK +/* + * alt_irq_initerruptable() should only be called from within an ISR. It is used + * to allow higer priority interrupts to interrupt the current ISR. The input + * argument, "priority", is the priority, i.e. interrupt number of the current + * interrupt. + * + * If this function is called, then the ISR is required to make a call to + * alt_irq_non_interruptible() before returning. The input argument to + * alt_irq_non_interruptible() is the return value from alt_irq_interruptible(). + * + * Care should be taken when using this pair of functions, since they increasing + * the system overhead associated with interrupt handling. + * + * If you are using an exception stack then nested interrupts won't work, so + * these functions are not available in that case. + */ +static ALT_INLINE alt_u32 ALT_ALWAYS_INLINE alt_irq_interruptible (alt_u32 priority) +{ + extern volatile alt_u32 alt_priority_mask; + extern volatile alt_u32 alt_irq_active; + + alt_u32 old_priority; + + old_priority = alt_priority_mask; + alt_priority_mask = (1 << priority) - 1; + + NIOS2_WRITE_IENABLE (alt_irq_active & alt_priority_mask); + + NIOS2_WRITE_STATUS (1); + + return old_priority; +} + +/* + * See Comments above for alt_irq_interruptible() for an explanation of the use of this + * function. + */ +static ALT_INLINE void ALT_ALWAYS_INLINE alt_irq_non_interruptible (alt_u32 mask) +{ + extern volatile alt_u32 alt_priority_mask; + extern volatile alt_u32 alt_irq_active; + + NIOS2_WRITE_STATUS (0); + + alt_priority_mask = mask; + + NIOS2_WRITE_IENABLE (mask & alt_irq_active); +} +#endif /* ALT_EXCEPTION_STACK */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* NIOS2_EIC_PRESENT */ + +#endif /* __ALT_LEGACY_IRQ_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_no_error.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_no_error.h new file mode 100644 index 0000000..06a036c --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/alt_no_error.h @@ -0,0 +1,77 @@ +#ifndef __ALT_NO_ERROR_H__ +#define __ALT_NO_ERROR_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "alt_types.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * alt_no_error() is a dummy function used by alt_sem.h and alt_flag.h. It + * substitutes for functions that have a return code by creating a function + * that always returns zero. + * + * This may seem a little obscure, but what happens is that the compiler can + * then optomise away the call to this function, and any code written which + * handles the error path (i.e. non zero return values). + * + * This allows code to be written which correctly use the uC/OS-II semaphore + * and flag utilities, without the use of those utilities impacting on + * excutables built for a single threaded HAL environment. + * + * This function is considered to be part of the internal implementation of + * the HAL, and should not be called directly by application code or device + * drivers. It is not guaranteed to be preserved in future versions of the + * HAL. + */ + +static ALT_INLINE int ALT_ALWAYS_INLINE alt_no_error (void) +{ + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_NO_ERROR_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/priv/nios2_gmon_data.h b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/nios2_gmon_data.h new file mode 100644 index 0000000..4bc058d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/priv/nios2_gmon_data.h @@ -0,0 +1,47 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ +#ifndef NIOS2_GMON_DATA_H +#define NIOS2_GMON_DATA_H + +#define GMON_DATA_SIG 0 +#define GMON_DATA_WORDS 1 +#define GMON_DATA_PROFILE_DATA 2 +#define GMON_DATA_PROFILE_LOWPC 3 +#define GMON_DATA_PROFILE_HIGHPC 4 +#define GMON_DATA_PROFILE_BUCKET 5 +#define GMON_DATA_PROFILE_RATE 6 +#define GMON_DATA_MCOUNT_START 7 +#define GMON_DATA_MCOUNT_LIMIT 8 + +#define GMON_DATA_SIZE 9 + +extern unsigned int alt_gmon_data[GMON_DATA_SIZE]; + +#endif diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_alarm.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_alarm.h new file mode 100644 index 0000000..9093080 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_alarm.h @@ -0,0 +1,126 @@ +#ifndef __ALT_ALARM_H__ +#define __ALT_ALARM_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "alt_llist.h" +#include "alt_types.h" + +#include "priv/alt_alarm.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * "alt_alarm" is a structure type used by applications to register an alarm + * callback function. An instance of this type must be passed as an input + * argument to alt_alarm_start(). The user is not responsible for initialising + * the contents of the instance. This is done by alt_alarm_start(). + */ + +typedef struct alt_alarm_s alt_alarm; + +/* + * alt_alarm_start() can be called by an application/driver in order to register + * a function for periodic callback at the system clock frequency. Be aware that + * this callback is likely to occur in interrupt context. + */ + +extern int alt_alarm_start (alt_alarm* the_alarm, + alt_u32 nticks, + alt_u32 (*callback) (void* context), + void* context); + +/* + * alt_alarm_stop() is used to unregister a callback. Alternatively the callback + * can return zero to unregister. + */ + +extern void alt_alarm_stop (alt_alarm* the_alarm); + +/* + * Obtain the system clock rate in ticks/s. + */ + +static ALT_INLINE alt_u32 ALT_ALWAYS_INLINE alt_ticks_per_second (void) +{ + return _alt_tick_rate; +} + +/* + * alt_sysclk_init() is intended to be only used by the system clock driver + * 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) + { + _alt_tick_rate = nticks; + return 0; + } + else + { + return -1; + } +} + +/* + * alt_nticks() returns the elapsed number of system clock ticks since reset. + */ + +static ALT_INLINE alt_u32 ALT_ALWAYS_INLINE alt_nticks (void) +{ + return _alt_nticks; +} + +/* + * alt_tick() should only be called by the system clock driver. This is used + * to notify the system that the system timer period has expired. + */ + +extern void alt_tick (void); + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_ALARM_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_cache.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_cache.h new file mode 100644 index 0000000..44d976c --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_cache.h @@ -0,0 +1,117 @@ +#ifndef __ALT_CACHE_H__ +#define __ALT_CACHE_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003, 2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include + +#include "alt_types.h" + +/* + * alt_cache.h defines the processor specific functions for manipulating the + * cache. + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * alt_icache_flush() is called to flush the instruction cache for a memory + * region of length "len" bytes, starting at address "start". + */ + +extern void alt_icache_flush (void* start, alt_u32 len); + +/* + * alt_dcache_flush() is called to flush the data cache for a memory + * region of length "len" bytes, starting at address "start". + * Any dirty lines in the data cache are written back to memory. + */ + +extern void alt_dcache_flush (void* start, alt_u32 len); + +/* + * alt_dcache_flush() is called to flush the data cache for a memory + * region of length "len" bytes, starting at address "start". + * Any dirty lines in the data cache are NOT written back to memory. + */ + +extern void alt_dcache_flush_no_writeback (void* start, alt_u32 len); + +/* + * Flush the entire instruction cache. + */ + +extern void alt_icache_flush_all (void); + +/* + * Flush the entire data cache. + */ + +extern void alt_dcache_flush_all (void); + +/* + * Allocate a block of uncached memory. + */ + +extern volatile void* alt_uncached_malloc (size_t size); + +/* + * Free a block of uncached memory. + */ + +extern void alt_uncached_free (volatile void* ptr); + +/* + * Convert a pointer to a block of cached memory, into a block of + * uncached memory. + */ + +extern volatile void* alt_remap_uncached (void* ptr, alt_u32 len); + +/* + * Convert a pointer to a block of uncached memory, into a block of + * cached memory. + */ + +extern void* alt_remap_cached (volatile void* ptr, alt_u32 len); + +/* + * + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_CACHE_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_debug.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_debug.h new file mode 100644 index 0000000..af509d8 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_debug.h @@ -0,0 +1,45 @@ +#ifndef __ALT_DEBUG_H__ +#define __ALT_DEBUG_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * The ALT_DEVUG_ASSERT macro can be used to generate a debugger break + * from within software. The break is generated if "condition" evaluates to + * false. + */ + +#define ALT_DEBUG_ASSERT(condition) if (!condition) \ +{ \ + __asm__ volatile ("break"); \ +} + +#endif /* __ALT_DEBUG_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dev.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dev.h new file mode 100644 index 0000000..d96327e --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dev.h @@ -0,0 +1,115 @@ +#ifndef __ALT_DEV_H__ +#define __ALT_DEV_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "system.h" +#include "sys/alt_llist.h" +#include "priv/alt_dev_llist.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * The value ALT_IRQ_NOT_CONNECTED is used to represent an unconnected + * interrupt line. It cannot evaluate to a valid interrupt number. + */ + +#define ALT_IRQ_NOT_CONNECTED (-1) + +typedef struct alt_dev_s alt_dev; + +struct stat; + +/* + * The file descriptor structure definition. + */ + +typedef struct alt_fd_s +{ + alt_dev* dev; + alt_u8* priv; + int fd_flags; +} alt_fd; + +/* + * The device structure definition. + */ + +struct alt_dev_s { + alt_llist llist; /* for internal use */ + const char* name; + int (*open) (alt_fd* fd, const char* name, int flags, int mode); + int (*close) (alt_fd* fd); + int (*read) (alt_fd* fd, char* ptr, int len); + int (*write) (alt_fd* fd, const char* ptr, int len); + int (*lseek) (alt_fd* fd, int ptr, int dir); + int (*fstat) (alt_fd* fd, struct stat* buf); + int (*ioctl) (alt_fd* fd, int req, void* arg); +}; + +/* + * Functions used to register device for access through the C standard + * library. + * + * The only difference between alt_dev_reg() and alt_fs_reg() is the + * interpretation that open() places on the device name. In the case of + * alt_dev_reg the device is assumed to be a particular character device, + * and so there must be an exact match in the name for open to succeed. + * In the case of alt_fs_reg() the name of the device is treated as the + * mount point for a directory, and so any call to open() where the name + * is the root of the device filename will succeed. + */ + +extern int alt_fs_reg (alt_dev* dev); + +static ALT_INLINE int alt_dev_reg (alt_dev* dev) +{ + extern alt_llist alt_dev_list; + + return alt_dev_llist_insert ((alt_dev_llist*) dev, &alt_dev_list); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_DEV_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma.h new file mode 100644 index 0000000..88dcda0 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma.h @@ -0,0 +1,226 @@ +#ifndef __ALT_DMA_H__ +#define __ALT_DMA_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "sys/alt_dma_dev.h" +#include "alt_types.h" + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * This header contains the application side interface for accessing DMA + * resources. See alt_dma_dev.h for the dma device driver interface. + * + * The interface model treats a DMA transaction as being composed of two + * halves (read and write). + * + * The application can supply data for transmit using an "alt_dma_txchan" + * descriptor. Alternatively an "alt_dma_rxchan" descriptor can be used to + * receive data. + */ + +/* + * alt_dma_txchan_open() is used to obtain an "alt_dma_txchan" descriptor for + * a DMA transmit device. The name is the name of the associated physical + * device (e.g. "/dev/dma_0"). + * + * The return value will be NULL on failure, and non-NULL otherwise. + */ + +extern alt_dma_txchan alt_dma_txchan_open (const char* name); + +/* + * alt_dma_txchan_close() is provided so that an application can notify the + * system that it has finished with a given DMA transmit channel. This is only + * provided for completness. + */ + +static ALT_INLINE int alt_dma_txchan_close (alt_dma_txchan dma) +{ + return 0; +} + +/* + * alt_dma_txchan_send() posts a transmit request to a DMA transmit channel. + * The input arguments are: + * + * dma: the channel to use. + * from: a pointer to the start of the data to send. + * length: the length of the data to send in bytes. + * done: callback function that will be called once the data has been sent. + * handle: opaque value passed to "done". + * + * The return value will be negative if the request cannot be posted, and + * zero otherwise. + */ + +static ALT_INLINE int alt_dma_txchan_send (alt_dma_txchan dma, + const void* from, + alt_u32 length, + alt_txchan_done* done, + void* handle) +{ + return dma ? dma->dma_send (dma, + from, + length, + done, + handle) : -ENODEV; +} + +/* + * alt_dma_txchan_space() returns the number of tranmit requests that can be + * posted to the specified DMA transmit channel. + * + * A negative value indicates that the value could not be determined. + */ + +static ALT_INLINE int alt_dma_txchan_space (alt_dma_txchan dma) +{ + return dma ? dma->space (dma) : -ENODEV; +} + +/* + * alt_dma_txchan_ioctl() can be used to perform device specific I/O + * operations on the indicated DMA transmit channel. For example some drivers + * support options to control the width of the transfer operations. See + * alt_dma_dev.h for the list of generic requests. + * + * A negative return value indicates failure, otherwise the interpretation + * of the return value is request specific. + */ + +static ALT_INLINE int alt_dma_txchan_ioctl (alt_dma_txchan dma, + int req, + void* arg) +{ + return dma ? dma->ioctl (dma, req, arg) : -ENODEV; +} + +/* + * alt_dma_rxchan_open() is used to obtain an "alt_dma_rxchan" descriptor for + * a DMA receive channel. The name is the name of the associated physical + * device (e.g. "/dev/dma_0"). + * + * The return value will be NULL on failure, and non-NULL otherwise. + */ + +extern alt_dma_rxchan alt_dma_rxchan_open (const char* dev); + +/* + * alt_dma_rxchan_close() is provided so that an application can notify the + * system that it has finished with a given DMA receive channel. This is only + * provided for completness. + */ + +static ALT_INLINE int alt_dma_rxchan_close (alt_dma_rxchan dma) +{ + return 0; +} + +/* + * + */ + +/* + * alt_dma_rxchan_prepare() posts a receive request to a DMA receive channel. + * + * The input arguments are: + * + * dma: the channel to use. + * data: a pointer to the location that data is to be received to. + * len: the maximum length of the data to receive. + * done: callback function that will be called once the data has been + * received. + * handle: opaque value passed to "done". + * + * The return value will be negative if the request cannot be posted, and + * zero otherwise. + */ + +static ALT_INLINE int alt_dma_rxchan_prepare (alt_dma_rxchan dma, + void* data, + alt_u32 len, + alt_rxchan_done* done, + void* handle) +{ + return dma ? dma->prepare (dma, data, len, done, handle) : -ENODEV; +} + +/* + * alt_dma_rxchan_ioctl() can be used to perform device specific I/O + * operations on the indicated DMA receive channel. For example some drivers + * support options to control the width of the transfer operations. See + * alt_dma_dev.h for the list of generic requests. + * + * A negative return value indicates failure, otherwise the interpretation + * of the return value is request specific. + */ + +static ALT_INLINE int alt_dma_rxchan_ioctl (alt_dma_rxchan dma, + int req, + void* arg) +{ + return dma ? dma->ioctl (dma, req, arg) : -ENODEV; +} + +/* + * alt_dma_rxchan_depth() returns the depth of the receive FIFO used to store + * receive requests. + */ + +static ALT_INLINE alt_u32 alt_dma_rxchan_depth(alt_dma_rxchan dma) +{ + return dma->depth; +} + +/* + * + */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_DMA_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma_dev.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma_dev.h new file mode 100644 index 0000000..65063bd --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_dma_dev.h @@ -0,0 +1,200 @@ +#ifndef __ALT_DMA_DEV_H__ +#define __ALT_DMA_DEV_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "priv/alt_dev_llist.h" + +#include "alt_types.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * This header contains the device driver interface for accessing DMA + * resources. See alt_dma.h for the DMA application side interface. + * + * The interface model treats a DMA transaction as being composed of two + * halves (read and write). + * + * An "alt_dma_txchan_dev" is used to describe the device associated with a + * DMA transmit channel. An "alt_dma_rxchan_dev" is used to describe the + * device associated with a DMA receive channel. + */ + +/* + * List of generic ioctl requests that may be supported by a DMA device. + * + * ALT_DMA_RX_ONLY_ON: This causes a DMA channel to operate in a mode + * where only the receiver is under software control. + * The other side reads continously from a single + * location. The address to read is the argument to + * this request. + * ALT_DMA_RX_ONLY_OFF: Return to the default mode where both the receive + * and transmit sides of the DMA can be under software + * control. + * ALT_DMA_TX_ONLY_ON: This causes a DMA channel to operate in a mode + * where only the transmitter is under software control. + * The other side writes continously to a single + * location. The address to write to is the argument to + * this request. + * ALT_DMA_TX_ONLY_OFF: Return to the default mode where both the receive + * and transmit sides of the DMA can be under software + * control. + * ALT_DMA_SET_MODE_8: Transfer data in units of 8 bits. + * ALT_DMA_SET_MODE_16: Transfer data in units of 16 bits. + * ALT_DMA_SET_MODE_32: Transfer data in units of 32 bits. + * ALT_DMA_SET_MODE_64: Transfer data in units of 64 bits. + * ALT_DMA_SET_MODE_128: Transfer data in units of 128 bits. + * ALT_DMA_GET_MODE: Get the current transfer mode. + * + * The use of the macros: ALT_DMA_TX_STREAM_ON, ALT_DMA_TX_STREAM_OFF + * ALT_DMA_RX_STREAM_OFF and ALT_DMA_RX_STREAM_ON are depreciated. You should + * instead use the macros: ALT_DMA_RX_ONLY_ON, ALT_DMA_RX_ONLY_OFF, + * ALT_DMA_TX_ONLY_ON and ALT_DMA_TX_ONLY_OFF. + */ + +#define ALT_DMA_TX_STREAM_ON (0x1) +#define ALT_DMA_TX_STREAM_OFF (0x2) +#define ALT_DMA_RX_STREAM_ON (0x3) +#define ALT_DMA_RX_STREAM_OFF (0x4) +#define ALT_DMA_SET_MODE_8 (0x5) +#define ALT_DMA_SET_MODE_16 (0x6) +#define ALT_DMA_SET_MODE_32 (0x7) +#define ALT_DMA_SET_MODE_64 (0x8) +#define ALT_DMA_SET_MODE_128 (0x9) +#define ALT_DMA_GET_MODE (0xa) + +#define ALT_DMA_RX_ONLY_ON ALT_DMA_TX_STREAM_ON +#define ALT_DMA_RX_ONLY_OFF ALT_DMA_TX_STREAM_OFF +#define ALT_DMA_TX_ONLY_ON ALT_DMA_RX_STREAM_ON +#define ALT_DMA_TX_ONLY_OFF ALT_DMA_RX_STREAM_OFF + +/* + * + */ + +typedef struct alt_dma_txchan_dev_s alt_dma_txchan_dev; +typedef struct alt_dma_rxchan_dev_s alt_dma_rxchan_dev; + +typedef alt_dma_txchan_dev* alt_dma_txchan; +typedef alt_dma_rxchan_dev* alt_dma_rxchan; + +typedef void (alt_txchan_done)(void* handle); +typedef void (alt_rxchan_done)(void* handle, void* data); + +/* + * devices that provide a DMA transmit channel are required to provide an + * instance of the "alt_dma_txchan_dev" structure. + */ + +struct alt_dma_txchan_dev_s { + alt_llist llist; /* for internal use */ + const char* name; /* name of the device instance + * (e.g. "/dev/dma_0"). + */ + int (*space) (alt_dma_txchan dma); /* returns the maximum number of + * transmit requests that can be posted + */ + int (*dma_send) (alt_dma_txchan dma, + const void* from, + alt_u32 len, + alt_txchan_done* done, + void* handle); /* post a transmit request */ + int (*ioctl) (alt_dma_txchan dma, int req, void* arg); /* perform device + * specific I/O control. + */ +}; + +/* + * devices that provide a DMA receive channel are required to provide an + * instance of the "alt_dma_rxchan_dev" structure. + */ + +struct alt_dma_rxchan_dev_s { + alt_llist list; /* for internal use */ + const char* name; /* name of the device instance + * (e.g. "/dev/dma_0"). + */ + alt_u32 depth; /* maximum number of receive requests that + * can be posted. + */ + int (*prepare) (alt_dma_rxchan dma, + void* data, + alt_u32 len, + alt_rxchan_done* done, + void* handle); /* post a receive request */ + int (*ioctl) (alt_dma_rxchan dma, int req, void* arg); /* perform device + * specific I/O control. + */ +}; + +/* + * Register a DMA transmit channel with the system. + */ + +static ALT_INLINE int alt_dma_txchan_reg (alt_dma_txchan_dev* dev) +{ + extern alt_llist alt_dma_txchan_list; + + return alt_dev_llist_insert((alt_dev_llist*) dev, &alt_dma_txchan_list); +} + +/* + * Register a DMA receive channel with the system. + */ + +static ALT_INLINE int alt_dma_rxchan_reg (alt_dma_rxchan_dev* dev) +{ + extern alt_llist alt_dma_rxchan_list; + + return alt_dev_llist_insert((alt_dev_llist*) dev, &alt_dma_rxchan_list); +} + +/* + * + */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_DMA_DEV_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_driver.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_driver.h new file mode 100644 index 0000000..ca7aea1 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_driver.h @@ -0,0 +1,168 @@ +#ifndef __ALT_DRIVER_H__ +#define __ALT_DRIVER_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/* + * Macros used to access a driver without HAL file descriptors. + */ + +/* + * ALT_MODULE_CLASS + * + * This macro returns the module class name for the specified module instance. + * It uses information in the system.h file. + * Neither the instance name or class name are quoted (so that they can + * be used with other pre-processor macros). + * + * Example: + * Assume the design has an instance of an altera_avalon_uart called uart1. + * Calling ALT_MODULE_CLASS(uart1) returns altera_avalon_uart. + */ + +#define ALT_MODULE_CLASS(instance) ALT_MODULE_CLASS_ ## instance + + +/* + * ALT_DRIVER_FUNC_NAME + * + * --> instance Instance name. + * --> func Function name. + * + * This macro returns the device driver function name of the specified + * module instance for the specified function name. + * + * Example: + * Assume the design has an instance of an altera_avalon_uart called uart1. + * Calling ALT_DRIVER_FUNC_NAME(uart1, write) returns + * altera_avalon_uart_write. + */ + +#define ALT_DRIVER_FUNC_NAME(instance, func) \ + ALT_DRIVER_FUNC_NAME1(ALT_MODULE_CLASS(instance), func) +#define ALT_DRIVER_FUNC_NAME1(module_class, func) \ + ALT_DRIVER_FUNC_NAME2(module_class, func) +#define ALT_DRIVER_FUNC_NAME2(module_class, func) \ + module_class ## _ ## func + +/* + * ALT_DRIVER_STATE_STRUCT + * + * --> instance Instance name. + * + * This macro returns the device driver state type name of the specified + * module instance. + * + * Example: + * Assume the design has an instance of an altera_avalon_uart called uart1. + * Calling ALT_DRIVER_STATE_STRUCT(uart1) returns: + * struct altera_avalon_uart_state_s + * + * Note that the ALT_DRIVER_FUNC_NAME macro is used even though "state" isn't + * really a function but it does match the required naming convention. + */ +#define ALT_DRIVER_STATE_STRUCT(instance) \ + struct ALT_DRIVER_FUNC_NAME(instance, state_s) + +/* + * ALT_DRIVER_STATE + * + * --> instance Instance name. + * + * This macro returns the device driver state name of the specified + * module instance. + * + * Example: + * Assume the design has an instance of an altera_avalon_uart called uart1. + * Calling ALT_DRIVER_STATE(uart1) returns uart1. + */ +#define ALT_DRIVER_STATE(instance) instance + +/* + * ALT_DRIVER_WRITE + * + * --> instance Instance name. + * --> buffer Write buffer. + * --> len Length of write buffer data. + * --> flags Control flags (e.g. O_NONBLOCK) + * + * This macro calls the "write" function of the specified driver instance. + */ + +#define ALT_DRIVER_WRITE_EXTERNS(instance) \ + extern ALT_DRIVER_STATE_STRUCT(instance) ALT_DRIVER_STATE(instance); \ + extern int ALT_DRIVER_FUNC_NAME(instance, write) \ + (ALT_DRIVER_STATE_STRUCT(instance) *, const char *, int, int); + +#define ALT_DRIVER_WRITE(instance, buffer, len, flags) \ + ALT_DRIVER_FUNC_NAME(instance, write)(&ALT_DRIVER_STATE(instance), buffer, len, flags) + + +/* + * ALT_DRIVER_READ + * + * --> instance Instance name. + * <-- buffer Read buffer. + * --> len Length of read buffer. + * --> flags Control flags (e.g. O_NONBLOCK) + * + * This macro calls the "read" function of the specified driver instance. + */ + +#define ALT_DRIVER_READ_EXTERNS(instance) \ + extern ALT_DRIVER_STATE_STRUCT(instance) ALT_DRIVER_STATE(instance); \ + extern int ALT_DRIVER_FUNC_NAME(instance, read) \ + (ALT_DRIVER_STATE_STRUCT(instance) *, const char *, int, int); + +#define ALT_DRIVER_READ(instance, buffer, len, flags) \ + ALT_DRIVER_FUNC_NAME(instance, read)(&ALT_DRIVER_STATE(instance), buffer, len, flags) + +/* + * ALT_DRIVER_IOCTL + * + * --> instance Instance name. + * --> req ioctl request (e.g. TIOCSTIMEOUT) + * --> arg Optional argument (void*) + * + * This macro calls the "ioctl" function of the specified driver instance + */ + +#define ALT_DRIVER_IOCTL_EXTERNS(instance) \ + extern ALT_DRIVER_STATE_STRUCT(instance) ALT_DRIVER_STATE(instance); \ + extern int ALT_DRIVER_FUNC_NAME(instance, ioctl) \ + (ALT_DRIVER_STATE_STRUCT(instance) *, int, void*); + +#define ALT_DRIVER_IOCTL(instance, req, arg) \ + ALT_DRIVER_FUNC_NAME(instance, ioctl)(&ALT_DRIVER_STATE(instance), req, arg) + +#endif /* __ALT_DRIVER_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_errno.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_errno.h new file mode 100644 index 0000000..23e3096 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_errno.h @@ -0,0 +1,87 @@ +#ifndef __ALT_ERRNO_H__ +#define __ALT_ERRNO_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +/* + * errno is defined in so that it uses the thread local version + * stored in the location pointed to by "_impure_ptr". This means that the + * accesses to errno within the HAL library can cause the entirety of + * of the structure pointed to by "_impure_ptr" to be added to the + * users application. This can be undesirable in very small footprint systems. + * + * To avoid this happening, the HAL uses the macro ALT_ERRNO, defined below, + * to access errno, rather than accessing it directly. This macro will only + * use the thread local version if some other code has already caused it to be + * included into the system, otherwise it will use the global errno value. + * + * This causes a slight increases in code size where errno is accessed, but + * can lead to significant overall benefits in very small systems. The + * increase is inconsequential when compared to the size of the structure + * pointed to by _impure_ptr. + * + * Note that this macro accesses __errno() using an externally declared + * function pointer (alt_errno). This is done so that the function call uses the + * subroutine call instruction via a register rather than an immediate address. + * This is important in the case that the code has been linked for a high + * address, but __errno() is not being used. In this case the weak linkage + * would have resulted in the instruction: "call 0" which would fail to link. + */ + +extern int* (*alt_errno) (void); + +/* Must define this so that values such as EBADFD are defined in errno.h. */ +#define __LINUX_ERRNO_EXTENSIONS__ + +#include + +#include "alt_types.h" + +#undef errno + +extern int errno; + +static ALT_INLINE int* alt_get_errno(void) +{ + return ((alt_errno) ? alt_errno() : &errno); +} + +#define ALT_ERRNO *alt_get_errno() + +#endif /* __ALT_ERRNO_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_exceptions.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_exceptions.h new file mode 100644 index 0000000..9c938b9 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_exceptions.h @@ -0,0 +1,166 @@ +#ifndef __ALT_EXCEPTIONS_H__ +#define __ALT_EXCEPTIONS_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2008 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ +#include "alt_types.h" +#include "system.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * This file defines instruction-generated exception handling and registry + * API, exception type enumeration, and handler return value enumeration for + * Nios II. + */ + +/* + * The following enumeration describes the value in the CPU EXCEPTION + * register CAUSE bit field. + */ +enum alt_exception_cause_e { + /* + * This value is passed to an exception handler's cause argument if + * "extra exceptions" information (EXECPTION) register is not + * present in the processor hardware configuration. + */ + NIOS2_EXCEPTION_CAUSE_NOT_PRESENT = -1, + + /* + * Real values + */ + NIOS2_EXCEPTION_RESET = 0, + NIOS2_EXCEPTION_CPU_ONLY_RESET_REQUEST = 1, + NIOS2_EXCEPTION_INTERRUPT = 2, + NIOS2_EXCEPTION_TRAP_INST = 3, + NIOS2_EXCEPTION_UNIMPLEMENTED_INST = 4, + NIOS2_EXCEPTION_ILLEGAL_INST = 5, + NIOS2_EXCEPTION_MISALIGNED_DATA_ADDR = 6, + NIOS2_EXCEPTION_MISALIGNED_TARGET_PC = 7, + NIOS2_EXCEPTION_DIVISION_ERROR = 8, + NIOS2_EXCEPTION_SUPERVISOR_ONLY_INST_ADDR = 9, + NIOS2_EXCEPTION_SUPERVISOR_ONLY_INST = 10, + NIOS2_EXCEPTION_SUPERVISOR_ONLY_DATA_ADDR = 11, + NIOS2_EXCEPTION_TLB_MISS = 12, + NIOS2_EXCEPTION_TLB_EXECUTE_PERM_VIOLATION = 13, + NIOS2_EXCEPTION_TLB_READ_PERM_VIOLATION = 14, + NIOS2_EXCEPTION_TLB_WRITE_PERM_VIOLATION = 15, + NIOS2_EXCEPTION_MPU_INST_REGION_VIOLATION = 16, + NIOS2_EXCEPTION_MPU_DATA_REGION_VIOLATION = 17, + NIOS2_EXCEPTION_ECC_TLB_ERR = 18, + NIOS2_EXCEPTION_ECC_FETCH_ERR = 19, + NIOS2_EXCEPTION_ECC_REGISTER_FILE_ERR = 20, + NIOS2_EXCEPTION_ECC_DATA_ERR = 21, + NIOS2_EXCEPTION_ECC_DATA_CACHE_WRITEBACK_ERR = 22 +}; +typedef enum alt_exception_cause_e alt_exception_cause; + +/* + * These define valid return values for a user-defined instruction-generated + * exception handler. The handler should return one of these to indicate + * whether to re-issue the instruction that triggered the exception, or to + * skip it. + */ +enum alt_exception_result_e { + NIOS2_EXCEPTION_RETURN_REISSUE_INST = 0, + NIOS2_EXCEPTION_RETURN_SKIP_INST = 1 +}; +typedef enum alt_exception_result_e alt_exception_result; + +/* + * alt_instruction_exception_register() can be used to register an exception + * handler for instruction-generated exceptions that are not handled by the + * built-in exception handler (i.e. for interrupts). + * + * The registry API is optionally enabled through the "Enable + * Instruction-related Exception API" HAL BSP setting, which will + * define the macro below. + */ +#ifdef ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API +void alt_instruction_exception_register ( + alt_exception_result (*exception_handler)( + alt_exception_cause cause, + alt_u32 exception_pc, + alt_u32 bad_addr) ); +#endif /*ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API */ + +/* + * alt_exception_cause_generated_bad_addr() indicates whether a particular + * exception cause value was from an exception-type that generated a valid + * address in the BADADDR register. The contents of BADADDR is passed to + * a user-registered exception handler in all cases, whether valid or not. + * This routine should be called to validate the bad_addr argument to + * your exception handler. + * + * Note that this routine will return false (0) for causes + * NIOS2_EXCEPTION_TLB_MISS and NIOS2_EXCEPTION_ECC_TLB_ERR. + * You must read the TLBMISC.D field to determine if BADADDR + * is valid for these (valid if TLBMISC.D = 1). + */ +int alt_exception_cause_generated_bad_addr(alt_exception_cause cause); + +/* + * alt_ecc_fatal_exception_register() is called to register a handler to + * service likely fatal ECC error exceptions. Likely the handler will + * assume that correct execution of the running software is not possible + * and re-initialize the processor (e.g. jump to reset address). + * + * Passing null (0x0) in the handler argument will disable a previously- + * registered handler. + * + * Note that if no handler is registered, just normal exception processing + * occurs on a likely fatal ECC exception and the exception processing + * code might trigger an infinite exception loop. + * + * Note that the handler isn't a C function: it must be written in + * assembly-code because it doesn't support C language calling conventions + * and it can't return. + * + * The handler code must be carefully written to avoid triggering + * another fatal ECC exception and creating an infinite exception loop. + * The handler must avoid reading registers in case the fatal ECC + * error is a register file ECC error. + * If a data cache is present, the handler must avoid instructions that + * access the data cache in case the fatal ECC error is a data cache + * related ECC error. This includes cacheable load, cacheable store, + * non-cacheable store (because it looks in the data cache to update the + * data cache if it hits), and all data cache management instructions except + * for INITD. + */ +void alt_ecc_fatal_exception_register(alt_u32 handler); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_EXCEPTIONS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash.h new file mode 100644 index 0000000..f1ab10d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash.h @@ -0,0 +1,181 @@ +#ifndef __ALT_FLASH_H__ +#define __ALT_FLASH_H__ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +/****************************************************************************** +* * +* Alt_flash.h - User interface for flash code * +* * +* Use this interface to avoid being exposed to the internals of the device * +* driver architecture. If you chose to use the flash driver internal * +* structures we don't guarantee not to change them * +* * +* Author PRR * +* * +******************************************************************************/ + + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#include "alt_types.h" +#include "alt_flash_types.h" +#include "alt_flash_dev.h" +#include "sys/alt_cache.h" + +alt_flash_fd* alt_flash_open_dev(const char* name); +void alt_flash_close_dev(alt_flash_fd* fd ); + +/* + * alt_flash_lock + * + * Locks the range of the memory sectors, which + * protected from write and erase. + * + */ +static __inline__ int __attribute__ ((always_inline)) alt_lock_flash( + alt_flash_fd* fd, alt_u32 sectors_to_lock) +{ + return fd->lock( fd, sectors_to_lock); +} + +/* + * alt_write_flash + * + * Program a buffer into flash. + * + * This routine erases all the affected erase blocks (if necessary) + * and then programs the data. However it does not read the data out first + * and preserve and none overwritten data, because this would require very + * large buffers on the target. If you need + * that functionality use the functions below. + */ +static __inline__ int __attribute__ ((always_inline)) alt_write_flash( + alt_flash_fd* fd, + int offset, + const void* src_addr, + int length ) +{ + return fd->write( fd, offset, src_addr, length ); +} + +/* + * alt_read_flash + * + * Read a block of flash for most flashes this is just memcpy + * it's here for completeness in case we need it for some serial flash device + * + */ +static __inline__ int __attribute__ ((always_inline)) alt_read_flash( + alt_flash_fd* fd, int offset, + void* dest_addr, int length ) +{ + return fd->read( fd, offset, dest_addr, length ); +} + +/* + * alt_get_flash_info + * + * Return the information on the flash sectors. + * + */ +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); +} + +/* + * alt_erase_flash_block + * + * Erase a particular erase block, pass in the offset to the start of + * the block and it's size + */ +static __inline__ int __attribute__ ((always_inline)) alt_erase_flash_block( + alt_flash_fd* fd, int offset, int length) +{ + int ret_code; + ret_code = fd->erase_block( fd, offset ); + +/* remove dcache_flush call for FB330552 + if(!ret_code) + alt_dcache_flush((alt_u8*)fd->base_addr + offset, length); +*/ + return ret_code; +} + +/* + * alt_write_flash_block + * + * Write a particular flash block, block_offset is the offset + * (from the base of flash) to start of the block + * data_offset is the offset (from the base of flash) + * where you wish to start programming + * + * NB this function DOES NOT check that you are only writing a single + * block of data as that would slow down this function. + * + * Use alt_write_flash if you want that level of error checking. + */ + +static __inline__ int __attribute__ ((always_inline)) alt_write_flash_block( + alt_flash_fd* fd, int block_offset, + int data_offset, + const void *data, int length) +{ + + int ret_code; + ret_code = fd->write_block( fd, block_offset, data_offset, data, length ); + +/* remove dcache_flush call for FB330552 + if(!ret_code) + alt_dcache_flush((alt_u8*)fd->base_addr + data_offset, length); +*/ + return ret_code; +} + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_FLASH_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash_dev.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash_dev.h new file mode 100644 index 0000000..6d06725 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash_dev.h @@ -0,0 +1,100 @@ +#ifndef __ALT_FLASH_DEV_H__ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +/****************************************************************************** +* * +* Alt_flash_dev.h - Generic Flash device interfaces * +* * +* Author PRR * +* * +******************************************************************************/ +#define __ALT_FLASH_DEV_H__ + +#include "alt_flash_types.h" +#include "sys/alt_llist.h" +#include "priv/alt_dev_llist.h" + +#include "alt_types.h" + +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) +{ + extern alt_llist alt_flash_dev_list; + + return alt_dev_llist_insert ((alt_dev_llist*) fd, &alt_flash_dev_list); +} + +typedef alt_flash_dev* (*alt_flash_open)(alt_flash_dev* flash, + const char* name ); +typedef int (*alt_flash_close)(alt_flash_dev* flash_info); + +typedef int (*alt_flash_write)( alt_flash_dev* flash, int offset, + const void* src_addr, int length ); + +typedef int (*alt_flash_get_flash_info)( alt_flash_dev* flash, flash_region** info, + int* number_of_regions); +typedef int (*alt_flash_write_block)( alt_flash_dev* flash, int block_offset, + int data_offset, const void* data, + int length); +typedef int (*alt_flash_erase_block)( alt_flash_dev* flash, int offset); +typedef int (*alt_flash_read)(alt_flash_dev* flash, int offset, + void* dest_addr, int length ); +typedef int (*alt_flash_lock)(alt_flash_dev* flash, alt_u32 sectors_to_lock); + +struct alt_flash_dev +{ + alt_llist llist; + const char* name; + alt_flash_open open; + alt_flash_close close; + alt_flash_write write; + alt_flash_read read; + alt_flash_get_flash_info get_info; + alt_flash_erase_block erase_block; + alt_flash_write_block write_block; + void* base_addr; + int length; + int number_of_regions; + flash_region region_info[ALT_MAX_NUMBER_OF_FLASH_REGIONS]; + alt_flash_lock lock; +}; + +#endif /* __ALT_FLASH_DEV_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash_types.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash_types.h new file mode 100644 index 0000000..10f1f01 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_flash_types.h @@ -0,0 +1,64 @@ +#ifndef __ALT_FLASH_TYPES_H__ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +/****************************************************************************** +* * +* Alt_flash_types.h - Some generic types and defines used by the flash code * +* * +* Author PRR * +* * +******************************************************************************/ +#define __ALT_FLASH_TYPES_H__ + +#ifndef ALT_MAX_NUMBER_OF_FLASH_REGIONS +#define ALT_MAX_NUMBER_OF_FLASH_REGIONS 8 +#endif /* ALT_MAX_NUMBER_OF_FLASH_REGIONS */ + +/* + * Description of a single Erase region + */ +typedef struct flash_region +{ + int offset; + int region_size; + int number_of_blocks; + int block_size; +}flash_region; + +#endif /* __ALT_FLASH_TYPES_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq.h new file mode 100644 index 0000000..94a556a --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq.h @@ -0,0 +1,245 @@ +#ifndef __ALT_IRQ_H__ +#define __ALT_IRQ_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * alt_irq.h is the Nios II specific implementation of the interrupt controller + * interface. + * + * Nios II includes optional support for an external interrupt controller. + * When an external controller is present, the "Enhanced" interrupt API + * must be used to manage individual interrupts. The enhanced API also + * supports the processor's internal interrupt controller. Certain API + * members are accessible from either the "legacy" or "enhanced" interrpt + * API. + * + * Regardless of which API is in use, this file should be included by + * application code and device drivers that register ISRs or manage interrpts. + */ +#include + +#include "nios2.h" +#include "alt_types.h" +#include "system.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * Macros used by alt_irq_enabled + */ +#define ALT_IRQ_ENABLED 1 +#define ALT_IRQ_DISABLED 0 + +/* + * Number of available interrupts in internal interrupt controller. + */ +#define ALT_NIRQ NIOS2_NIRQ + +/* + * Used by alt_irq_disable_all() and alt_irq_enable_all(). + */ +typedef int alt_irq_context; + +/* ISR Prototype */ +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT +typedef void (*alt_isr_func)(void* isr_context); +#else +typedef void (*alt_isr_func)(void* isr_context, alt_u32 id); +#endif + +/* + * The following protypes and routines are supported by both + * the enhanced and legacy interrupt APIs + */ + +/* + * alt_irq_enabled can be called to determine if the processor's global + * interrupt enable is asserted. The return value is zero if interrupts + * are disabled, and non-zero otherwise. + * + * Whether the internal or external interrupt controller is present, + * individual interrupts may still be disabled. Use the other API to query + * a specific interrupt. + */ +static ALT_INLINE int ALT_ALWAYS_INLINE alt_irq_enabled (void) +{ + int status; + + NIOS2_READ_STATUS (status); + + return status & NIOS2_STATUS_PIE_MSK; +} + +/* + * alt_irq_disable_all() + * + * This routine inhibits all interrupts by negating the status register PIE + * bit. It returns the previous contents of the CPU status register (IRQ + * context) which can be used to restore the status register PIE bit to its + * state before this routine was called. + */ +static ALT_INLINE alt_irq_context ALT_ALWAYS_INLINE + alt_irq_disable_all (void) +{ + alt_irq_context context; + + NIOS2_READ_STATUS (context); + + NIOS2_WRITE_STATUS (context & ~NIOS2_STATUS_PIE_MSK); + + return context; +} + +/* + * alt_irq_enable_all() + * + * Enable all interrupts that were previously disabled by alt_irq_disable_all() + * + * This routine accepts a context to restore the CPU status register PIE bit + * to the state prior to a call to alt_irq_disable_all(). + + * In the case of nested calls to alt_irq_disable_all()/alt_irq_enable_all(), + * this means that alt_irq_enable_all() does not necessarily re-enable + * interrupts. + * + * This routine will perform a read-modify-write sequence to restore only + * status.PIE if the processor is configured with options that add additional + * writeable status register bits. These include the MMU, MPU, the enhanced + * interrupt controller port, and shadow registers. Otherwise, as a performance + * enhancement, status is overwritten with the prior context. + */ +static ALT_INLINE void ALT_ALWAYS_INLINE + alt_irq_enable_all (alt_irq_context context) +{ +#if (NIOS2_NUM_OF_SHADOW_REG_SETS > 0) || (defined NIOS2_EIC_PRESENT) || \ + (defined NIOS2_MMU_PRESENT) || (defined NIOS2_MPU_PRESENT) + alt_irq_context status; + + NIOS2_READ_STATUS (status); + + status &= ~NIOS2_STATUS_PIE_MSK; + status |= (context & NIOS2_STATUS_PIE_MSK); + + NIOS2_WRITE_STATUS (status); +#else + NIOS2_WRITE_STATUS (context); +#endif +} + +/* + * The function alt_irq_init() is defined within the auto-generated file + * alt_sys_init.c. This function calls the initilization macros for all + * interrupt controllers in the system at config time, before any other + * non-interrupt controller driver is initialized. + * + * The "base" parameter is ignored and only present for backwards-compatibility. + * It is recommended that NULL is passed in for the "base" parameter. + */ +extern void alt_irq_init (const void* base); + +/* + * alt_irq_cpu_enable_interrupts() enables the CPU to start taking interrupts. + */ +static ALT_INLINE void ALT_ALWAYS_INLINE + alt_irq_cpu_enable_interrupts (void) +{ + NIOS2_WRITE_STATUS(NIOS2_STATUS_PIE_MSK +#if defined(NIOS2_EIC_PRESENT) && (NIOS2_NUM_OF_SHADOW_REG_SETS > 0) + | NIOS2_STATUS_RSIE_MSK +#endif + ); +} + + +/* + * Prototypes for the enhanced interrupt API. + */ +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT +/* + * alt_ic_isr_register() can be used to register an interrupt handler. If the + * function is succesful, then the requested interrupt will be enabled upon + * return. + */ +extern int alt_ic_isr_register(alt_u32 ic_id, + alt_u32 irq, + alt_isr_func isr, + void *isr_context, + void *flags); + +/* + * alt_ic_irq_enable() and alt_ic_irq_disable() enable/disable a specific + * interrupt by using IRQ port and interrupt controller instance. + */ +int alt_ic_irq_enable (alt_u32 ic_id, alt_u32 irq); +int alt_ic_irq_disable(alt_u32 ic_id, alt_u32 irq); + + /* + * alt_ic_irq_enabled() indicates whether a specific interrupt, as + * specified by IRQ port and interrupt controller instance is enabled. + */ +alt_u32 alt_ic_irq_enabled(alt_u32 ic_id, alt_u32 irq); + +#else +/* + * Prototypes for the legacy interrupt API. + */ +#include "priv/alt_legacy_irq.h" +#endif + + +/* + * alt_irq_pending() returns a bit list of the current pending interrupts. + * This is used by alt_irq_handler() to determine which registered interrupt + * handlers should be called. + * + * This routine is only available for the Nios II internal interrupt + * controller. + */ +#ifndef NIOS2_EIC_PRESENT +static ALT_INLINE alt_u32 ALT_ALWAYS_INLINE alt_irq_pending (void) +{ + alt_u32 active; + + NIOS2_READ_IPENDING (active); + + return active; +} +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_IRQ_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq_entry.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq_entry.h new file mode 100644 index 0000000..549811c --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_irq_entry.h @@ -0,0 +1,39 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * This file pulls in the IRQ entry assembler and C code, which is only + * required if there are any interruptes in the system. + */ + +__asm__( "\n\t.globl alt_irq_entry" ); + +__asm__( "\n\t.globl alt_irq_handler" ); + diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_license_reminder_ucosii.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_license_reminder_ucosii.h new file mode 100644 index 0000000..1d1f16f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_license_reminder_ucosii.h @@ -0,0 +1,77 @@ +#ifndef __ALT_LICENSE_REMINDER_UCOSII_H__ +#define __ALT_LICENSE_REMINDER_UCOSII_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include + +#define ALT_LICENSE_REMINDER_UCOSII_STRING \ + "============== Software License Reminder ===============\n" \ + "\n" \ + "uC/OS-II is provided in source form for FREE evaluation,\n" \ + "for educational use, or for peaceful research. If you\n" \ + "plan on using uC/OS-II in a commercial product you need\n" \ + "to contact Micrium to properly license its use in your\n" \ + "product. Micrium provides ALL the source code on the\n" \ + "Altera distribution for your convenience and to help you\n" \ + "experience uC/OS-II. The fact that the source is provided\n" \ + "does NOT mean that you can use it without paying a\n" \ + "licensing fee. Please help us continue to provide the\n" \ + "Embedded community with the finest software available.\n" \ + "Your honesty is greatly appreciated.\n" \ + "\n" \ + "Please contact:\n" \ + "\n" \ + "M I C R I U M\n" \ + "949 Crestview Circle\n" \ + "Weston, FL 33327-1848\n" \ + "U.S.A.\n" \ + "\n" \ + "Phone : +1 954 217 2036\n" \ + "FAX : +1 954 217 2037\n" \ + "WEB : www.micrium.com\n" \ + "E-mail: Sales@Micrium.com\n" \ + "\n" \ + "========================================================\n" + +#define alt_license_reminder_ucosii() puts(ALT_LICENSE_REMINDER_UCOSII_STRING) + + +#endif /* __ALT_LICENSE_REMINDER_UCOSII_H__ */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_llist.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_llist.h new file mode 100644 index 0000000..84cb051 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_llist.h @@ -0,0 +1,123 @@ +#ifndef __ALT_LIST_H__ +#define __ALT_LIST_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "alt_types.h" + +/* + * alt_llist.h defines structures and functions for use in manipulating linked + * lists. A list is considered to be constructed from a chain of objects of + * type alt_llist, with one object being defined to be the head element. + * + * A list is considered to be empty if it only contains the head element. + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * alt_llist is the structure used to represent an element within a linked + * list. + */ + +typedef struct alt_llist_s alt_llist; + +struct alt_llist_s { + alt_llist* next; /* Pointer to the next element in the list. */ + alt_llist* previous; /* Pointer to the previous element in the list. */ +}; + +/* + * ALT_LLIST_HEAD is a macro that can be used to create the head of a new + * linked list. This is named "head". The head element is initialised to + * represent an empty list. + */ + +#define ALT_LLIST_HEAD(head) alt_llist head = {&head, &head} + +/* + * ALT_LLIST_ENTRY is a macro used to define an uninitialised linked list + * entry. This is used to reserve space in structure initialisation for + * structures that inherit form alt_llist. + */ + +#define ALT_LLIST_ENTRY {0, 0} + +/* + * alt_llist_insert() insert adds the linked list entry "entry" as the + * first entry in the linked list "list". "list" is the list head element. + */ + +static ALT_INLINE void ALT_ALWAYS_INLINE alt_llist_insert(alt_llist* list, + alt_llist* entry) +{ + entry->previous = list; + entry->next = list->next; + + list->next->previous = entry; + list->next = entry; +} + +/* + * alt_llist_remove() is called to remove an element from a linked list. The + * 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; + entry->previous->next = entry->next; + + /* + * Set the entry to point to itself, so that any further calls to + * alt_llist_remove() are harmless. + */ + + entry->previous = entry; + entry->next = entry; +} + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_LLIST_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_load.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_load.h new file mode 100644 index 0000000..e4c4c46 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_load.h @@ -0,0 +1,78 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "alt_types.h" + +/* + * This macro is used to load code/data from its load address to its + * execution address for a given section. The section name is the input + * argument. Note that a leading '.' is assumed in the name. For example + * to load the section .onchip_ram, use: + * + * ALT_LOAD_SECTION_BY_NAME(onchip_ram); + * + * This requires that the apropriate linker symbols have been generated + * for the section in question. This will be the case if you are using the + * default linker script. + */ + +#define ALT_LOAD_SECTION_BY_NAME(name) \ + { \ + extern void _alt_partition_##name##_start; \ + extern void _alt_partition_##name##_end; \ + extern void _alt_partition_##name##_load_addr; \ + \ + alt_load_section(&_alt_partition_##name##_load_addr, \ + &_alt_partition_##name##_start, \ + &_alt_partition_##name##_end); \ + } + +/* + * Function used to load an individual section from flash to RAM. + * + * There is an implicit assumption here that the linker script will ensure + * that all sections are word aligned. + * + */ + +static void ALT_INLINE alt_load_section (alt_u32* from, + alt_u32* to, + alt_u32* end) +{ + if (to != from) + { + while( to != end ) + { + *to++ = *from++; + } + } +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_log_printf.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_log_printf.h new file mode 100644 index 0000000..1536d8f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_log_printf.h @@ -0,0 +1,354 @@ +/* alt_log_printf.h + * + * ALT_LOG is designed to provide extra logging/debugging messages from HAL + * through a different port than stdout. It is enabled by the ALT_LOG_ENABLE + * define, which needs to supplied at compile time. When logging is turned off, + * code size is unaffected. Thus, this should be transparent to the user + * when it is not actively turned on, and should not affect projects in any way. + * + * There are macros sprinkled within different components, such as the jtag uart + * and timer, in the HAL code. They are always named ALT_LOG_, and can be + * safely ignored if ALT_LOG is turned off. + * + * To turn on ALT_LOG, ALT_LOG_ENABLE must be defined, and ALT_LOG_PORT_TYPE and + * ALT_LOG_PORT_BASE must be set in system.h. This is done through editing + * .ptf, by editing the alt_log_port_type & alt_log_port_base settings. + * See the documentation html file for examples. + * + * When it is turned on, it will output extra HAL messages to a port specified + * in system.h. This can be a UART or JTAG UART port. By default it will + * output boot messages, detailing every step of the boot process. + * + * Extra logging is designed to be enabled by flags, which are defined in + * alt_log_printf.c. The default value is that all flags are off, so only the + * boot up logging messages show up. ALT_LOG_FLAGS can be set to enable certain + * groupings of flags, and that grouping is done in this file. Each flag can + * also be overridden with a -D at compile time. + * + * This header file includes the necessary prototypes for using the alt_log + * functions. It also contains all the macros that are used to remove the code + * from alt log is turned off. Also, the macros in other HAL files are defined + * here at the bottom. These macros all call some C function that is in + * alt_log_printf.c. + * + * The logging has functions for printing in C (ALT_LOG_PRINTF) and in assembly + * (ALT_LOG_PUTS). This was needed because the assembly printing occurs before + * the device is initialized. The assembly function corrupts register R4-R7, + * which are not used in the normal boot process. For this reason, do not call + * the assembly function in C. + * + * author: gkwan + */ + + +#ifndef __ALT_LOG_PRINTF_H__ +#define __ALT_LOG_PRINTF_H__ + +#include + +/* Global switch to turn on logging functions */ +#ifdef ALT_LOG_ENABLE + + /* ALT_LOG_PORT_TYPE values as defined in system.h. They are defined as + * numbers here first becasue the C preprocessor does not handle string + * comparisons. */ + #define ALTERA_AVALON_JTAG_UART 1 + #define ALTERA_AVALON_UART 0 + + /* If this .h file is included by an assembly file, skip over include files + * that won't compile in assembly. */ + #ifndef ALT_ASM_SRC + #include + #include "sys/alt_alarm.h" + #include "sys/alt_dev.h" + #ifdef __ALTERA_AVALON_JTAG_UART + #include "altera_avalon_jtag_uart.h" + #endif + #endif /* ALT_ASM_SRC */ + + /* These are included for the port register offsets and masks, needed + * to write to the port. Only include if the port type is set correctly, + * otherwise error. If alt_log is turned on and the port to output to is + * incorrect or does not exist, then should exit. */ + #if ALT_LOG_PORT_TYPE == ALTERA_AVALON_JTAG_UART + #ifdef __ALTERA_AVALON_JTAG_UART + #include + #else + #error ALT_LOG: JTAG_UART port chosen, but no JTAG_UART in system. + #endif + #elif ALT_LOG_PORT_TYPE == ALTERA_AVALON_UART + #ifdef __ALTERA_AVALON_UART + #include + #else + #error ALT_LOG: UART Port chosen, but no UART in system. + #endif + #else + #error ALT_LOG: alt_log_port_type declaration invalid! + #endif + + /* ALT_LOG_ENABLE turns on the basic printing function */ + #define ALT_LOG_PRINTF(...) do {alt_log_printf_proc(__VA_ARGS__);} while (0) + + /* Assembly macro for printing in assembly, calls tx_log_str + * which is in alt_log_macro.S. + * If alt_log_boot_on_flag is 0, skips the printing */ + #define ALT_LOG_PUTS(str) movhi r4, %hiadj(alt_log_boot_on_flag) ; \ + addi r4, r4, %lo(alt_log_boot_on_flag) ; \ + ldwio r5, 0(r4) ; \ + beq r0, r5, 0f ; \ + movhi r4, %hiadj(str) ; \ + addi r4, r4, %lo(str) ; \ + call tx_log_str ; \ + 0: + + /* These defines are here to faciliate the use of one output function + * (alt_log_txchar) to print to both the JTAG UART or the UART. Depending + * on the port type, the status register, read mask, and output register + * are set to the appropriate value for the port. */ + #if ALT_LOG_PORT_TYPE == ALTERA_AVALON_JTAG_UART + #define ALT_LOG_PRINT_REG_RD IORD_ALTERA_AVALON_JTAG_UART_CONTROL + #define ALT_LOG_PRINT_MSK ALTERA_AVALON_JTAG_UART_CONTROL_WSPACE_MSK + #define ALT_LOG_PRINT_TXDATA_WR IOWR_ALTERA_AVALON_JTAG_UART_DATA + #define ALT_LOG_PRINT_REG_OFFSET (ALTERA_AVALON_JTAG_UART_CONTROL_REG*0x4) + #define ALT_LOG_PRINT_TXDATA_REG_OFFSET (ALTERA_AVALON_JTAG_UART_DATA_REG*0x4) + #elif ALT_LOG_PORT_TYPE == ALTERA_AVALON_UART + #define ALT_LOG_PRINT_REG_RD IORD_ALTERA_AVALON_UART_STATUS + #define ALT_LOG_PRINT_MSK ALTERA_AVALON_UART_STATUS_TRDY_MSK + #define ALT_LOG_PRINT_TXDATA_WR IOWR_ALTERA_AVALON_UART_TXDATA + #define ALT_LOG_PRINT_REG_OFFSET (ALTERA_AVALON_UART_STATUS_REG*0x4) + #define ALT_LOG_PRINT_TXDATA_REG_OFFSET (ALTERA_AVALON_UART_TXDATA_REG*0x4) + #endif /* ALT_LOG_PORT */ + + /* Grouping of flags via ALT_LOG_FLAGS. Each specific flag can be set via + * -D at compile time, or else they'll be set to a default value according + * to ALT_LOG_FLAGS. ALT_LOG_FLAGS = 0 or not set is the default, where + * only the boot messages will be printed. As ALT_LOG_FLAGS increase, they + * increase in intrusiveness to the program, and will affect performance. + * + * Flag Level 1 - turns on system clock and JTAG UART startup status + * 2 - turns on write echo and JTAG_UART alarm (periodic report) + * 3 - turns on JTAG UART ISR logging - will slow performance + * significantly. + * -1 - All logging output is off, but if ALT_LOG_ENABLE is + * defined all logging function is built and code size + * remains constant + * + * Flag settings - 1 = on, 0 = off. */ + + /* This flag turns on "boot" messages for printing. This includes messages + * during crt0.S, then alt_main, and finally alt_exit. */ + #ifndef ALT_LOG_BOOT_ON_FLAG_SETTING + #if ALT_LOG_FLAGS == 1 + #define ALT_LOG_BOOT_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == 2 + #define ALT_LOG_BOOT_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == 3 + #define ALT_LOG_BOOT_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == -1 /* silent mode */ + #define ALT_LOG_BOOT_ON_FLAG_SETTING 0x0 + #else /* default setting */ + #define ALT_LOG_BOOT_ON_FLAG_SETTING 0x1 + #endif + #endif /* ALT_LOG_BOOT_ON_FLAG_SETTING */ + + #ifndef ALT_LOG_SYS_CLK_ON_FLAG_SETTING + #if ALT_LOG_FLAGS == 1 + #define ALT_LOG_SYS_CLK_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == 2 + #define ALT_LOG_SYS_CLK_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == 3 + #define ALT_LOG_SYS_CLK_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == -1 /* silent mode */ + #define ALT_LOG_SYS_CLK_ON_FLAG_SETTING 0x0 + #else /* default setting */ + #define ALT_LOG_SYS_CLK_ON_FLAG_SETTING 0x0 + #endif + #endif /* ALT_LOG_SYS_CLK_ON_FLAG_SETTING */ + + #ifndef ALT_LOG_WRITE_ON_FLAG_SETTING + #if ALT_LOG_FLAGS == 1 + #define ALT_LOG_WRITE_ON_FLAG_SETTING 0x0 + #elif ALT_LOG_FLAGS == 2 + #define ALT_LOG_WRITE_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == 3 + #define ALT_LOG_WRITE_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == -1 /* silent mode */ + #define ALT_LOG_WRITE_ON_FLAG_SETTING 0x0 + #else /* default setting */ + #define ALT_LOG_WRITE_ON_FLAG_SETTING 0x0 + #endif + #endif /* ALT_LOG_WRITE_ON_FLAG_SETTING */ + + #ifndef ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING + #ifndef __ALTERA_AVALON_JTAG_UART + #define ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING 0x0 + #elif ALT_LOG_FLAGS == 1 + #define ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING 0x0 + #elif ALT_LOG_FLAGS == 2 + #define ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == 3 + #define ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == -1 /* silent mode */ + #define ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING 0x0 + #else /* default setting */ + #define ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING 0x0 + #endif + #endif /* ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING */ + + #ifndef ALT_LOG_JTAG_UART_STARTUP_INFO_ON_FLAG_SETTING + #ifndef __ALTERA_AVALON_JTAG_UART + #define ALT_LOG_JTAG_UART_STARTUP_INFO_ON_FLAG_SETTING 0x0 + #elif ALT_LOG_FLAGS == 1 + #define ALT_LOG_JTAG_UART_STARTUP_INFO_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == 2 + #define ALT_LOG_JTAG_UART_STARTUP_INFO_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == 3 + #define ALT_LOG_JTAG_UART_STARTUP_INFO_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == -1 /* silent mode */ + #define ALT_LOG_JTAG_UART_STARTUP_INFO_ON_FLAG_SETTING 0x0 + #else /* default setting */ + #define ALT_LOG_JTAG_UART_STARTUP_INFO_ON_FLAG_SETTING 0x0 + #endif + #endif /* ALT_LOG_JTAG_UART_STARTUP_INFO_FLAG_SETTING */ + + #ifndef ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING + #ifndef __ALTERA_AVALON_JTAG_UART + #define ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING 0x0 + #elif ALT_LOG_FLAGS == 1 + #define ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING 0x0 + #elif ALT_LOG_FLAGS == 2 + #define ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING 0x0 + #elif ALT_LOG_FLAGS == 3 + #define ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING 0x1 + #elif ALT_LOG_FLAGS == -1 /* silent mode */ + #define ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING 0x0 + #else /* default setting */ + #define ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING 0x0 + #endif + #endif /* ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING */ + +#ifndef ALT_ASM_SRC + /* Function Prototypes */ + void alt_log_txchar(int c,char *uartBase); + void alt_log_private_printf(const char *fmt,int base,va_list args); + void alt_log_repchar(char c,int r,int base); + int alt_log_printf_proc(const char *fmt, ... ); + void alt_log_system_clock(); + #ifdef __ALTERA_AVALON_JTAG_UART + alt_u32 altera_avalon_jtag_uart_report_log(void * context); + void alt_log_jtag_uart_startup_info(altera_avalon_jtag_uart_state* dev, int base); + void alt_log_jtag_uart_print_control_reg(altera_avalon_jtag_uart_state* dev, \ + int base, const char* header); + void alt_log_jtag_uart_isr_proc(int base, altera_avalon_jtag_uart_state* dev); + #endif + void alt_log_write(const void *ptr, size_t len); + + /* extern all global variables */ + /* CASE:368514 - The boot message flag is linked into the sdata section + * because if it is zero, it would otherwise be placed in the bss section. + * alt_log examines this variable before the BSS is cleared in the boot-up + * process. + */ + extern volatile alt_u32 alt_log_boot_on_flag __attribute__ ((section (".sdata"))); + extern volatile alt_u8 alt_log_write_on_flag; + extern volatile alt_u8 alt_log_sys_clk_on_flag; + extern volatile alt_u8 alt_log_jtag_uart_alarm_on_flag; + extern volatile alt_u8 alt_log_jtag_uart_isr_on_flag; + extern volatile alt_u8 alt_log_jtag_uart_startup_info_on_flag; + extern volatile int alt_log_sys_clk_count; + extern volatile int alt_system_clock_in_sec; + extern alt_alarm alt_log_jtag_uart_alarm_1; +#endif /* ALT_ASM_SRC */ + + + /* Below are the MACRO defines used in various HAL files. They check + * if their specific flag is turned on; if it is, then it executes its + * code. + * + * To keep this file reasonable, most of these macros calls functions, + * which are defined in alt_log_printf.c. Look there for implementation + * details. */ + + /* Boot Messages Logging */ + #define ALT_LOG_PRINT_BOOT(...) \ + do { if (alt_log_boot_on_flag==1) {ALT_LOG_PRINTF(__VA_ARGS__);} \ + } while (0) + + /* JTAG UART Logging */ + /* number of ticks before alarm runs logging function */ + #ifndef ALT_LOG_JTAG_UART_TICKS_DIVISOR + #define ALT_LOG_JTAG_UART_TICKS_DIVISOR 10 + #endif + #ifndef ALT_LOG_JTAG_UART_TICKS + #define ALT_LOG_JTAG_UART_TICKS \ + (alt_ticks_per_second()/ALT_LOG_JTAG_UART_TICKS_DIVISOR) + #endif + + /* if there's a JTAG UART defined, then enable these macros */ + #ifdef __ALTERA_AVALON_JTAG_UART + + /* Macro in altera_avalon_jtag_uart.c, to register the alarm function. + * Also, the startup register info is also printed here, as this is + * called within the device driver initialization. */ + #define ALT_LOG_JTAG_UART_ALARM_REGISTER(dev, base) \ + do { if (alt_log_jtag_uart_alarm_on_flag==1) { \ + alt_alarm_start(&alt_log_jtag_uart_alarm_1, \ + ALT_LOG_JTAG_UART_TICKS, &altera_avalon_jtag_uart_report_log,\ + dev);} \ + if (alt_log_jtag_uart_startup_info_on_flag==1) {\ + alt_log_jtag_uart_startup_info(dev, base);} \ + } while (0) + + /* JTAG UART IRQ Logging (when buffer is empty) + * Inserted in the ISR in altera_avalon_jtag_uart.c */ + #define ALT_LOG_JTAG_UART_ISR_FUNCTION(base, dev) \ + do { alt_log_jtag_uart_isr_proc(base, dev); } while (0) + /* else, define macros to nothing. Or else the jtag_uart specific types + * will throw compiler errors */ + #else + #define ALT_LOG_JTAG_UART_ALARM_REGISTER(dev, base) + #define ALT_LOG_JTAG_UART_ISR_FUNCTION(base, dev) + #endif + + /* System clock logging + * How often (in seconds) the system clock logging prints. + * The default value is every 1 second */ + #ifndef ALT_LOG_SYS_CLK_INTERVAL_MULTIPLIER + #define ALT_LOG_SYS_CLK_INTERVAL_MULTIPLIER 1 + #endif + #ifndef ALT_LOG_SYS_CLK_INTERVAL + #define ALT_LOG_SYS_CLK_INTERVAL \ + (alt_ticks_per_second()*ALT_LOG_SYS_CLK_INTERVAL_MULTIPLIER) + #endif + + /* System clock logging - prints a message every interval (set above) + * to show that the system clock is alive. + * This macro is used in altera_avalon_timer_sc.c */ + #define ALT_LOG_SYS_CLK_HEARTBEAT() \ + do { alt_log_system_clock(); } while (0) + + /* alt_write_logging - echos a message every time write() is called, + * displays the first ALT_LOG_WRITE_ECHO_LEN characters. + * This macro is used in alt_write.c */ + #ifndef ALT_LOG_WRITE_ECHO_LEN + #define ALT_LOG_WRITE_ECHO_LEN 15 + #endif + + #define ALT_LOG_WRITE_FUNCTION(ptr,len) \ + do { alt_log_write(ptr,len); } while (0) + +#else /* ALT_LOG_ENABLE not defined */ + + /* logging is off, set all relevant macros to null */ + #define ALT_LOG_PRINT_BOOT(...) + #define ALT_LOG_PRINTF(...) + #define ALT_LOG_JTAG_UART_ISR_FUNCTION(base, dev) + #define ALT_LOG_JTAG_UART_ALARM_REGISTER(dev, base) + #define ALT_LOG_SYS_CLK_HEARTBEAT() + #define ALT_LOG_PUTS(str) + #define ALT_LOG_WRITE_FUNCTION(ptr,len) + +#endif /* ALT_LOG_ENABLE */ + +#endif /* __ALT_LOG_PRINTF_H__ */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_set_args.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_set_args.h new file mode 100644 index 0000000..a9372c5 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_set_args.h @@ -0,0 +1,71 @@ +#ifndef __ALT_SET_ARGS_H__ +#define __ALT_SET_ARGS_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * The function alt_set_args() is provided in order to define the input + * arguments to main(). If this function is not called before main() then the + * argument list passed to main() will be empty. + * + * It is expected that this function will only be used by the ihost/iclient + * utility. + */ + +static inline void alt_set_args (int argc, char** argv, char** envp) +{ + extern int alt_argc; + extern char** alt_argv; + extern char** alt_envp; + + alt_argc = argc; + alt_argv = argv; + alt_envp = envp; +} + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_SET_ARGS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sim.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sim.h new file mode 100644 index 0000000..b41da40 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sim.h @@ -0,0 +1,91 @@ +#ifndef __ALT_SIM_H__ +#define __ALT_SIM_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ +#include "system.h" +#include "alt_types.h" + +/* + * Instructions that might mean something special to a simulator. + * These have no special effect on real hardware (they are just nops). + */ +#define ALT_SIM_FAIL() \ + do { __asm volatile ("cmpltui r0, r0, 0xabc1"); } while (0) + +#define ALT_SIM_PASS() \ + do { __asm volatile ("cmpltui r0, r0, 0xabc2"); } while (0) + +#define ALT_SIM_IN_TOP_OF_HOT_LOOP() \ + do { __asm volatile ("cmpltui r0, r0, 0xabc3"); } while (0) + +/* + * Routine called on exit. + */ +static ALT_INLINE ALT_ALWAYS_INLINE void alt_sim_halt(int exit_code) +{ + register int r2 asm ("r2") = exit_code; + +#if defined(NIOS2_HAS_DEBUG_STUB) && (defined(ALT_BREAK_ON_EXIT) || defined(ALT_PROVIDE_GMON)) + + register int r3 asm ("r3") = (1 << 2); + +#ifdef ALT_PROVIDE_GMON + extern unsigned int alt_gmon_data[]; + register int r4 asm ("r4") = (int)alt_gmon_data; + r3 |= (1 << 4); +#define ALT_GMON_DATA ,"r"(r4) +#else +#define ALT_GMON_DATA +#endif /* ALT_PROVIDE_GMON */ + + if (r2) { + ALT_SIM_FAIL(); + } else { + ALT_SIM_PASS(); + } + + __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) { + ALT_SIM_FAIL(); + } else { + ALT_SIM_PASS(); + } +#endif /* DEBUG_STUB */ +} + +#define ALT_SIM_HALT(exit_code) \ + alt_sim_halt(exit_code) + +#endif /* __ALT_SIM_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stack.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stack.h new file mode 100644 index 0000000..ebcad7a --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stack.h @@ -0,0 +1,126 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALT_STACK_H__ +#define __ALT_STACK_H__ + +/* + * alt_stack.h is the nios2 specific implementation of functions used by the + * stack overflow code. + */ + +#include "nios2.h" + +#include "alt_types.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +extern char * alt_stack_limit_value; + +#ifdef ALT_EXCEPTION_STACK +extern char __alt_exception_stack_pointer[]; /* set by the linker */ +#endif /* ALT_EXCEPTION_STACK */ + + +/* + * alt_stack_limit can be called to determine the current value of the stack + * limit register. + */ + +static ALT_INLINE char * ALT_ALWAYS_INLINE alt_stack_limit (void) +{ + char * limit; + NIOS2_READ_ET(limit); + + return limit; +} + +/* + * alt_stack_pointer can be called to determine the current value of the stack + * pointer register. + */ + +static ALT_INLINE char * ALT_ALWAYS_INLINE alt_stack_pointer (void) +{ + char * pointer; + NIOS2_READ_SP(pointer); + + return pointer; +} + + +#ifdef ALT_EXCEPTION_STACK + +/* + * alt_exception_stack_pointer returns the normal stack pointer from + * where it is stored on the exception stack (uppermost 4 bytes). This + * is really only useful during exception processing, and is only + * available if a separate exception stack has been configured. + */ + +static ALT_INLINE char * ALT_ALWAYS_INLINE alt_exception_stack_pointer (void) +{ + return (char *) *(alt_u32 *)(__alt_exception_stack_pointer - sizeof(alt_u32)); +} + +#endif /* ALT_EXCEPTION_STACK */ + + +/* + * alt_set_stack_limit can be called to update the current value of the stack + * limit register. + */ + +static ALT_INLINE void ALT_ALWAYS_INLINE alt_set_stack_limit (char * limit) +{ + alt_stack_limit_value = limit; + NIOS2_WRITE_ET(limit); +} + +/* + * alt_report_stack_overflow reports that a stack overflow happened. + */ + +static ALT_INLINE void ALT_ALWAYS_INLINE alt_report_stack_overflow (void) +{ + NIOS2_REPORT_STACK_OVERFLOW(); +} + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_STACK_H__ */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stdio.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stdio.h new file mode 100644 index 0000000..a3d1f48 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_stdio.h @@ -0,0 +1,66 @@ +#ifndef __ALT_STDIO_H__ +#define __ALT_STDIO_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +/* + * Definitions for ALT stdio routines. + */ + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +int alt_getchar(); +int alt_putchar(int c); +int alt_putstr(const char* str); +void alt_printf(const char *fmt, ...); +#ifdef ALT_SEMIHOSTING +int alt_putcharbuf(int c); +int alt_putstrbuf(const char* str); +int alt_putbufflush(); +#endif +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_STDIO_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sys_init.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sys_init.h new file mode 100644 index 0000000..3b18059 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sys_init.h @@ -0,0 +1,62 @@ +#ifndef __ALT_SYS_INIT_H__ +#define __ALT_SYS_INIT_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * The function alt_sys_init() is defined within the auto-generated file: + * alt_sys_init.c. This function calls the initilisation macros for all + * devices, file systems, and software components within the system. + * + * The list of initilisation macros to use is constructed using the PTF and + * STF files associated with the system. + */ + +extern void alt_sys_init (void); + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_SYS_INIT_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sys_wrappers.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sys_wrappers.h new file mode 100644 index 0000000..eea552d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_sys_wrappers.h @@ -0,0 +1,100 @@ +#ifndef __ALT_SYS_WRAPPERS_H__ +#define __ALT_SYS_WRAPPERS_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * This file provides the prototypes for the HAL 'UNIX style functions. The + * names of these functions are defined in alt_syscall.h. THese are defined to + * be the standard names when running the standalone HAL, e.g. open(), close() + * etc., but the names may be redefined as a part of an operating system port + * in order to avoid name clashes. + */ + +#include "os/alt_syscall.h" + +#include +#include +#include +#include +#include +#include + +extern int ALT_CLOSE (int __fd); +extern int ALT_EXECVE (const char *__path, + char * const __argv[], + char * const __envp[]); +extern void ALT_EXIT (int __status); +extern int ALT_FSTAT (int file, struct stat *st); +extern int ALT_FCNTL (int file, int cmd, ...); +extern pid_t ALT_FORK (void); +extern pid_t ALT_GETPID (void); + +#if defined (__GNUC__) && __GNUC__ >= 4 +extern int ALT_GETTIMEOFDAY (struct timeval *ptimeval, + void *ptimezone); +#else +extern int ALT_GETTIMEOFDAY (struct timeval *ptimeval, + struct timezone *ptimezone); +#endif + +extern int ALT_IOCTL (int file, int req, void* arg); +extern int ALT_ISATTY (int file); +extern int ALT_KILL (int pid, int sig); +extern int ALT_LINK (const char *existing, const char *new); +extern off_t ALT_LSEEK (int file, off_t ptr, int dir); +extern int ALT_OPEN (const char* file, int flags, ...); +extern int ALT_READ (int file, void *ptr, size_t len); +extern int ALT_RENAME (char *existing, char *new); +extern void* ALT_SBRK (ptrdiff_t incr); +extern int ALT_SETTIMEOFDAY (const struct timeval *t, + const struct timezone *tz); +extern int ALT_STAT (const char *file, struct stat *st); +extern clock_t ALT_TIMES (struct tms *buf); +extern int ALT_UNLINK (const char *name); + +#if defined (__GNUC__) && __GNUC__ >= 4 +int ALT_USLEEP (useconds_t us); +#else +unsigned int ALT_USLEEP (unsigned int us); +#endif + +extern int ALT_WAIT (int *status); +extern int ALT_WRITE (int file, const void *ptr, size_t len); + + +extern char** ALT_ENVIRON; + +/* + * + */ + +#endif /* __ALT_SYS_WRAPPERS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_timestamp.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_timestamp.h new file mode 100644 index 0000000..ec704ba --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_timestamp.h @@ -0,0 +1,60 @@ +#ifndef __ALT_TIMESTAMP_H__ +#define __ALT_TIMESTAMP_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#include "alt_types.h" +#include "altera_avalon_timer.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +extern int alt_timestamp_start (void); + +extern alt_timestamp_type alt_timestamp (void); + +extern alt_u32 alt_timestamp_freq (void); + +#ifdef __cplusplus +} +#endif + +#endif /* __ALT_TIMESTAMP_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_warning.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_warning.h new file mode 100644 index 0000000..01318bd --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/alt_warning.h @@ -0,0 +1,75 @@ +#ifndef __WARNING_H__ +#define __WARNING_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * alt_warning.h provides macro definitions that can be used to generate link + * time warnings. + */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * The symbol "__alt_invalid" is used to force a link error. There should be + * no corresponding implementation of this function. + */ + +extern void __alt_invalid (void); + +#define ALT_LINK_WARNING(symbol, msg) \ + __asm__(".ifndef __evoke_link_warning_" #symbol \ + "\n\t .section .gnu.warning." #symbol \ + "\n__evoke_link_warning_" #symbol ":\n\t .string \x22" msg "\x22 \n\t .previous" \ + "\n .endif"); + +/* A canned warning for sysdeps/stub functions. */ + +#define ALT_STUB_WARNING(name) \ + ALT_LINK_WARNING (name, \ + "warning: " #name " is not implemented and will always fail") + +#define ALT_OBSOLETE_FUNCTION_WARNING(name) \ + ALT_LINK_WARNING (name, \ + "warning: " #name " is a deprecated function") + +#define ALT_LINK_ERROR(msg) \ + ALT_LINK_WARNING (__alt_invalid, msg); \ + __alt_invalid() + +#ifdef __cplusplus +} +#endif + +#endif /* __WARNING_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/ioctl.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/ioctl.h new file mode 100644 index 0000000..453283b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/ioctl.h @@ -0,0 +1,90 @@ +#ifndef __IOCTL_H__ +#define __IOCTL_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * The ioctl() system call be used to initiate a variety of control operations + * on a file descriptor. For the most part this simply translates to a call to + * the ioctl() function of the associated device driver (TIOCEXCL and + * TIOCNXCL are notable exceptions - see ioctl.c for details). + * + * The interpretation of the ioctl requests are therefore device specific. + * + * This function is equivalent to the standard Posix ioctl() call. + */ + +extern int ioctl (int fd, int req, void* arg); + +/* + * list of ioctl calls handled by the system ioctl implementation. + */ + +#define TIOCEXCL 0x740d /* exclusive use of the device */ +#define TIOCNXCL 0x740e /* allow multiple use of the device */ + +/* + * ioctl calls which can be handled by device drivers. + */ + +#define TIOCOUTQ 0x7472 /* get output queue size */ +#define TIOCMGET 0x741d /* get termios flags */ +#define TIOCMSET 0x741a /* set termios flags */ + +/* + * ioctl calls specific to JTAG UART. + */ + +#define TIOCSTIMEOUT 0x6a01 /* Set Timeout before assuming no host present */ +#define TIOCGCONNECTED 0x6a02 /* Get indication of whether host is connected */ + +/* + * + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __IOCTL_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/inc/sys/termios.h b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/termios.h new file mode 100644 index 0000000..d271387 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/inc/sys/termios.h @@ -0,0 +1,181 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT. * +* * +******************************************************************************/ + +/* + * This is the termios.h file provided with newlib. The only modification has + * been to the baud rate macro definitions, and an increase in the size of the + * termios structure to accomodate this. + */ + + +#ifndef _SYS_TERMIOS_H +# define _SYS_TERMIOS_H + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +# define _XCGETA (('x'<<8)|1) +# define _XCSETA (('x'<<8)|2) +# define _XCSETAW (('x'<<8)|3) +# define _XCSETAF (('x'<<8)|4) +# define _TCSBRK (('T'<<8)|5) +# define _TCFLSH (('T'<<8)|7) +# define _TCXONC (('T'<<8)|6) + +# define TCOOFF 0 +# define TCOON 1 +# define TCIOFF 2 +# define TCION 3 + +# define TCIFLUSH 0 +# define TCOFLUSH 1 +# define TCIOFLUSH 2 + +# define NCCS 13 + +# define TCSAFLUSH _XCSETAF +# define TCSANOW _XCSETA +# define TCSADRAIN _XCSETAW +# define TCSADFLUSH _XCSETAF + +# define IGNBRK 000001 +# define BRKINT 000002 +# define IGNPAR 000004 +# define INPCK 000020 +# define ISTRIP 000040 +# define INLCR 000100 +# define IGNCR 000200 +# define ICRNL 000400 +# define IXON 002000 +# define IXOFF 010000 + +# define OPOST 000001 +# define OCRNL 000004 +# define ONLCR 000010 +# define ONOCR 000020 +# define TAB3 014000 + +# define CLOCAL 004000 +# define CREAD 000200 +# define CSIZE 000060 +# define CS5 0 +# define CS6 020 +# define CS7 040 +# define CS8 060 +# define CSTOPB 000100 +# define HUPCL 002000 +# define PARENB 000400 +# define PAODD 001000 + +#define CCTS_OFLOW 010000 +#define CRTS_IFLOW 020000 +#define CRTSCTS (CCTS_OFLOW | CRTS_IFLOW) + +# define ECHO 0000010 +# define ECHOE 0000020 +# define ECHOK 0000040 +# define ECHONL 0000100 +# define ICANON 0000002 +# define IEXTEN 0000400 /* anybody know *what* this does?! */ +# define ISIG 0000001 +# define NOFLSH 0000200 +# define TOSTOP 0001000 + +# define VEOF 4 /* also VMIN -- thanks, AT&T */ +# define VEOL 5 /* also VTIME -- thanks again */ +# define VERASE 2 +# define VINTR 0 +# define VKILL 3 +# define VMIN 4 /* also VEOF */ +# define VQUIT 1 +# define VSUSP 10 +# define VTIME 5 /* also VEOL */ +# define VSTART 11 +# define VSTOP 12 + +# define B0 0 +# define B50 50 +# define B75 75 +# define B110 110 +# define B134 134 +# define B150 150 +# define B200 200 +# define B300 300 +# define B600 600 +# define B1200 1200 +# define B1800 1800 +# define B2400 2400 +# define B4800 4800 +# define B9600 9600 +# define B19200 19200 +# define B38400 38400 +# define B57600 57600 +# define B115200 115200 + +typedef unsigned char cc_t; +typedef unsigned short tcflag_t; +typedef unsigned long speed_t; + +struct termios { + tcflag_t c_iflag; + tcflag_t c_oflag; + tcflag_t c_cflag; + tcflag_t c_lflag; + char c_line; + cc_t c_cc[NCCS]; + speed_t c_ispeed; + speed_t c_ospeed; +}; + +# ifndef _NO_MACROS + +# define cfgetospeed(tp) ((tp)->c_ospeed) +# define cfgetispeed(tp) ((tp)->c_ispeed) +# define cfsetospeed(tp,s) (((tp)->c_ospeed = (s)), 0) +# define cfsetispeed(tp,s) (((tp)->c_ispeed = (s)), 0) +# define tcdrain(fd) _ioctl (fd, _TCSBRK, 1) +# endif /* _NO_MACROS */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_TERMIOS_H */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_alarm_start.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_alarm_start.c new file mode 100644 index 0000000..2bd672f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_alarm_start.c @@ -0,0 +1,112 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "sys/alt_alarm.h" +#include "sys/alt_irq.h" + +/* + * alt_alarm_start is called to register an alarm with the system. The + * "alarm" structure passed as an input argument does not need to be + * initialised by the user. This is done within this function. + * + * The remaining input arguments are: + * + * nticks - The time to elapse until the alarm executes. This is specified in + * system clock ticks. + * callback - The function to run when the indicated time has elapsed. + * context - An opaque value, passed to the callback function. +* + * Care should be taken when defining the callback function since it is + * likely to execute in interrupt context. In particular, this mean that + * library calls like printf() should not be made, since they can result in + * deadlock. + * + * The interval to be used for the next callback is the return + * value from the callback function. A return value of zero indicates that the + * alarm should be unregistered. + * + * alt_alarm_start() will fail if the timer facility has not been enabled + * (i.e. there is no system clock). Failure is indicated by a negative return + * value. + */ + +int alt_alarm_start (alt_alarm* alarm, alt_u32 nticks, + alt_u32 (*callback) (void* context), + void* context) +{ + alt_irq_context irq_context; + alt_u32 current_nticks = 0; + + if (alt_ticks_per_second ()) + { + if (alarm) + { + alarm->callback = callback; + alarm->context = context; + + irq_context = alt_irq_disable_all (); + + current_nticks = alt_nticks(); + + alarm->time = nticks + current_nticks + 1; + + /* + * 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 < current_nticks) + { + alarm->rollover = 1; + } + else + { + alarm->rollover = 0; + } + + alt_llist_insert (&alt_alarm_list, &alarm->llist); + alt_irq_enable_all (irq_context); + + return 0; + } + else + { + return -EINVAL; + } + } + else + { + return -ENOTSUP; + } +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_busy_sleep.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_busy_sleep.c new file mode 100644 index 0000000..1b910a5 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_busy_sleep.c @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2003-2004 Altera Corporation, San Jose, California, USA. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * ------------ + * + * Altera does not recommend, suggest or require that this reference design + * file be used in conjunction or combination with any other product. + * + * alt_busy_sleep.c - Microsecond delay routine which uses a calibrated busy + * loop to perform the delay. This is used to implement + * usleep for both uC/OS-II and the standalone HAL. + * + * Author PRR + * + * Calibrated delay with no timer required + * + * The ASM instructions in the routine are equivalent to + * + * for (i=0;i +#include + +#include "system.h" +#include "alt_types.h" + +#include "priv/alt_busy_sleep.h" + +unsigned int alt_busy_sleep (unsigned int us) +{ +/* + * Only delay if ALT_SIM_OPTIMIZE is not defined; i.e., if software + * is built targetting ModelSim RTL simulation, the delay will be + * skipped to speed up simulation. + */ +#ifndef ALT_SIM_OPTIMIZE + int i; + int big_loops; + alt_u32 cycles_per_loop; + + if (!strcmp(NIOS2_CPU_IMPLEMENTATION,"tiny")) + { + cycles_per_loop = 9; + } + else + { + cycles_per_loop = 3; + } + + + big_loops = us / (INT_MAX/ + (ALT_CPU_FREQ/(cycles_per_loop * 1000000))); + + if (big_loops) + { + for(i=0;i + +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "priv/alt_file.h" +#include "os/alt_syscall.h" + +#ifdef ALT_USE_DIRECT_DRIVERS + +int ALT_CLOSE (int fildes) +{ + /* Generate a link time warning, should this function ever be called. */ + + ALT_STUB_WARNING(close); + + /* Indicate an error */ + + ALT_ERRNO = ENOSYS; + return -1; +} + +#else /* !ALT_USE_DIRECT_DRIVERS */ + +/* + * close() is called by an application to release a file descriptor. If the + * associated file system/device has a close() callback function registered + * then this called. The file descriptor is then marked as free. + * + * ALT_CLOSE is mapped onto the close() system call in alt_syscall.h + */ + +int ALT_CLOSE (int fildes) +{ + alt_fd* fd; + int rval; + + /* + * 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]; + + if (fd) + { + /* + * 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; + + /* Free the file descriptor structure and return. */ + + alt_release_fd (fildes); + if (rval < 0) + { + ALT_ERRNO = -rval; + return -1; + } + return 0; + } + else + { + ALT_ERRNO = EBADFD; + return -1; + } +} + +#endif /* ALT_USE_DIRECT_DRIVERS */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush.c new file mode 100644 index 0000000..4326634 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush.c @@ -0,0 +1,70 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "nios2.h" +#include "system.h" + +#include "alt_types.h" +#include "sys/alt_cache.h" + +#define ALT_FLUSH_DATA(i) __asm__ volatile ("flushda (%0)" :: "r" (i)); + +/* + * alt_dcache_flush() is called to flush the data cache for a memory + * region of length "len" bytes, starting at address "start". + * + * Any dirty lines in the data cache are written back to memory. + */ + +void alt_dcache_flush (void* start, alt_u32 len) +{ +#if NIOS2_DCACHE_SIZE > 0 + + char* i; + char* end = ((char*) start) + len; + + for (i = start; i < end; i+= NIOS2_DCACHE_LINE_SIZE) + { + ALT_FLUSH_DATA(i); + } + + /* + * 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)) + { + ALT_FLUSH_DATA(i); + } + +#endif /* NIOS2_DCACHE_SIZE > 0 */ +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush_all.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush_all.c new file mode 100644 index 0000000..80735b7 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush_all.c @@ -0,0 +1,51 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "nios2.h" +#include "system.h" + +#include "alt_types.h" +#include "sys/alt_cache.h" + +/* + * alt_dcache_flush_all() is called to flush the entire data cache. + */ + +void alt_dcache_flush_all (void) +{ +#if NIOS2_DCACHE_SIZE > 0 + char* i; + + for (i = (char*) 0; i < (char*) NIOS2_DCACHE_SIZE; i+= NIOS2_DCACHE_LINE_SIZE) + { + __asm__ volatile ("flushd (%0)" :: "r" (i)); + } +#endif /* NIOS2_DCACHE_SIZE > 0 */ +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush_no_writeback.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush_no_writeback.c new file mode 100644 index 0000000..76b1618 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dcache_flush_no_writeback.c @@ -0,0 +1,69 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "nios2.h" +#include "system.h" + +#include "alt_types.h" +#include "sys/alt_cache.h" + +#define ALT_FLUSH_DATA_NO_WRITEBACK(i) \ + __asm__ volatile ("initda (%0)" :: "r" (i)); + +/* + * alt_dcache_flush_no_writeback() is called to flush the data cache for a + * memory region of length "len" bytes, starting at address "start". + * + * Any dirty lines in the data cache are NOT written back to memory. + * Make sure you really want this behavior. If you aren't 100% sure, + * use the alt_dcache_flush() routine instead. + */ + +void alt_dcache_flush_no_writeback (void* start, alt_u32 len) +{ + char* i; + char* end = ((char*) start) + len; + + for (i = start; i < end; i+= NIOS2_DCACHE_LINE_SIZE) + { + ALT_FLUSH_DATA_NO_WRITEBACK(i); + } + + /* + * 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)) + { + ALT_FLUSH_DATA_NO_WRITEBACK(i); + } +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_dev.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dev.c new file mode 100644 index 0000000..92f3f2a --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dev.c @@ -0,0 +1,149 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include +#include +#include +#include + +#include "sys/alt_dev.h" +#include "priv/alt_file.h" + +#include "alt_types.h" + +#include "system.h" + +/* + * This file contains the data constructs used to control access to device and + * filesytems. + */ + +/* + * "alt_fs_list" is the head of a linked list of registered filesystems. It is + * initialised as an empty list. New entries can be added using the + * alt_fs_reg() function. + */ + +ALT_LLIST_HEAD(alt_fs_list); + + +/* + * "alt_dev_list" is the head of a linked list of registered devices. It is + * configured at startup to include a single device, "alt_dev_null". This + * device is discussed below. + */ + +extern alt_dev alt_dev_null; /* forward declaration */ + +alt_llist alt_dev_list = {&alt_dev_null.llist, &alt_dev_null.llist}; + +/* + * alt_dev_null_write() is the implementation of the write() function used + * 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) +{ + return len; +} + +/* + * "alt_dev_null" is used to allow output to be redirected to nowhere. It is + * the only device registered before the call to alt_sys_init(). At startup + * stin, stdout & stderr are all directed towards this device so that library + * calls like printf() will be safe but inefectual. + */ + +alt_dev alt_dev_null = { + { + &alt_dev_list, + &alt_dev_list + }, + "/dev/null", + NULL, /* open */ + NULL, /* close */ + NULL, /* write */ + alt_dev_null_write, /* write */ + NULL, /* lseek */ + NULL, /* fstat */ + NULL /* ioctl */ + }; + +/* + * "alt_fd_list_lock" is a semaphore used to control access to the file + * descriptor list. This is used to ensure that access to the list is thread + * safe. + */ + +ALT_SEM(alt_fd_list_lock) + +/* + * "alt_max_fd" is used to make access to the file descriptor list more + * efficent. It is set to be the value of the highest allocated file + * descriptor. This saves having to search the entire pool of unallocated + * file descriptors when looking for a match. + */ + +alt_32 alt_max_fd = -1; + +/* + * "alt_fd_list" is the file descriptor pool. The first three entries in the + * array are configured as standard in, standard out, and standard error. These + * are all initialised so that accesses are directed to the alt_dev_null + * device. The remaining file descriptors are initialised as unallocated. + * + * The maximum number of file descriptors within the system is specified by the + * user defined macro "ALT_MAX_FD". This is defined in "system.h", which is + * auto-genereated using the projects PTF and STF files. + */ + +alt_fd alt_fd_list[ALT_MAX_FD] = + { + { + &alt_dev_null, /* standard in */ + 0, + 0 + }, + { + &alt_dev_null, /* standard out */ + 0, + 0 + }, + { + &alt_dev_null, /* standard error */ + 0, + 0 + } + /* all other elements are set to zero */ + }; diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_dev_llist_insert.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dev_llist_insert.c new file mode 100644 index 0000000..5e8a952 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dev_llist_insert.c @@ -0,0 +1,59 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "priv/alt_dev_llist.h" +#include "sys/alt_errno.h" + +/* + * + */ + +int alt_dev_llist_insert (alt_dev_llist* dev, alt_llist* list) +{ + /* + * check that the device exists, and that it has a valid name. + */ + + if (!dev || !dev->name) + { + ALT_ERRNO = EINVAL; + return -EINVAL; + } + + /* + * register the device. + */ + + alt_llist_insert(list, &dev->llist); + + return 0; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_dma_rxchan_open.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dma_rxchan_open.c new file mode 100644 index 0000000..5d461d9 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dma_rxchan_open.c @@ -0,0 +1,63 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_dma.h" +#include "sys/alt_errno.h" +#include "priv/alt_file.h" + +/* + * The list of registered DMA receive channels. + */ + +ALT_LLIST_HEAD(alt_dma_rxchan_list); + +/* + * alt_dma_txchan_open() is used to obtain an "alt_dma_txchan" descriptor for + * a DMA transmit device. The name is the name of the associated physical + * device (e.g. "/dev/dma_0"). + * + * The return value will be NULL on failure, and non-NULL otherwise. + */ + +alt_dma_rxchan alt_dma_rxchan_open (const char* name) +{ + alt_dma_rxchan dev; + + dev = (alt_dma_rxchan) alt_find_dev (name, &alt_dma_rxchan_list); + + if (!dev) + { + ALT_ERRNO = ENODEV; + } + + return dev; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_dma_txchan_open.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dma_txchan_open.c new file mode 100644 index 0000000..99f9181 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_dma_txchan_open.c @@ -0,0 +1,63 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_dma.h" +#include "sys/alt_errno.h" +#include "priv/alt_file.h" + +/* + * The list of registered receive channels. + */ + +ALT_LLIST_HEAD(alt_dma_txchan_list); + +/* + * alt_dma_txchan_open() is used to obtain an "alt_dma_txchan" descriptor for + * a DMA transmit device. The name is the name of the associated physical + * device (e.g. "/dev/dma_0"). + * + * The return value will be NULL on failure, and non-NULL otherwise. + */ + +alt_dma_txchan alt_dma_txchan_open (const char* name) +{ + alt_dma_txchan dev; + + dev = (alt_dma_txchan) alt_find_dev (name, &alt_dma_txchan_list); + + if (!dev) + { + ALT_ERRNO = ENODEV; + } + + return dev; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_do_ctors.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_do_ctors.c new file mode 100644 index 0000000..be1c134 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_do_ctors.c @@ -0,0 +1,64 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT IT DIRECTLY. * +* * +* Overriding HAL Functions * +* * +* To provide your own implementation of a HAL function, include the file in * +* your Nios II IDE application project. When building the executable, the * +* Nios II IDE finds your function first, and uses it in place of the HAL * +* version. * +* * +******************************************************************************/ + +/* + * + */ + +typedef void (*constructor) (void); +extern constructor __CTOR_LIST__[]; +extern constructor __CTOR_END__[]; + +/* + * Run the C++ static constructors. + */ + +void _do_ctors(void) +{ + constructor* ctor; + + for (ctor = &__CTOR_END__[-1]; ctor >= __CTOR_LIST__; ctor--) + (*ctor) (); +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_do_dtors.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_do_dtors.c new file mode 100644 index 0000000..b61166a --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_do_dtors.c @@ -0,0 +1,64 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT IT DIRECTLY. * +* * +* Overriding HAL Functions * +* * +* To provide your own implementation of a HAL function, include the file in * +* your Nios II IDE application project. When building the executable, the * +* Nios II IDE finds your function first, and uses it in place of the HAL * +* version. * +* * +******************************************************************************/ + +/* + * + */ + +typedef void (*destructor) (void); +extern destructor __DTOR_LIST__[]; +extern destructor __DTOR_END__[]; + +/* + * Run the C++ static destructors. + */ + +void _do_dtors(void) +{ + destructor* dtor; + + for (dtor = &__DTOR_END__[-1]; dtor >= __DTOR_LIST__; dtor--) + (*dtor) (); +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_ecc_fatal_entry.S b/FPGA_nios/hit_pat_bsp/HAL/src/alt_ecc_fatal_entry.S new file mode 100644 index 0000000..43fedc0 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_ecc_fatal_entry.S @@ -0,0 +1,102 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2013 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * This is the code called at the beginning of the exception handler + * to detect a likely fatal ECC error exception and then jump to + * user-provided code to handle it. + * + * This code is pulled in from a .globl in alt_ecc_fatal_exception.c. + * This scheme is used so that if a handler is never registered, then this + * code will not appear in the generated executable, thereby improving + * code footprint. + * + * This code is located in its own section that the linker script + * explicitly mentions and ensures it gets linked at the beginning + * of the exception handler. + */ + + /* + * Pull in the exception handler register save code. + */ + .globl alt_exception + + .section .exceptions.entry.ecc_fatal, "xa" + + /* + * This might be handling an unrecoverable ECC error exception + * in the register file and/or data cache. + * Must avoid reading registers or performing load/store instructions + * before this is determined because they could trigger another + * unrecoverable ECC error exception and create an infinite loop. + * + * The EXCEPTION register is always present when ECC is present. + * Bit 31 of this register indicates that there was an unrecoverable + * ECC error exception in the register file and/or data cache. + * Test this (using blt to check sign bit) to determine if this is + * what we are dealing with. Otherwise, just do normal processing. + * + * Jump to an application-provided routine to handle this condition. + * Pass in the return address in the et register in case this code + * can clean up the ECC error and then return here (unlikely). + * + * Runtime stack checking can't be enabled when ECC is present + * because they both want to use the et register. + */ + rdctl et, exception + bge et, r0, alt_exception_not_ecc_fatal /* Not ECCFTL if bit 31 is 0 */ + + /* + * Load ECC fatal handler pointer into et register. + * Using a ldwio is safe because it completely bypasses the data cache. + */ + movhi et, %hi(alt_exception_ecc_fatal_handler) + ori et, et, %lo(alt_exception_ecc_fatal_handler) + ldwio et, 0(et) + + /* + * If ECC fatal handler pointer is not 0, assume a handler + * has been provided by the application. + */ + beq et, r0, alt_exception_not_ecc_fatal + + /* + * The et register contains the address of the ECC fatal handler. + * Jump to this address to invoke the handler. + */ + jmp et + + /* + * An ECC fatal handler can jump to this label if it able + * to recover from the fatal error (rare) and wants to continue + * with normal exception processing. + */ +.globl alt_exception_not_ecc_fatal +alt_exception_not_ecc_fatal: diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_ecc_fatal_exception.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_ecc_fatal_exception.c new file mode 100644 index 0000000..9d40ff5 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_ecc_fatal_exception.c @@ -0,0 +1,75 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2013 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ +#include "io.h" +#include "sys/alt_exceptions.h" +#include "sys/alt_cache.h" + +/* + * This file implements support for calling a user-registered handler + * when a likely fatal ECC error exception occurs. + */ + +/* + * Global variable containing address to jump to when likely fatal + * ECC error exception occurs. + */ +alt_u32 alt_exception_ecc_fatal_handler = 0x0; + +/* + * Pull in the exception entry assembly code. This will not be linked in + * unless this object is linked into the executable (i.e. only if + * alt_ecc_fatal_exception_register() is called). + */ +__asm__( "\n\t.globl alt_exception" ); + +/* + * alt_ecc_fatal_exception_register() is called to register a handler to + * service likely fatal ECC error exceptions. + * + * Passing null (0x0) in the handler argument will disable a previously- + * registered handler. + * + * Note that if no handler is registered, just normal exception processing + * occurs on a likely fatal ECC exception and the exception processing + * code might trigger an infinite exception loop. + */ +void +alt_ecc_fatal_exception_register(alt_u32 handler) +{ + alt_exception_ecc_fatal_handler = handler; + + /* + * Flush this from the cache. Required because the exception handler uses ldwio + * to read this value to avoid trigger another data cache ECC error exception. + */ + alt_dcache_flush(&alt_exception_ecc_fatal_handler, sizeof(alt_exception_ecc_fatal_handler)); +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_environ.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_environ.c new file mode 100644 index 0000000..780635a --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_environ.c @@ -0,0 +1,42 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "os/alt_syscall.h" + +/* + * These are the environment variables passed to the C code. By default there + * are no variables registered. An application can manipulate this list using + * getenv() and setenv(). + */ + +char *__env[1] = { 0 }; +char **ALT_ENVIRON = __env; diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_errno.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_errno.c new file mode 100644 index 0000000..4c5ca3e --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_errno.c @@ -0,0 +1,44 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/* + * This file defines the alt_errno global variable. See comments in + * alt_errno.h for the use of this variable. + */ + + +#include "sys/alt_errno.h" +#include "alt_types.h" + +extern int ALT_WEAK *__errno (void); + +int* (*alt_errno) (void) = __errno; diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_entry.S b/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_entry.S new file mode 100644 index 0000000..3740a0d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_entry.S @@ -0,0 +1,402 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2008 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "system.h" + +/* + * This is the exception entry point code, which saves all the caller saved + * registers and then handles the appropriate exception. It should be pulled + * in using a .globl from all the exception handler routines. This scheme is + * used so that if an interrupt is never registered, then this code will not + * appear in the generated executable, thereby improving code footprint. + * + * If an external interrpt controller (EIC) is present, it will supply an + * interrupt vector address to the processor when an interrupt occurs. For + * The Altera Vectored Interrupt Controller (VIC) driver will establish a + * vector table and the processor will jump directly to the appropriate + * table entry, funnel routine, and then user ISR. This will bypass this code + * in entirety. This code might still be linked into a system with an EIC, + * but would then be used only for non-interrupt exceptions. + */ + + /* + * Explicitly allow the use of r1 (the assembler temporary register) + * within this code. This register is normally reserved for the use of + * the assembler. + */ + .set noat + + /* + * The top and bottom of the exception stack. + */ +#ifdef ALT_EXCEPTION_STACK + .globl __alt_exception_stack_pointer + +#ifdef ALT_STACK_CHECK + .globl __alt_exception_stack_limit + + /* + * Store the value of the stack limit after interrupt somewhere. + */ + .globl alt_exception_old_stack_limit +#endif /* ALT_STACK_CHECK */ +#endif /* ALT_EXCEPTION_STACK */ + +/* + * The code at alt_exception is located at the Nios II exception + * handler address. + */ + .section .exceptions.entry.label, "xa" + .globl alt_exception + .type alt_exception, @function +alt_exception: + + /* + * The code for detecting a likely fatal ECC exception is + * linked here before the normal exception handler code if required. + * This is handled by the linker script and putting that code + * in the .exceptions.entry.ecc_fatal section. + */ + + /* + * Now start the normal exception handler code. + */ + .section .exceptions.entry, "xa" + +#ifdef ALT_EXCEPTION_STACK +#ifdef ALT_STACK_CHECK + /* + * When runtime stack checking is enabled, the et register + * contains the stack limit. Save this in memory before + * overwriting the et register. + */ + stw et, %gprel(alt_exception_old_stack_limit)(gp) +#endif /* ALT_STACK_CHECK */ + + /* + * Switch to the exception stack and save the current stack pointer + * in memory. Uses the et register as a scratch register. + */ + movhi et, %hi(__alt_exception_stack_pointer - 80) + ori et, et, %lo(__alt_exception_stack_pointer - 80) + stw sp, 76(et) + mov sp, et + +#ifdef ALT_STACK_CHECK + /* + * Restore the stack limit from memory to the et register. + */ + movhi et, %hi(__alt_exception_stack_limit) + ori et, et, %lo(__alt_exception_stack_limit) + stw et, %gprel(alt_stack_limit_value)(gp) +#endif /* ALT_STACK_CHECK */ + +#else /* ALT_EXCEPTION_STACK disabled */ + /* + * Reserve space on normal stack for registers about to be pushed. + */ + addi sp, sp, -76 + +#ifdef ALT_STACK_CHECK + /* Ensure stack didn't just overflow. */ + bltu sp, et, .Lstack_overflow +#endif /* ALT_STACK_CHECK */ + +#endif /* ALT_EXCEPTION_STACK */ + + /* + * Process an exception. For all exceptions we must preserve all + * caller saved registers on the stack (See the Nios II ABI + * 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) + stw r1, 8(sp) + stw r2, 12(sp) + stw r3, 16(sp) + stw r4, 20(sp) + stw r5, 24(sp) + stw r6, 28(sp) + stw r7, 32(sp) + rdctl r5, estatus /* Read early to avoid usage stall */ + stw r8, 36(sp) + stw r9, 40(sp) + stw r10, 44(sp) + stw r11, 48(sp) + stw r12, 52(sp) + stw r13, 56(sp) + stw r14, 60(sp) + 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 */ + addi r15, ea, -4 /* instruction that caused exception */ + stw r15, 72(sp) + + /* + * The interrupt testing code (.exceptions.irqtest) will be + * linked here. If the Internal Interrupt Controller (IIC) is + * present (an EIC is not present), the presense of an interrupt + * is determined by examining CPU control registers or an interrupt + * custom instruction, if present. + * + * If the IIC is used and an interrupt is active, the code linked + * here will call the HAL IRQ handler (alt_irq_handler()) which + * successively calls registered interrupt handler(s) until no + * interrupts remain pending. It then jumps to .exceptions.exit. If + * there is no interrupt then it continues to .exception.notirq, below. + */ + + .section .exceptions.notirq, "xa" + + /* + * Prepare to service unimplemtned instructions or traps, + * each of which is optionally inked into section .exceptions.soft, + * which will preceed .exceptions.unknown below. + * + * Unlike interrupts, we want to skip the exception-causing instructon + * 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 */ + +#ifdef NIOS2_CDX_PRESENT + mov.n r4, ea /* EA contains PC+4 of instruction that caused the exception */ + subi.n r4, r4, 4 /* Calculate PC */ + ldhu.n r2, 0(r4) /* Load least-significant 16 bits of instruction */ + andi r5, r2, 0x7 /* Mask off all bits except the 3 most-significant bits of OP field */ + + /* + * These instructions compare the MSB 3 bits of OP to 0x1, 0x3, and 0x5 + * which is where all the 16-bit instructions live. + */ + subi.n r5, r5, 1 + beqz.n r5, .Lunknown_16bit + subi.n r5, r5, 2 + beqz.n r5, .Lunknown_16bit + subi.n r5, r5, 2 + beqz.n r5, .Lunknown_16bit + +.Lunknown_32bit: + stw ea, 72(sp) /* EA is PC+4 so will skip over instruction causing exception */ + + /* Load most-significant 16 bits of instruction */ + ldhu.n r3, 2(r4) + slli.n r3, r3, 16 + or.n r2, r2, r3 /* 32-bit instruction value that caused exception */ + br.n .Lunknown_inst_loaded + +.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 */ +#endif + +.Lunknown_inst_loaded: + + /* + * Other exception handling code, if enabled, will be linked here. + * This includes unimplemted (multiply/divide) instruction support + * (a BSP generaton option), and a trap handler (that would typically + * be augmented with user-specific code). These are not linked in by + * default. + */ + + /* + * In the context of linker sections, "unknown" are all exceptions + * not handled by the built-in handlers above (interupt, and trap or + * unimplemented instruction decoding, if enabled). + * + * Advanced exception types can be serviced by registering a handler. + * To do so, enable the "Enable Instruction-related Exception API" HAL + * BSP setting. If this setting is disabled, this handler code will + * either break (if the debug core is present) or enter an infinite + * loop because we don't how how to handle the exception. + */ + .section .exceptions.unknown +#ifdef ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API + /* + * The C-based HAL routine alt_instruction_exception_entry() will + * attempt to service the exception by calling a user-registered + * exception handler using alt_instruction_exception_register(). + * If no handler was registered it will either break (if the + * 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 + + /* Call the instruction-exception entry */ + call alt_instruction_exception_entry + + /* + * If alt_instruction_exception_entry() returned, the exception was + * serviced by a user-registered routine. Its return code (now in r2) + * indicates whether to re-issue or skip the exception-causing + * instruction + * + * Return code was 0: Skip. The instruction after the exception is + * already stored in 72(sp). + */ + bne r2, r0, .Lexception_exit + + /* + * Otherwise, modify 72(sp) to re-issue the instruction that caused the + * exception. + */ + addi r15, ea, -4 /* instruction that caused exception */ + stw r15, 72(sp) + +#else /* ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API disabled */ + + /* + * We got here because an instruction-related exception occured, but the + * handler API was not compiled in. We do not presume to know how to + * handle it. If the debugger is present, break, otherwise hang. + * + * If you get here then one of the following could have happened: + * + * - An instruction-generated exception occured, and the processor + * does not have the extra exceptions feature enabled, or you + * have not registered a handler using + * alt_instruction_exception_register() + * + * Some examples of instruction-generated exceptions and why they + * might occur: + * + * - Your program could have been compiled for a full-featured + * Nios II core, but it is running on a smaller core, and + * instruction emulation has been disabled by defining + * ALT_NO_INSTRUCTION_EMULATION. + * + * You can work around the problem by re-enabling instruction + * emulation, or you can figure out why your program is being + * compiled for a system other than the one that it is running on. + * + * - Your program has executed a trap instruction, but has not + * implemented a handler for this instruction. + * + * - Your program has executed an illegal instruction (one which is + * not defined in the instruction set). + * + * - Your processor includes an MMU or MPU, and you have enabled it + * before registering an exception handler to service exceptions it + * generates. + * + * The problem could also be hardware related: + * - If your hardware is broken and is generating spurious interrupts + * (a peripheral which negates its interrupt output before its + * interrupt handler has been executed will cause spurious + * interrupts) + */ +alt_exception_unknown: +#ifdef NIOS2_HAS_DEBUG_STUB + /* + * Either tell the user now (if there is a debugger attached) or go into + * the debug monitor which will loop until a debugger is attached. + */ + break +#else /* NIOS2_HAS_DEBUG_STUB disabled */ + /* + * If there is no debug stub, an infinite loop is more useful. + */ + br alt_exception_unknown +#endif /* NIOS2_HAS_DEBUG_STUB */ +#endif /* ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API */ + + .section .exceptions.exit.label +.Lexception_exit: + + .section .exceptions.exit, "xa" + + /* + * 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) + ldw ea, 72(sp) /* This becomes the PC once eret is executed */ + ldw ra, 0(sp) + + wrctl estatus, r5 + + ldw r1, 8(sp) + ldw r2, 12(sp) + ldw r3, 16(sp) + ldw r4, 20(sp) + ldw r5, 24(sp) + ldw r6, 28(sp) + 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) + ldw r9, 40(sp) + ldw r10, 44(sp) + ldw r11, 48(sp) + ldw r12, 52(sp) + ldw r13, 56(sp) + ldw r14, 60(sp) + ldw r15, 64(sp) + +#ifdef ALT_EXCEPTION_STACK +#ifdef ALT_STACK_CHECK + 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 +#endif /* ALT_EXCEPTION_STACK */ + + /* + * Return to the interrupted instruction. + */ + + eret + +#ifdef ALT_STACK_CHECK +.Lstack_overflow: + break 3 +#endif /* ALT_STACK_CHECK */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_muldiv.S b/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_muldiv.S new file mode 100644 index 0000000..6a794a3 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_muldiv.S @@ -0,0 +1,583 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + + /* + * This is the software multiply/divide handler for Nios2. + */ + + /* + * Provide a label which can be used to pull this file in. + */ + + .section .exceptions.start + .globl alt_exception_muldiv +alt_exception_muldiv: + + /* + * Pull in the entry/exit code. + */ + .globl alt_exception + + + .section .exceptions.soft, "xa" + + + /* INSTRUCTION EMULATION + * --------------------- + * + * Nios II processors generate exceptions for unimplemented instructions. + * The routines below emulate these instructions. Depending on the + * processor core, the only instructions that might need to be emulated + * are div, divu, mul, muli, mulxss, mulxsu, and mulxuu. + * + * The emulations match the instructions, except for the following + * limitations: + * + * 1) The emulation routines do not emulate the use of the exception + * temporary register (et) as a source operand because the exception + * handler already has modified it. + * + * 2) The routines do not emulate the use of the stack pointer (sp) or the + * exception return address register (ea) as a destination because + * modifying these registers crashes the exception handler or the + * interrupted routine. + * + * 3) To save code size, the routines do not emulate the use of the + * breakpoint registers (ba and bt) as operands. + * + * Detailed Design + * --------------- + * + * The emulation routines expect the contents of integer registers r0-r31 + * to be on the stack at addresses sp, 4(sp), 8(sp), ... 124(sp). The + * routines retrieve source operands from the stack and modify the + * destination register's value on the stack prior to the end of the + * exception handler. Then all registers except the destination register + * are restored to their previous values. + * + * The instruction that causes the exception is found at address -4(ea). + * The instruction's OP and OPX fields identify the operation to be + * performed. + * + * One instruction, muli, is an I-type instruction that is identified by + * an OP field of 0x24. + * + * muli AAAAA,BBBBB,IIIIIIIIIIIIIIII,-0x24- + * 27 22 6 0 <-- LSB of field + * + * The remaining emulated instructions are R-type and have an OP field + * of 0x3a. Their OPX fields identify them. + * + * R-type AAAAA,BBBBB,CCCCC,XXXXXX,NNNNN,-0x3a- + * 27 22 17 11 6 0 <-- LSB of field + * + * + */ + + + /* + * Split the instruction into its fields. We need 4*A, 4*B, and 4*C as + * offsets to the stack pointer for access to the stored register values. + */ + /* r2 = AAAAA,BBBBB,IIIIIIIIIIIIIIII,PPPPPP */ + roli r3, r2, 7 /* r3 = BBB,IIIIIIIIIIIIIIII,PPPPPP,AAAAA,BB */ + roli r4, r3, 3 /* r4 = IIIIIIIIIIIIIIII,PPPPPP,AAAAA,BBBBB */ + roli r6, r4, 2 /* r6 = IIIIIIIIIIIIII,PPPPPP,AAAAA,BBBBB,II */ + srai r4, r4, 16 /* r4 = (sign-extended) IMM16 */ + xori r6, r6, 0x42 /* r6 = CCC,XXXXXX,NNNNN,PPPPPP,AAAAA,bBBBB,cC */ + roli r7, r6, 5 /* r7 = XXXX,NNNNN,PPPPPP,AAAAA,bBBBB,cCCCC,XX */ + andi r5, r2, 0x3f /* r5 = 00000000000000000000000000,PPPPPP */ + xori r3, r3, 0x40 + andi r3, r3, 0x7c /* r3 = 0000000000000000000000000,aAAAA,00 */ + andi r6, r6, 0x7c /* r6 = 0000000000000000000000000,bBBBB,00 */ + andi r7, r7, 0x7c /* r7 = 0000000000000000000000000,cCCCC,00 */ + + /* Now either + * r5 = OP + * r3 = 4*(A^16) + * r4 = IMM16 (sign extended) + * r6 = 4*(B^16) + * r7 = 4*(C^16) + * or + * r5 = OP + */ + + + /* + * Save everything on the stack to make it easy for the emulation routines + * to retrieve the source register operands. The exception entry code has + * already saved some of this so we don't need to do it all again. + */ + + addi sp, sp, -60 + stw zero, 64(sp) /* Save zero on stack to avoid special case for r0. */ + /* Register at and r2-r15 have already been saved. */ + + stw r16, 0(sp) + stw r17, 4(sp) + stw r18, 8(sp) + stw r19, 12(sp) + stw r20, 16(sp) + stw r21, 20(sp) + stw r22, 24(sp) + stw r23, 28(sp) + /* et @ 32 - Has already been changed.*/ + /* bt @ 36 - Usually isn't an operand. */ + stw gp, 40(sp) + stw sp, 44(sp) + stw fp, 48(sp) + /* ea @ 52 - Don't bother to save - it's already been changed */ + /* ba @ 56 - Breakpoint register usually isn't an operand */ + /* ra @ 60 - Has already been saved */ + + + /* + * Prepare for either multiplication or division loop. + * They both loop 32 times. + */ + movi r14, 32 + + + /* + * Get the operands. + * + * It is necessary to check for muli because it uses an I-type instruction + * format, while the other instructions are have an R-type format. + */ + add r3, r3, sp /* r3 = address of A-operand. */ + ldw r3, 0(r3) /* r3 = A-operand. */ + movi r15, 0x24 /* muli opcode (I-type instruction format) */ + beq r5, r15, .Lmul_immed /* muli doesn't use the B register as a source */ + + add r6, r6, sp /* r6 = address of B-operand. */ + ldw r6, 0(r6) /* r6 = B-operand. */ + /* r4 = SSSSSSSSSSSSSSSS,-----IMM16------ */ + /* IMM16 not needed, align OPX portion */ + /* r4 = SSSSSSSSSSSSSSSS,CCCCC,-OPX--,00000 */ + srli r4, r4, 5 /* r4 = 00000,SSSSSSSSSSSSSSSS,CCCCC,-OPX-- */ + andi r4, r4, 0x3f /* r4 = 00000000000000000000000000,-OPX-- */ + + /* Now + * r5 = OP + * r3 = src1 + * r6 = src2 + * r4 = OPX (no longer can be muli) + * r7 = 4*(C^16) + * r14 = loop counter + */ + + /* ILLEGAL-INSTRUCTION EXCEPTION + * ----------------------------- + * + * This code is for Nios II cores that generate exceptions when attempting + * to execute illegal instructions. Nios II cores that support an + * illegal-instruction exception are identified by the presence of the + * macro definition NIOS2_HAS_ILLEGAL_INSTRUCTION_EXCEPTION in system.h . + * + * Remember that illegal instructions are different than unimplemented + * instructions. Illegal instructions are instruction encodings that + * have not been defined by the Nios II ISA. Unimplemented instructions + * are legal instructions that must be emulated by some Nios II cores. + * + * If we get here, all instructions except multiplies and divides + * are illegal. + * + * This code assumes that OP is not muli (because muli was tested above). + * All other multiplies and divides are legal. Anything else is illegal. + */ + + movi r8, 0x3a /* OP for R-type mul* and div* */ + bne r5, r8, .Lnot_muldiv + + /* r15 already is 0x24 */ /* OPX of divu */ + beq r4, r15, .Ldivide + + movi r15,0x27 /* OPX of mul */ + beq r4, r15, .Lmultiply + + movi r15,0x07 /* OPX of mulxuu */ + beq r4, r15, .Lmultiply + + movi r15,0x17 /* OPX of mulxsu */ + beq r4, r15, .Lmultiply + + movi r15,0x1f /* OPX of mulxss */ + beq r4, r15, .Lmultiply + + movi r15,0x25 /* OPX of div */ + bne r4, r15, .Lnot_muldiv + + + /* DIVISION + * + * Divide an unsigned dividend by an unsigned divisor using + * a shift-and-subtract algorithm. The example below shows + * 43 div 7 = 6 for 8-bit integers. This classic algorithm uses a + * single register to store both the dividend and the quotient, + * allowing both values to be shifted with a single instruction. + * + * remainder dividend:quotient + * --------- ----------------- + * initialize 00000000 00101011: + * shift 00000000 0101011:_ + * remainder >= divisor? no 00000000 0101011:0 + * shift 00000000 101011:0_ + * remainder >= divisor? no 00000000 101011:00 + * shift 00000001 01011:00_ + * remainder >= divisor? no 00000001 01011:000 + * shift 00000010 1011:000_ + * remainder >= divisor? no 00000010 1011:0000 + * shift 00000101 011:0000_ + * remainder >= divisor? no 00000101 011:00000 + * shift 00001010 11:00000_ + * remainder >= divisor? yes 00001010 11:000001 + * remainder -= divisor - 00000111 + * ---------- + * 00000011 11:000001 + * shift 00000111 1:000001_ + * remainder >= divisor? yes 00000111 1:0000011 + * remainder -= divisor - 00000111 + * ---------- + * 00000000 1:0000011 + * shift 00000001 :0000011_ + * remainder >= divisor? no 00000001 :00000110 + * + * The quotient is 00000110. + */ + +.Ldivide: + /* + * Prepare for division by assuming the result + * is unsigned, and storing its "sign" as 0. + */ + movi r17, 0 + + + /* Which division opcode? */ + xori r15, r4, 0x25 /* OPX of div */ + bne r15, zero, .Lunsigned_division + + + /* + * OPX is div. Determine and store the sign of the quotient. + * Then take the absolute value of both operands. + */ + xor r17, r3, r6 /* MSB contains sign of quotient */ + bge r3, zero, 0f + sub r3, zero, r3 /* -r3 */ +0: + bge r6, zero, 0f + sub r6, zero, r6 /* -r6 */ +0: + + +.Lunsigned_division: + /* Initialize the unsigned-division loop. */ + movi r13, 0 /* remainder = 0 */ + + /* Now + * r3 = dividend : quotient + * r4 = 0x25 for div, 0x24 for divu + * r6 = divisor + * r13 = remainder + * r14 = loop counter (already initialized to 32) + * r17 = MSB contains sign of quotient + */ + + + /* + * for (count = 32; count > 0; --count) + * { + */ +.Ldivide_loop: + + /* + * Division: + * + * (remainder:dividend:quotient) <<= 1; + */ + slli r13, r13, 1 + cmplt r15, r3, zero /* r15 = MSB of r3 */ + or r13, r13, r15 + slli r3, r3, 1 + + + /* + * if (remainder >= divisor) + * { + * set LSB of quotient + * remainder -= divisor; + * } + */ + bltu r13, r6, .Ldiv_skip + ori r3, r3, 1 + sub r13, r13, r6 +.Ldiv_skip: + + /* + * } + */ + subi r14, r14, 1 + bne r14, zero, .Ldivide_loop + + mov r9, r3 + + + /* Now + * r9 = quotient + * r4 = 0x25 for div, 0x24 for divu + * r7 = 4*(C^16) + * r17 = MSB contains sign of quotient + */ + + + /* + * Conditionally negate signed quotient. If quotient is unsigned, + * the sign already is initialized to 0. + */ + bge r17, zero, .Lstore_result + sub r9, zero, r9 /* -r9 */ + + br .Lstore_result + + + + + /* MULTIPLICATION + * + * A "product" is the number that one gets by summing a "multiplicand" + * several times. The "multiplier" specifies the number of copies of the + * multiplicand that are summed. + * + * Actual multiplication algorithms don't use repeated addition, however. + * Shift-and-add algorithms get the same answer as repeated addition, and + * they are faster. To compute the lower half of a product (pppp below) + * one shifts the product left before adding in each of the partial products + * (a * mmmm) through (d * mmmm). + * + * To compute the upper half of a product (PPPP below), one adds in the + * partial products (d * mmmm) through (a * mmmm), each time following the + * add by a right shift of the product. + * + * mmmm + * * abcd + * ------ + * #### = d * mmmm + * #### = c * mmmm + * #### = b * mmmm + * #### = a * mmmm + * -------- + * PPPPpppp + * + * The example above shows 4 partial products. Computing actual Nios II + * products requires 32 partials. + * + * It is possible to compute the result of mulxsu from the result of mulxuu + * because the only difference between the results of these two opcodes is + * the value of the partial product associated with the sign bit of rA. + * + * mulxsu = mulxuu - ((rA < 0) ? rB : 0); + * + * It is possible to compute the result of mulxss from the result of mulxsu + * because the only difference between the results of these two opcodes is + * the value of the partial product associated with the sign bit of rB. + * + * mulxss = mulxsu - ((rB < 0) ? rA : 0); + * + */ + +.Lmul_immed: + /* Opcode is muli. Change it into mul for remainder of algorithm. */ + mov r7, r6 /* Field B is dest register, not field C. */ + mov r6, r4 /* Field IMM16 is src2, not field B. */ + movi r4, 0x27 /* OPX of mul is 0x27 */ + +.Lmultiply: + /* Initialize the multiplication loop. */ + movi r9, 0 /* mul_product = 0 */ + movi r10, 0 /* mulxuu_product = 0 */ + mov r11, r6 /* save original multiplier for mulxsu and mulxss */ + mov r12, r6 /* mulxuu_multiplier (will be shifted) */ + movi r16, 1 /* used to create "rori B,A,1" from "ror B,A,r16" */ + + /* Now + * r3 = multiplicand + * r6 = mul_multiplier + * r7 = 4 * dest_register (used later as offset to sp) + * r9 = mul_product + * r10 = mulxuu_product + * r11 = original multiplier + * r12 = mulxuu_multiplier + * r14 = loop counter (already initialized) + * r15 = temp + * r16 = 1 + */ + + + /* + * for (count = 32; count > 0; --count) + * { + */ +.Lmultiply_loop: + + /* + * mul_product <<= 1; + * lsb = multiplier & 1; + */ + slli r9, r9, 1 + andi r15, r12, 1 + + /* + * if (lsb == 1) + * { + * mulxuu_product += multiplicand; + * } + */ + beq r15, zero, .Lmulx_skip + add r10, r10, r3 + cmpltu r15, r10, r3 /* Save the carry from the MSB of mulxuu_product. */ + ror r15, r15, r16 /* r15 = 0x80000000 on carry, or else 0x00000000 */ +.Lmulx_skip: + + /* + * if (MSB of mul_multiplier == 1) + * { + * mul_product += multiplicand; + * } + */ + bge r6, zero, .Lmul_skip + add r9, r9, r3 +.Lmul_skip: + + /* + * mulxuu_product >>= 1; logical shift + * mul_multiplier <<= 1; done with MSB + * mulx_multiplier >>= 1; done with LSB + */ + srli r10, r10, 1 + or r10, r10, r15 /* OR in the saved carry bit. */ + slli r6, r6, 1 + srli r12, r12, 1 + + + /* + * } + */ + subi r14, r14, 1 + bne r14, zero, .Lmultiply_loop + + + /* + * Multiply emulation loop done. + */ + + /* Now + * r3 = multiplicand + * r4 = OPX + * r7 = 4 * dest_register (used later as offset to sp) + * r9 = mul_product + * r10 = mulxuu_product + * r11 = original multiplier + * r15 = temp + */ + + + /* + * Select/compute the result based on OPX. + */ + + + /* OPX == mul? Then store. */ + xori r15, r4, 0x27 + beq r15, zero, .Lstore_result + + /* It's one of the mulx.. opcodes. Move over the result. */ + mov r9, r10 + + /* OPX == mulxuu? Then store. */ + xori r15, r4, 0x07 + beq r15, zero, .Lstore_result + + /* Compute mulxsu + * + * mulxsu = mulxuu - ((rA < 0) ? rB : 0); + */ + bge r3, zero, .Lmulxsu_skip + sub r9, r9, r11 +.Lmulxsu_skip: + + /* OPX == mulxsu? Then store. */ + xori r15, r4, 0x17 + beq r15, zero, .Lstore_result + + /* Compute mulxss + * + * mulxss = mulxsu - ((rB < 0) ? rA : 0); + */ + bge r11, zero, .Lmulxss_skip + sub r9, r9, r3 +.Lmulxss_skip: + /* At this point, assume that OPX is mulxss, so store */ + + +.Lstore_result: + add r7, r7, sp + stw r9, 0(r7) + + ldw r16, 0(sp) + ldw r17, 4(sp) + ldw r18, 8(sp) + ldw r19, 12(sp) + ldw r20, 16(sp) + ldw r21, 20(sp) + ldw r22, 24(sp) + ldw r23, 28(sp) + + /* bt @ 32 - Breakpoint register usually isn't an operand. */ + /* et @ 36 - Don't corrupt et. */ + /* gp @ 40 - Don't corrupt gp. */ + /* sp @ 44 - Don't corrupt sp. */ + ldw fp, 48(sp) + /* ea @ 52 - Don't corrupt ea. */ + /* ba @ 56 - Breakpoint register usually isn't an operand. */ + + addi sp, sp, 60 + + br .Lexception_exit + + +.Lnot_muldiv: + + addi sp, sp, 60 + + + .section .exceptions.exit.label +.Lexception_exit: + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_trap.S b/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_trap.S new file mode 100644 index 0000000..730e893 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_exception_trap.S @@ -0,0 +1,95 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + + /* + * This is the trap exception handler for Nios2. + */ + + /* + * Provide a label which can be used to pull this file in. + */ + + .section .exceptions.start + .globl alt_exception_trap +alt_exception_trap: + + /* + * Pull in the entry/exit code. + */ + .globl alt_exception + + .section .exceptions.soft, "xa" + +.Ltrap_handler: + + /* + * Did a trap instruction cause the exception? + * + * The instruction which the exception occurred on has been loaded + * into r2 by code in alt_exception_entry.S + * + */ + +#ifdef ALT_CPU_CPU_ARCH_NIOS2_R2 + movhi r3,0xb41d /* upper half of trap opcode */ + ori r3,r3,0x0020 /* lower half of trap opcode */ + beq r2,r3,.Lis_trap +#ifdef NIOS2_CDX_PRESENT + mov r3,r2 + andhi r3,r3,0xffff + ori r3,r3,0xd009 /* trap.n opcode */ + beq r2,r3,.Lis_trap +#endif + br .Lnot_trap +#else + movhi r3,0x003b /* upper half of trap opcode */ + ori r3,r3,0x683a /* lower half of trap opcode */ + bne r2,r3,.Lnot_trap +#endif + +.Lis_trap: + /* + * There is no trap handler defined here, and so executing a trap + * instruction causes a software break. If you provide a trap handler, + * then you must replace the break instruction below with your handler. + * Your handler must preserve ea and the usual callee saved registers. + */ + + break + + br .Lexception_exit + +.Lnot_trap: + + + .section .exceptions.exit.label +.Lexception_exit: + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_execve.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_execve.c new file mode 100644 index 0000000..51bfcc4 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_execve.c @@ -0,0 +1,55 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "os/alt_syscall.h" + +/* + * execve() is used by newlib to launch new processes. This is unsupported in + * the HAL environment. However a "do-nothing" implementation is still + * provied for newlib compatability. + * + * ALT_EXECVE is mapped onto the execve() system call in alt_syscall.h + */ + +int ALT_EXECVE (char *name, char ** argv, char** env) +{ + /* Generate a link time warning, should this function ever be called. */ + + ALT_STUB_WARNING(execve); + + /* Indicate an error */ + + ALT_ERRNO = ENOSYS; + return -1; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_exit.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_exit.c new file mode 100644 index 0000000..46cbe18 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_exit.c @@ -0,0 +1,71 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_irq.h" +#include "sys/alt_sim.h" +#include "os/alt_hooks.h" +#include "os/alt_syscall.h" + +#include "alt_types.h" +#include "sys/alt_log_printf.h" +/* + * _exit() is called by exit() in order to terminate the current process. + * Typically this is called when main() completes. It should never return. + * Since there is nowhere to go once this process completes, this + * implementation simply blocks forever. + * + * Note that interrupts are not disabled so that execution outside of this + * thread is allowed to continue. + * + * ALT_EXIT is mapped onto the _exit() system call in alt_syscall.h + */ + +void ALT_EXIT (int exit_code) +{ + /* ALT_LOG - please see HAL/inc/alt_log_printf.h for details */ + 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(); + + /* Provide notification to the simulator that we've stopped */ + + ALT_LOG_PRINT_BOOT("[alt_exit.c] Calling ALT_SIM_HALT().\r\n"); + 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); +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_fcntl.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fcntl.c new file mode 100644 index 0000000..382fa43 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fcntl.c @@ -0,0 +1,101 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include + +#include +#include + +#include "sys/alt_errno.h" +#include "priv/alt_file.h" +#include "alt_types.h" +#include "os/alt_syscall.h" + +#define ALT_FCNTL_FLAGS_MASK ((alt_u32) (O_APPEND | O_NONBLOCK)) + +/* + * fcntl() is a limited implementation of the standard fcntl() system call. + * It can be used to change the state of the flags associated with an open + * file descriptor. Normally these flags are set during the call to + * open(). It is anticipated that the main use of this function will be to + * change the state of a device from blocking to non-blocking (where this is + * supported). + * + * The input argument "fd" is the file descriptor to be manipulated. "cmd" + * is the command to execute. This can be either F_GETFL (return the + * current value of the flags) or F_SETFL (set the value of the flags). + * + * If "cmd" is F_SETFL then the argument "arg" is the new value of flags, + * otherwise "arg" is ignored. Only the flags: O_APPEND and O_NONBLOCK + * can be updated by a call to fcntl(). All other flags remain + * unchanged. + * + * ALT_FCNTL is mapped onto the fcntl() system call in alt_syscall.h + */ + +int ALT_FCNTL (int file, int cmd, ...) +{ + alt_fd* fd; + long flags; + va_list argp; + + /* + * 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]; + + if (fd) + { + switch (cmd) + { + case F_GETFL: + return fd->fd_flags & ~((alt_u32) ALT_FD_FLAGS_MASK); + case F_SETFL: + va_start(argp, cmd); + flags = va_arg(argp, long); + fd->fd_flags &= ~ALT_FCNTL_FLAGS_MASK; + fd->fd_flags |= (flags & ALT_FCNTL_FLAGS_MASK); + va_end(argp); + return 0; + default: + ALT_ERRNO = EINVAL; + return -1; + } + } + + ALT_ERRNO = EBADFD; + return -1; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_lock.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_lock.c new file mode 100644 index 0000000..162295a --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_lock.c @@ -0,0 +1,75 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "priv/alt_file.h" + +/* + * alt_fd_lock() is called as a consequence of an ioctl call to gain exclusive + * access to a device, i.e.: + * + * ioctl (fd, TIOCEXCL, NULL); + * + * If there are no other open file descriptors which reference the same + * device, then alt_fd_lock() will grant the lock. Further calls to open() + * for this device will fail until the lock is released. + * + * This is done by calling close() for this file descriptor, or by calling: + * + * ioctl (fd, TIOCNXCL, NULL); + * + * The return value is zero for success, or negative in the case of failure. + */ + +int alt_fd_lock (alt_fd* fd) +{ + int i; + int rc = 0; + + ALT_SEM_PEND(alt_fd_list_lock, 0); + + for (i = 0; i < alt_max_fd; i++) + { + if ((&alt_fd_list[i] != fd) && (alt_fd_list[i].dev == fd->dev)) + { + rc = -EACCES; + goto alt_fd_lock_exit; + } + } + fd->fd_flags |= ALT_FD_EXCL; + + alt_fd_lock_exit: + + ALT_SEM_POST(alt_fd_list_lock); + return rc; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_unlock.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_unlock.c new file mode 100644 index 0000000..5f50386 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fd_unlock.c @@ -0,0 +1,56 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "priv/alt_file.h" + +/* + * alt_fd_unlock() is the inverse of alt_fd_lock(). It is called as a + * consequence of a TIOCNXCL ioctl request, e.g: + * + * ioctl (fd, TIOCNXCL, NULL); + * + * It enables multiple file descriptors to exist for the same device. This + * is normally the case, but it may have been disabled by a previous call to + * alt_fd_lock(). + * + * Return zero on sucess, and a negative value on failure. + * + * The current implementation always succeeds. + */ + +int alt_fd_unlock (alt_fd* fd) +{ + fd->fd_flags &= ~ALT_FD_EXCL; + return 0; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_find_dev.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_find_dev.c new file mode 100644 index 0000000..964f63f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_find_dev.c @@ -0,0 +1,88 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include +#include + +#include "sys/alt_dev.h" +#include "priv/alt_file.h" + +#include "alt_types.h" + +/* + * alt_find_dev() is used by open() in order to locate a previously registered + * device with the name "name". The input argument "llist" is a pointer to the + * head of the device list to search. + * + * The return value is a pointer to the matching device, or NULL if there is + * no match. + * + * "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) +{ + alt_dev* next = (alt_dev*) llist->next; + alt_32 len; + + len = strlen(name) + 1; + + /* + * 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) + { + + /* + * memcmp() is used here rather than strcmp() in order to reduce the size + * of the executable. + */ + + if (!memcmp (next->name, name, len)) + { + /* match found */ + + return next; + } + next = (alt_dev*) next->llist.next; + } + + /* No match found */ + + return NULL; +} + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_find_file.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_find_file.c new file mode 100644 index 0000000..ae30e93 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_find_file.c @@ -0,0 +1,89 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include +#include + +#include "sys/alt_dev.h" +#include "priv/alt_file.h" + +#include "alt_types.h" + +/* + * alt_find_file() is used by open() in order to locate a previously registered + * filesystem that owns that mount point that contains the file named "name". + * + * The return value is a pointer to the matching filesystem, or NULL if there is + * no match. + * + * A match is considered to have been found if the filesystem name followed by + * 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) +{ + alt_dev* next = (alt_dev*) alt_fs_list.next; + + alt_32 len; + + /* + * 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) + { + len = strlen(next->name); + + if (next->name[len-1] == '/') + { + len -= 1; + } + + if (((name[len] == '/') || (name[len] == '\0')) && + !memcmp (next->name, name, len)) + { + /* match found */ + + return next; + } + next = (alt_dev*) next->llist.next; + } + + /* No match found */ + + return NULL; +} + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_flash_dev.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_flash_dev.c new file mode 100644 index 0000000..0acffc7 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_flash_dev.c @@ -0,0 +1,69 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* Alt_flash.c - Functions to register a flash device to the "generic" flash * +* interface * +* * +* Author PRR * +* * +******************************************************************************/ + +#include +#include "sys/alt_llist.h" +#include "sys/alt_flash_dev.h" +#include "priv/alt_file.h" + +ALT_LLIST_HEAD(alt_flash_dev_list); + +alt_flash_fd* alt_flash_open_dev(const char* name) +{ + alt_flash_dev* dev = (alt_flash_dev*)alt_find_dev(name, &alt_flash_dev_list); + + if ((dev) && dev->open) + { + return dev->open(dev, name); + } + + return dev; +} + +void alt_flash_close_dev(alt_flash_fd* fd) +{ + if (fd && fd->close) + { + fd->close(fd); + } + return; +} + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_fork.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fork.c new file mode 100644 index 0000000..b6edbb5 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fork.c @@ -0,0 +1,57 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_warning.h" +#include "sys/alt_errno.h" +#include "os/alt_syscall.h" + +/* + * The fork() system call is used by newlib to create a duplicate copy of the + * curent process. This is unsupported in the HAL environment. However a + * "do-nothing" implementation is still provied for newlib compatability. + * + * ALT_FORK is mapped onto the fork() system call in alt_syscall.h + */ + +int ALT_FORK (void) +{ + /* Generate a link time warning, should this function ever be called. */ + + ALT_STUB_WARNING(fork); + + /* Indicate an error */ + + ALT_ERRNO = ENOSYS; + return -1; +} + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_fs_reg.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fs_reg.c new file mode 100644 index 0000000..e88a340 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fs_reg.c @@ -0,0 +1,75 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "sys/alt_dev.h" +#include "priv/alt_file.h" + +/* + * The alt_fs_reg() function is used to register a file system. Once registered + * a device can be accessed using the standard posix calls: open(), read(), + * write() etc. + * + * System behaviour is undefined in the event that a file system is registered + * with a name that conflicts with an existing device or file system. + * + * alt_fs_reg() is not thread safe in the sense that there should be no other + * thread using the file system list at the time that alt_dev_reg() is called. In + * practice this means that alt_fs_reg() should only be called while operating + * in a single threaded mode. The expectation is that it will only be called + * by the file system initilisation functions invoked by alt_sys_init(), which in + * turn should only be called by the single threaded C startup code. + * + * A return value of zero indicates success. A negative return value indicates + * failure. + */ + +int alt_fs_reg (alt_dev* dev) +{ + /* + * check that the device has a name. + */ + + if (!dev->name) + { + return -ENODEV; + } + + /* + * register the file system. + */ + + alt_llist_insert(&alt_fs_list, &dev->llist); + + return 0; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_fstat.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fstat.c new file mode 100644 index 0000000..3248764 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_fstat.c @@ -0,0 +1,128 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include + +#include "sys/alt_dev.h" +#include "sys/alt_warning.h" +#include "sys/alt_errno.h" +#include "priv/alt_file.h" +#include "os/alt_syscall.h" + +/* + * The fstat() system call is used to obtain information about the capabilities + * of an open file descriptor. By default file descriptors are marked as + * being character devices. If a device or file system wishes to advertise + * alternative capabilities then they can register an fstat() function within + * their associated alt_dev structure. This will be called to fill in the + * entries in the imput "st" structure. + * + * This function is provided for compatability with newlib. + * + * ALT_FSTAT is mapped onto the fstat() system call in alt_syscall.h + */ + +#ifdef ALT_USE_DIRECT_DRIVERS + +#include "system.h" + +/* + * Provide minimal version that just describes all file descriptors + * as character devices for provided stdio devices. + */ +int ALT_FSTAT (int file, struct stat *st) +{ + switch (file) { +#ifdef ALT_STDIN_PRESENT + case 0: /* stdin file descriptor */ +#endif /* ALT_STDIN_PRESENT */ +#ifdef ALT_STDOUT_PRESENT + case 1: /* stdout file descriptor */ +#endif /* ALT_STDOUT_PRESENT */ +#ifdef ALT_STDERR_PRESENT + case 2: /* stderr file descriptor */ +#endif /* ALT_STDERR_PRESENT */ + st->st_mode = _IFCHR; + return 0; + default: + return -1; + } + +#if !defined(ALT_STDIN_PRESENT) && !defined(ALT_STDOUT_PRESENT) && !defined(ALT_STDERR_PRESENT) + /* Generate a link time warning, should this function ever be called. */ + ALT_STUB_WARNING(fstat); +#endif +} + +#else /* !ALT_USE_DIRECT_DRIVERS */ + +int ALT_FSTAT (int file, struct stat *st) +{ + alt_fd* fd; + + /* + * 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]; + + if (fd) + { + /* Call the drivers fstat() function to fill out the "st" structure. */ + + if (fd->dev->fstat) + { + return fd->dev->fstat(fd, st); + } + + /* + * If no function is provided, mark the fd as belonging to a character + * device. + */ + + else + { + st->st_mode = _IFCHR; + return 0; + } + } + else + { + ALT_ERRNO = EBADFD; + return -1; + } +} + +#endif /* ALT_USE_DIRECT_DRIVERS */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_get_fd.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_get_fd.c new file mode 100644 index 0000000..f42944b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_get_fd.c @@ -0,0 +1,105 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include +#include + +#include "sys/alt_dev.h" +#include "priv/alt_file.h" + +#include "alt_types.h" + +#include "system.h" + +/* + * alt_get_fd() is called to allocate a new file descriptor from the file + * descriptor pool. If a file descriptor is succesfully allocated, it is + * configured to refer to device "dev". + * + * The return value is the index of the file descriptor structure (i.e. + * the offset of the file descriptor within the file descriptor array). A + * negative value indicates failure. + */ + +int alt_get_fd (alt_dev* dev) +{ + alt_32 i; + int rc = -EMFILE; + + /* + * 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); + + /* + * Search through the list of file descriptors, and allocate the first + * free descriptor that's found. + * + * If a free descriptor is found, then the value of "alt_max_fd" is + * updated accordingly. "alt_max_fd" is a 'highwater mark' which + * 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++) + { + if (!alt_fd_list[i].dev) + { + alt_fd_list[i].dev = dev; + if (i > alt_max_fd) + { + alt_max_fd = i; + } + rc = i; + goto alt_get_fd_exit; + } + } + + alt_get_fd_exit: + + /* + * Release the alt_fd_list_lock semaphore now that we are done with the + * file descriptor pool. + */ + + ALT_SEM_POST(alt_fd_list_lock); + + return rc; +} + + + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_getchar.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_getchar.c new file mode 100644 index 0000000..fe5cb32 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_getchar.c @@ -0,0 +1,70 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#ifdef ALT_USE_DIRECT_DRIVERS +#include "system.h" +#include "sys/alt_driver.h" +#include "sys/alt_stdio.h" +#include "priv/alt_file.h" +#include "unistd.h" +#endif +#ifdef ALT_SEMIHOSTING +#include "sys/alt_stdio.h" +#include "unistd.h" +#endif +/* + * Uses the ALT_DRIVER_READ() macro to call directly to driver if available. + * Otherwise, uses newlib provided getchar() routine. + */ +int +alt_getchar(void) +{ +#ifdef ALT_SEMIHOSTING + char c; + read(STDIN_FILENO,&c,1); + return c; +#else +#ifdef ALT_USE_DIRECT_DRIVERS + ALT_DRIVER_READ_EXTERNS(ALT_STDIN_DEV); + char c; + + if (ALT_DRIVER_READ(ALT_STDIN_DEV, &c, 1, alt_fd_list[STDIN_FILENO].fd_flags) <= 0) { + return -1; + } + return c; +#else + return getchar(); +#endif +#endif +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_getpid.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_getpid.c new file mode 100644 index 0000000..b63ec33 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_getpid.c @@ -0,0 +1,47 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "os/alt_syscall.h" + +/* + * The getpid() system call is used by newlib to obtain the current process + * id. Since there is only ever a single process in the HAL environment, + * this just returns a constant. + * + * ALT_GETPID is mapped onto the getpid() system call in alt_syscall.h + */ + +int ALT_GETPID (void) +{ + return 0; +} + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_gettod.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_gettod.c new file mode 100644 index 0000000..46b12c2 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_gettod.c @@ -0,0 +1,125 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include +#include + +#include "sys/alt_alarm.h" +#include "alt_types.h" +#include "os/alt_syscall.h" + +/* + * Macro defining the number of micoseconds in a second. + */ + +#define ALT_US (1000000) + +/* + * "alt_timezone" and "alt_resettime" are the values of the the reset time and + * time zone set through the last call to settimeofday(). By default they are + * zero initialised. + */ + +struct timezone alt_timezone = {0, 0}; +struct timeval alt_resettime = {0, 0}; + +/* + * gettimeofday() can be called to obtain a time structure which indicates the + * current "wall clock" time. This is calculated using the elapsed number of + * system clock ticks, and the value of "alt_resettime" and "alt_timezone" set + * through the last call to settimeofday(). + * + * Warning: if this function is called concurrently with a call to + * settimeofday(), the value returned by gettimeofday() will be unreliable. + * + * ALT_GETTIMEOFDAY is mapped onto the gettimeofday() system call in + * alt_syscall.h + */ + + +#if defined (__GNUC__) && (__GNUC__ >= 4) +int ALT_GETTIMEOFDAY (struct timeval *ptimeval, void *ptimezone_vptr) +{ + struct timezone *ptimezone = (struct timezone*)ptimezone_vptr; +#else +int ALT_GETTIMEOFDAY (struct timeval *ptimeval, struct timezone *ptimezone) +{ +#endif + + alt_u32 nticks = alt_nticks (); + alt_u32 tick_rate = alt_ticks_per_second (); + + /* + * Check to see if the system clock is running. This is indicated by a + * non-zero system clock rate. If the system clock is not running, an error + * is generated and the contents of "ptimeval" and "ptimezone" are not + * updated. + */ + + if (tick_rate) + { + ptimeval->tv_sec = alt_resettime.tv_sec + nticks/tick_rate; + ptimeval->tv_usec = alt_resettime.tv_usec + + (alt_u32)(((alt_u64)nticks*(ALT_US/tick_rate))%ALT_US); + + while(ptimeval->tv_usec < 0) { + if (ptimeval->tv_sec <= 0) + { + ptimeval->tv_sec = 0; + ptimeval->tv_usec = 0; + break; + } + else + { + ptimeval->tv_sec--; + ptimeval->tv_usec += ALT_US; + } + } + + while(ptimeval->tv_usec >= ALT_US) { + ptimeval->tv_sec++; + ptimeval->tv_usec -= ALT_US; + } + + if (ptimezone) + { + ptimezone->tz_minuteswest = alt_timezone.tz_minuteswest; + ptimezone->tz_dsttime = alt_timezone.tz_dsttime; + } + + return 0; + } + + return -ENOTSUP; +} + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_gmon.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_gmon.c new file mode 100644 index 0000000..fa1cb1d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_gmon.c @@ -0,0 +1,272 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include +#include +#include + +#include "priv/nios2_gmon_data.h" + +#include "sys/alt_irq.h" +#include "sys/alt_alarm.h" + + +/* Macros */ + +/* How large should the bins be which we use to generate the histogram */ +#define PCSAMPLE_BYTES_PER_BUCKET 32 + +#define NIOS2_READ_EA(dest) __asm__ ("mov %0, ea" : "=r" (dest)) + +/* The compiler inserts calls to mcount() at the start of + * every function call. The structure mcount_fn_arc records t + * he return address of the function called (in from_pc) + * and the return address of the mcount function + * (in self_pc). The number of times this arc is executed is + * recorded in the field count. + */ +struct mcount_fn_arc +{ + struct mcount_fn_arc * next; + void * from_pc; + unsigned int count; +}; + +/* We need to maintain a list of pointers to the heads of each adjacency + * list so that we can find them when writing out the gmon.out file. Since + * we don't know at the start of program execution how many functions will + * be called we use a list structure to do this. + */ +struct mcount_fn_entry +{ + struct mcount_fn_entry * next; + void * self_pc; + struct mcount_fn_arc * arc_head; +}; + +/* function prototypes */ + +void __mcount_record(void * self_pc, void * from_pc, struct mcount_fn_entry * fn_entry, struct mcount_fn_entry * * fn_head) __attribute__ ((no_instrument_function)); + +static __inline__ void * mcount_allocate(unsigned int size) __attribute__ ((no_instrument_function)); +static int nios2_pcsample_init(void) __attribute__ ((no_instrument_function)); +static alt_u32 nios2_pcsample(void* alarm) __attribute__ ((no_instrument_function)); + +/* global variables */ + +/* stext and etext are defined in the linker script */ +extern char stext[]; +extern char etext[]; + +/* Is the PC sampling stuff enabled yet? */ +static int pcsample_need_init = 1; + +#define HASH_BUCKETS 64 /* Must be a power of 2 */ + +/* This points to the list of adjacency list pointers. */ +struct mcount_fn_entry * __mcount_fn_head[HASH_BUCKETS]; + +/* pointer to the in-memory buffer containing the histogram */ +static unsigned short* s_pcsamples = 0; + +/* the address of the start and end of text section */ +static const unsigned int s_low_pc = (unsigned int)stext; +static const unsigned int s_high_pc = (unsigned int)etext; + +/* the alarm structure to register for pc sampling */ +static alt_alarm s_nios2_pcsample_alarm; + +unsigned int alt_gmon_data[GMON_DATA_SIZE] = +{ + 0x6e6f6d67, /* "gmon" */ + GMON_DATA_SIZE, + 0, + (unsigned int)stext, + (unsigned int)etext, + PCSAMPLE_BYTES_PER_BUCKET, + 0, + (unsigned int)__mcount_fn_head, + (unsigned int)(__mcount_fn_head + HASH_BUCKETS) +}; + +/* This holds the current slab of memory we're allocating out of */ +static char * mcount_slab_ptr = 0; +static int mcount_slab_size = 0; + +#define MCOUNT_SLAB_INCREMENT 1020 + + +/* + * We can't use malloc to allocate memory because that's too complicated, and + * can't be called at interrupt time. Use the lower level allocator instead + * because that's interrupt safe (and because we never free anything). + * + * For speed, we allocate a block of data at once. + */ +static __inline__ void * mcount_allocate(unsigned int size) +{ + void * data; + + if (size > mcount_slab_size) + { + mcount_slab_ptr = sbrk(MCOUNT_SLAB_INCREMENT); + mcount_slab_size = MCOUNT_SLAB_INCREMENT; + } + + data = mcount_slab_ptr; + mcount_slab_ptr += size; + mcount_slab_size -= size; + + return data; +} + + +/* + * Add the arc with the values of frompc and topc given to the graph. + * This function might be called at interrupt time so must be able to + * cope with reentrancy. + * + * The fast case, where we have already allocated a function arc, has been + * handled by the assmebler code. + */ +void __mcount_record(void * self_pc, void * from_pc, struct mcount_fn_entry * fn_entry, struct mcount_fn_entry * * fn_head) +{ + alt_irq_context context; + struct mcount_fn_arc * arc_entry; + + /* Keep trying to start up the PC sampler until it is running. + * (It can't start until the timer is going). + */ + if (pcsample_need_init) + { + pcsample_need_init = 0; + pcsample_need_init = nios2_pcsample_init(); + } + + /* + * We must disable interrupts around the allocation and the list update to + * prevent corruption if the instrumented function is re-entrant. + * + * It's safe for the code above to be stepping through the chain and be + * interrupted by this code modifying it - there is an edge case which will + * leave two copies of the same arc on the list (both with count=1), but + * this is dealt with on the host. + */ + context = alt_irq_disable_all(); + + if (fn_entry == NULL) + { + /* Add it to the list of functions we must output later. */ + fn_entry = (struct mcount_fn_entry *)mcount_allocate(sizeof(struct mcount_fn_entry)); + + fn_entry->self_pc = self_pc; + fn_entry->arc_head = NULL; + + fn_entry->next = *fn_head; + *fn_head = fn_entry; + } + + /* We will need a new list entry - if there was a list entry before + * then the assembler code would have handled it. */ + arc_entry = (struct mcount_fn_arc *)mcount_allocate(sizeof(struct mcount_fn_arc)); + + arc_entry->from_pc = from_pc; + arc_entry->count = 1; + + arc_entry->next = fn_entry->arc_head; + fn_entry->arc_head = arc_entry; + + alt_irq_enable_all(context); +} + + +/* + * nios2_pcsample_init starts profiling. + * It is called the first time mcount is called, and on subsequent calls to + * mcount until it returns zero. It initializes the pc histogram and turns on + * timer driven pc sampling. + */ +static int nios2_pcsample_init(void) +{ + unsigned int pcsamples_size; + + /* We sample the PC every tick */ + unsigned int prof_rate = alt_ticks_per_second(); + if (prof_rate == 0) + return 1; + + /* allocate the histogram buffer s_pcsamples */ + pcsamples_size = (s_high_pc - s_low_pc)/PCSAMPLE_BYTES_PER_BUCKET; + s_pcsamples = (unsigned short*)sbrk(pcsamples_size * sizeof(unsigned short)); + + if (s_pcsamples != 0) + { + /* initialize the buffer to zero */ + memset(s_pcsamples, 0, pcsamples_size * sizeof(unsigned short)); + + alt_gmon_data[GMON_DATA_PROFILE_DATA] = (int)s_pcsamples; + alt_gmon_data[GMON_DATA_PROFILE_RATE] = prof_rate; + + /* Sample every tick (it's cheap) */ + alt_alarm_start(&s_nios2_pcsample_alarm, 1, nios2_pcsample, 0); + } + + return 0; +} + + +/* + * Sample the PC value and store it in the histogram + */ +static alt_u32 nios2_pcsample(void* context) +{ + unsigned int pc=0; + unsigned int bucket; + + /* read the exception return address - this will be + * inaccurate if there are nested interrupts but we + * assume that this is rare and the inaccuracy will + * not be great */ + NIOS2_READ_EA(pc); + + /* + * If we're within the profilable range then increment the relevant + * bucket in the histogram + */ + if (pc >= s_low_pc && pc < s_high_pc && s_pcsamples != 0) + { + bucket = (pc - s_low_pc)/PCSAMPLE_BYTES_PER_BUCKET; + s_pcsamples[bucket]++; + } + + /* Sample every tick */ + return 1; +} + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_icache_flush.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_icache_flush.c new file mode 100644 index 0000000..1662991 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_icache_flush.c @@ -0,0 +1,84 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "nios2.h" +#include "system.h" + +#include "alt_types.h" +#include "sys/alt_cache.h" + +/* + * alt_icache_flush() is called to flush the instruction cache for a memory + * region of length "len" bytes, starting at address "start". + */ + +void alt_icache_flush (void* start, alt_u32 len) +{ +#if NIOS2_ICACHE_SIZE > 0 + + char* i; + char* end; + + /* + * This is the most we would ever need to flush. + */ + + if (len > NIOS2_ICACHE_SIZE) + { + len = NIOS2_ICACHE_SIZE; + } + + end = ((char*) start) + len; + + for (i = start; i < end; i+= NIOS2_ICACHE_LINE_SIZE) + { + __asm__ volatile ("flushi %0" :: "r" (i)); + } + + /* + * For an unaligned flush request, we've got one more line left. + * Note that this is dependent on NIOS2_ICACHE_LINE_SIZE to be a + * multiple of 2 (which it always is). + */ + + if (((alt_u32) start) & (NIOS2_ICACHE_LINE_SIZE - 1)) + { + __asm__ volatile ("flushi %0" :: "r" (i)); + } + + /* + * Having flushed the cache, flush any stale instructions in the + * pipeline + */ + + __asm__ volatile ("flushp"); + +#endif /* NIOS2_ICACHE_SIZE > 0 */ +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_icache_flush_all.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_icache_flush_all.c new file mode 100644 index 0000000..dc40ea8 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_icache_flush_all.c @@ -0,0 +1,46 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "nios2.h" +#include "system.h" + +#include "alt_types.h" +#include "sys/alt_cache.h" + +/* + * alt_icache_flush_all() is called to flush the entire instruction cache. + */ + +void alt_icache_flush_all (void) +{ +#if NIOS2_ICACHE_SIZE > 0 + alt_icache_flush (0, NIOS2_ICACHE_SIZE); +#endif +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_iic.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_iic.c new file mode 100644 index 0000000..4821f25 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_iic.c @@ -0,0 +1,106 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ +#include "system.h" + +/* + * This file implements the HAL Enhanced interrupt API for Nios II processors + * with an internal interrupt controller (IIC). For most routines, this serves + * as a wrapper layer over the legacy interrupt API (which must be used with + * the IIC only). + * + * Use of the enhanced API is recommended so that application and device + * drivers are compatible with a Nios II system configured with an external + * interrupt controller (EIC), or IIC. This will afford maximum portability. + * + * If an EIC is present, the EIC device driver must provide these routines, + * because their operation will be specific to that EIC type. + */ +#ifndef NIOS2_EIC_PRESENT +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT + +#include "sys/alt_irq.h" +#include "priv/alt_iic_isr_register.h" +#include "priv/alt_legacy_irq.h" + +/** @Function Description: This function registers an interrupt handler. + * If the function is succesful, then the requested interrupt will be enabled upon + * return. Registering a NULL handler will disable the interrupt. + * @API Type: External + * @param ic_id Ignored. + * @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) +{ + return alt_iic_isr_register(ic_id, irq, isr, isr_context, flags); +} + +/** @Function Description: This function enables a single interrupt. + * @API Type: External + * @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) +{ + return alt_irq_enable(irq); +} + +/** @Function Description: This function disables a single interrupt. + * @API Type: External + * @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) +{ + return alt_irq_disable(irq); +} + +/** @Function Description: This function to determine if corresponding + * interrupt is enabled. + * @API Type: External + * @param ic_id Ignored. + * @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) +{ + alt_u32 irq_enabled; + + NIOS2_READ_IENABLE(irq_enabled); + + return (irq_enabled & (1 << irq)) ? 1: 0; +} + +#endif /* ALT_ENHANCED_INTERRUPT_API_PRESENT */ +#endif /* NIOS2_EIC_PRESENT */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_iic_isr_register.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_iic_isr_register.c new file mode 100644 index 0000000..2e6bf5b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_iic_isr_register.c @@ -0,0 +1,104 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ +#include +#include "system.h" + +/* + * Provides an interrupt registry mechanism for the any CPUs internal interrupt + * controller (IIC) when the enhanced interrupt API is active. + */ +#ifndef ALT_CPU_EIC_PRESENT +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT + +#include "alt_types.h" +#include "sys/alt_irq.h" +#include "priv/alt_iic_isr_register.h" + +/* + * The header, alt_irq_entry.h, contains the exception entry point, and is + * provided by the processor component. It is included here, so that the code + * will be added to the executable only if alt_irq_register() is present, i.e. + * if no interrupts are registered - there's no need to provide any + * interrupt handling. + */ + +#include "sys/alt_irq_entry.h" + +/* + * The header, alt_irq_table.h contains a table describing which function + * handles each interrupt. + */ + +#include "priv/alt_irq_table.h" + +/** @Function Description: This function registers an interrupt handler. + * If the function is succesful, then the requested interrupt will be enabled + * upon return. Registering a NULL handler will disable the interrupt. + * + * @API Type: External + * @param ic_id Interrupt controller ID + * @param irq IRQ ID number + * @param isr Pointer to interrupt service routine + * @param isr_context Opaque pointer passed to ISR + * @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) +{ + int rc = -EINVAL; + int id = irq; /* IRQ interpreted as the interrupt ID. */ + alt_irq_context status; + + if (id < ALT_NIRQ) + { + /* + * 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(); + + alt_irq[id].handler = isr; + alt_irq[id].context = isr_context; + + rc = (isr) ? alt_ic_irq_enable(ic_id, id) : alt_ic_irq_disable(ic_id, id); + + alt_irq_enable_all(status); + } + + return rc; +} + +#endif /* ALT_ENHANCED_INTERRUPT_API_PRESENT */ +#endif /* ALT_CPU_EIC_PRESENT */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_instruction_exception_entry.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_instruction_exception_entry.c new file mode 100644 index 0000000..b993811 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_instruction_exception_entry.c @@ -0,0 +1,206 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2008 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ +#include "sys/alt_exceptions.h" +#include "nios2.h" +#include "alt_types.h" +#include "system.h" + +/* + * This file implements support for calling user-registered handlers for + * instruction-generated exceptions. This handler could also be reached + * in the event of a spurious interrupt. + * + * The handler code is optionally enabled through the "Enable + * Instruction-related Exception API" HAL BSP setting, which will + * define the macro below. + */ +#ifdef ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API + +/* Function pointer to exception callback routine */ +alt_exception_result (*alt_instruction_exception_handler) + (alt_exception_cause, alt_u32, alt_u32) = 0x0; + +/* Link entry routine to .exceptions section */ +int alt_instruction_exception_entry (alt_u32 exception_pc) + __attribute__ ((section (".exceptions"))); + +/* + * This is the entry point for instruction-generated exceptions handling. + * This routine will be called by alt_exceptions_entry.S, after it determines + * that an exception could not be handled by handlers that preceed that + * of instruction-generated exceptions (such as interrupts). + * + * For this to function properly, you must register an exception handler + * using alt_instruction_exception_register(). This routine will call + * 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) +{ + alt_u32 cause, badaddr; + +/* + * If the processor hardware has the optional EXCEPTIONS & BADADDR registers, + * read them and pass their content to the user handler. These are always + * present if the MMU or MPU is enabled, and optionally for other advanced + * exception types via the "Extra exceptions information" setting in the + * processor (hardware) configuration. + * + * If these registers are not present, the cause field will be set to + * 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); + cause = ( (cause & NIOS2_EXCEPTION_REG_CAUSE_MASK) >> + NIOS2_EXCEPTION_REG_CAUSE_OFST ); + + NIOS2_READ_BADADDR(badaddr); +#else + cause = NIOS2_EXCEPTION_CAUSE_NOT_PRESENT; + badaddr = 0; +#endif /* NIOS2_HAS_EXTRA_EXCEPTION_INFO */ + + if(alt_instruction_exception_handler) { + /* + * 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); + } + /* + * We got here because an instruction-generated exception occured, but no + * handler is present. We do not presume to know how to handle it. If the + * debugger is present, break, otherwise hang. + * + * If you've reached here in the debugger, consider examining the + * EXCEPTIONS register cause bit-field, which was read into the 'cause' + * variable above, and compare it against the exceptions-type enumeration + * in alt_exceptions.h. This register is availabe if the MMU or MPU is + * present, or if the "Extra exceptions information" hardware option is + * selected. + * + * If you get here then one of the following could have happened: + * + * - An instruction-generated exception occured, and the processor + * does not have the extra exceptions feature enabled, or you + * have not registered a handler using + * alt_instruction_exception_register() + * + * Some examples of instruction-generated exceptions and why they + * might occur: + * + * - Your program could have been compiled for a full-featured + * Nios II core, but it is running on a smaller core, and + * instruction emulation has been disabled by defining + * ALT_NO_INSTRUCTION_EMULATION. + * + * You can work around the problem by re-enabling instruction + * emulation, or you can figure out why your program is being + * compiled for a system other than the one that it is running on. + * + * - Your program has executed a trap instruction, but has not + * implemented a handler for this instruction. + * + * - Your program has executed an illegal instruction (one which is + * not defined in the instruction set). + * + * - Your processor includes an MMU or MPU, and you have enabled it + * before registering an exception handler to service exceptions it + * generates. + * + * The problem could also be hardware related: + * - If your hardware is broken and is generating spurious interrupts + * (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(); +#else + while(1) + ; +#endif /* NIOS2_HAS_DEBUG_STUB */ + } + + /* We should not get here. Remove compiler warning. */ + return NIOS2_EXCEPTION_RETURN_REISSUE_INST; +} + +#endif /* ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API */ + +/* + * This routine indicates whether a particular exception cause will have + * set a valid address into the BADADDR register, which is included + * in the arguments to a user-registered instruction-generated exception + * handler. Many exception types do not set valid contents in BADADDR; + * this is a convenience routine to easily test the validity of that + * argument in your handler. + * + * Note that this routine will return false (0) for causes + * NIOS2_EXCEPTION_TLB_MISS and NIOS2_EXCEPTION_ECC_TLB_ERR. + * You must read the TLBMISC.D field to determine if BADADDR + * is valid for these (valid if TLBMISC.D = 1). + * + * Arguments: + * cause: The 5-bit exception cause field of the EXCEPTIONS register, + * shifted to the LSB position. You may pass the 'cause' argument + * in a handler you registered directy to this routine. + * + * 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) +{ + switch (cause) { + case NIOS2_EXCEPTION_SUPERVISOR_ONLY_DATA_ADDR: + case NIOS2_EXCEPTION_MISALIGNED_DATA_ADDR: + 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; + + case NIOS2_EXCEPTION_TLB_MISS: + case NIOS2_EXCEPTION_ECC_TLB_ERR: + return 0; + + default: + return 0; + } +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_instruction_exception_register.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_instruction_exception_register.c new file mode 100644 index 0000000..395c644 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_instruction_exception_register.c @@ -0,0 +1,82 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2008 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ +#include "sys/alt_exceptions.h" +#include "alt_types.h" +#include "system.h" + +/* + * This file implements support for calling user-registered handlers for + * instruction-generated exceptions. + * + * The registry API is optionally enabled through the "Enable + * Instruction-related Exception API" HAL BSP setting, which will + * define the macro below. + */ +#ifdef ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API + +/* + * The header, alt_exception_handler_registry.h contains a struct describing + * the registered exception handler + */ +#include "priv/alt_exception_handler_registry.h" + +/* + * Pull in the exception entry assembly code. This will not be linked in + * unless this object is linked into the executable (i.e. only if + * alt_instruction_exception_register() is called). + */ +__asm__( "\n\t.globl alt_exception" ); + +/* + * alt_instruction_exception_register() is called to register a handler to + * service instruction-generated exceptions that are not handled by the + * default exception handler code (interrupts, and optionally unimplemented + * instructions and traps). + * + * Passing null (0x0) in the handler argument will disable a previously- + * registered handler. + * + * Note that if no handler is registered, exceptions that are not processed + * using the built-in handler (interrupts, and optionally unimplemented + * instructions and traps) are treated as unknown exceptions, resulting + * in either a break or an infinite loop. + */ +void alt_instruction_exception_register ( + alt_exception_result (*exception_handler)( + alt_exception_cause cause, + alt_u32 exception_pc, + alt_u32 bad_addr) ) +{ + alt_instruction_exception_handler = exception_handler; +} + +#endif /* ALT_INCLUDE_INSTRUCTION_RELATED_EXCEPTION_API */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_io_redirect.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_io_redirect.c new file mode 100644 index 0000000..049ed62 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_io_redirect.c @@ -0,0 +1,98 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include +#include +#include + +#include "sys/alt_dev.h" +#include "priv/alt_file.h" + + +/* + * alt_open_fd() is similar to open() in that it is used to obtain a file + * descriptor for the file named "name". The "flags" and "mode" arguments are + * identical to the "flags" and "mode" arguments of open(). + * + * The distinction between the two functions is that the file descriptor + * structure to use is passed in as an argument, rather than allocated from the + * list of free file descriptors. + * + * This is used by alt_io_redirect() to redirect the stdin, stdout and stderr + * file descriptors to point to new devices. + * + * 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) +{ + int old; + + old = open (name, flags, mode); + + if (old >= 0) + { + fd->dev = alt_fd_list[old].dev; + fd->priv = alt_fd_list[old].priv; + fd->fd_flags = alt_fd_list[old].fd_flags; + + alt_release_fd (old); + } +} + +/* + * alt_io_redirect() is called once the device/filesystem lists have been + * initialised, but before main(). Its function is to redirect standard in, + * standard out and standard error so that they point to the devices selected by + * the user (as defined in system.h). + * + * Prior to the call to this function, io is directed towards /dev/null. If + * i/o can not be redirected to the requested device, for example if the device + * does not exist, then it remains directed at /dev/null. + */ + +void alt_io_redirect(const char* stdout_dev, + const char* stdin_dev, + const char* stderr_dev) +{ + /* Redirect the channels */ + + alt_open_fd (&alt_fd_list[STDOUT_FILENO], stdout_dev, O_WRONLY, 0777); + alt_open_fd (&alt_fd_list[STDIN_FILENO], stdin_dev, O_RDONLY, 0777); + alt_open_fd (&alt_fd_list[STDERR_FILENO], stderr_dev, O_WRONLY, 0777); +} + + + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_ioctl.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_ioctl.c new file mode 100644 index 0000000..510b40d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_ioctl.c @@ -0,0 +1,170 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "sys/ioctl.h" +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "priv/alt_file.h" +#include "os/alt_syscall.h" + +/* + * The ioctl() system call is provided so that application code can manipulate + * the i/o capabilities of a device in device specific ways. This is identical + * to the standard posix ioctl() function. + * + * In general this implementation simply vectors ioctl requests to the + * apropriate drivers ioctl function (as registered in the drivers alt_dev + * structure). + * + * However in the case of devices (as oposed to filesystem), the TIOCEXCL and + * TIOCNXCL requests are handled without reference to the driver. These + * requests are used to lock/release a device for exclusive access. + * + * Handling these requests centrally eases the task of device driver + * development. + * + * ALT_IOCTL is mapped onto the ioctl() system call in alt_syscall.h + */ + +#ifdef ALT_USE_DIRECT_DRIVERS + +#include "system.h" +#include "sys/alt_driver.h" + +/* + * Provide minimal version that calls ioctl routine of provided stdio devices. + */ +int ALT_IOCTL (int file, int req, void* arg) +{ +#ifdef ALT_STDIN_PRESENT + ALT_DRIVER_IOCTL_EXTERNS(ALT_STDIN_DEV); +#endif +#ifdef ALT_STDOUT_PRESENT + ALT_DRIVER_IOCTL_EXTERNS(ALT_STDOUT_DEV); +#endif +#ifdef ALT_STDERR_PRESENT + ALT_DRIVER_IOCTL_EXTERNS(ALT_STDERR_DEV); +#endif + +#if !defined(ALT_STDIN_PRESENT) && !defined(ALT_STDOUT_PRESENT) && !defined(ALT_STDERR_PRESENT) + /* Generate a link time warning, should this function ever be called. */ + ALT_STUB_WARNING(ioctl); +#endif + + switch (file) { +#ifdef ALT_STDIN_PRESENT + case 0: /* stdin file descriptor */ + return ALT_DRIVER_IOCTL(ALT_STDIN_DEV, req, arg); +#endif /* ALT_STDIN_PRESENT */ +#ifdef ALT_STDOUT_PRESENT + case 1: /* stdout file descriptor */ + return ALT_DRIVER_IOCTL(ALT_STDOUT_DEV, req, arg); +#endif /* ALT_STDOUT_PRESENT */ +#ifdef ALT_STDERR_PRESENT + case 2: /* stderr file descriptor */ + return ALT_DRIVER_IOCTL(ALT_STDERR_DEV, req, arg); +#endif /* ALT_STDERR_PRESENT */ + default: + ALT_ERRNO = EBADFD; + return -1; + } +} + +#else /* !ALT_USE_DIRECT_DRIVERS */ + +int ALT_IOCTL (int file, int req, void* arg) +{ + alt_fd* fd; + int rc; + + /* + * 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]; + + if (fd) + { + + /* + * In the case of device drivers (not file systems) handle the TIOCEXCL + * and TIOCNXCL requests as special cases. + */ + + if (fd->fd_flags & ALT_FD_DEV) + { + if (req == TIOCEXCL) + { + rc = alt_fd_lock (fd); + goto ioctl_done; + } + else if (req == TIOCNXCL) + { + rc = alt_fd_unlock (fd); + goto ioctl_done; + } + } + + /* + * If the driver provides an ioctl() function, call that to handle the + * request, otherwise set the return code to indicate that the request + * could not be processed. + */ + + if (fd->dev->ioctl) + { + rc = fd->dev->ioctl(fd, req, arg); + } + else + { + rc = -ENOTTY; + } + } + else + { + rc = -EBADFD; + } + +ioctl_done: + + if (rc < 0) + { + ALT_ERRNO = -rc; + } + return rc; +} + +#endif /* ALT_USE_DIRECT_DRIVERS */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_entry.S b/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_entry.S new file mode 100644 index 0000000..8ee89e1 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_entry.S @@ -0,0 +1,108 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "system.h" + +/* + * This is the interrupt exception entry point code, which saves all the + * registers and calls the interrupt handler. It should be pulled in using + * a .globl from alt_irq_register.c. This scheme is used so that if an + * interrupt is never registered, then this code will not appear in the + * generated executable, thereby improving code footprint. + */ + + /* + * Explicitly allow the use of r1 (the assembler temporary register) + * within this code. This register is normally reserved for the use of + * the compiler. + */ + .set noat + + /* + * Pull in the exception handler register save code. + */ + .globl alt_exception + + .globl alt_irq_entry + .section .exceptions.entry.label, "xa" +alt_irq_entry: + + /* + * Section .exceptions.entry is in alt_exception_entry.S + * This saves all the caller saved registers and reads estatus into r5 + */ + + .section .exceptions.irqtest, "xa" + +#ifdef ALT_CI_INTERRUPT_VECTOR_N + /* + * Use the interrupt vector custom instruction if present to accelerate + * this code. + * If the interrupt vector custom instruction returns a negative + * value, there are no interrupts active (estatus.pie is 0 + * or ipending is 0) so assume it is a software exception. + */ + custom ALT_CI_INTERRUPT_VECTOR_N, r4, r0, r0 + blt r4, r0, .Lnot_irq +#else + /* + * Test to see if the exception was a software exception or caused + * by an external interrupt, and vector accordingly. + */ + rdctl r4, ipending + andi r2, r5, 1 + beq r2, zero, .Lnot_irq + beq r4, zero, .Lnot_irq +#endif /* ALT_CI_INTERRUPT_VECTOR_N */ + + .section .exceptions.irqhandler, "xa" + /* + * Now that all necessary registers have been preserved, call + * alt_irq_handler() to process the interrupts. + */ + + call alt_irq_handler + + .section .exceptions.irqreturn, "xa" + + br .Lexception_exit + + .section .exceptions.notirq.label, "xa" + +.Lnot_irq: + + /* + * Section .exceptions.exit is in alt_exception_entry.S + * This restores all the caller saved registers + */ + + .section .exceptions.exit.label +.Lexception_exit: + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_handler.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_handler.c new file mode 100644 index 0000000..bb52fc8 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_handler.c @@ -0,0 +1,169 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include "system.h" + +/* + * This interrupt handler only works with an internal interrupt controller + * (IIC). Processors with an external interrupt controller (EIC) use an + * implementation provided by an EIC driver. + */ +#ifndef ALT_CPU_EIC_PRESENT + +#include "sys/alt_irq.h" +#include "os/alt_hooks.h" + +#include "alt_types.h" + +/* + * A table describing each interrupt handler. The index into the array is the + * interrupt id associated with the handler. + * + * When an interrupt occurs, the associated handler is called with + * the argument stored in the context member. + */ +struct ALT_IRQ_HANDLER +{ +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT + void (*handler)(void*); +#else + void (*handler)(void*, alt_u32); +#endif + void *context; +} alt_irq[ALT_NIRQ]; + +/* + * alt_irq_handler() is called by the interrupt exception handler in order to + * process any outstanding interrupts. + * + * It is defined here since it is linked in using weak linkage. + * This means that if there is never a call to alt_irq_register() (above) then + * this function will not get linked in to the executable. This is acceptable + * since if no handler is ever registered, then an interrupt can never occur. + * + * If Nios II interrupt vector custom instruction exists, use it to accelerate + * the dispatch of interrupt handlers. The Nios II interrupt vector custom + * instruction is present if the macro ALT_CI_INTERRUPT_VECTOR defined. + */ + +void alt_irq_handler (void) __attribute__ ((section (".exceptions"))); +void alt_irq_handler (void) +{ +#ifdef ALT_CI_INTERRUPT_VECTOR + alt_32 offset; + char* alt_irq_base = (char*)alt_irq; +#else + alt_u32 active; + alt_u32 mask; + alt_u32 i; +#endif /* ALT_CI_INTERRUPT_VECTOR */ + + /* + * Notify the operating system that we are at interrupt level. + */ + + ALT_OS_INT_ENTER(); + +#ifdef ALT_CI_INTERRUPT_VECTOR + /* + * Call the interrupt vector custom instruction using the + * ALT_CI_INTERRUPT_VECTOR macro. + * It returns the offset into the vector table of the lowest-valued pending + * interrupt (corresponds to highest priority) or a negative value if none. + * The custom instruction assumes that each table entry is eight bytes. + */ + while ((offset = ALT_CI_INTERRUPT_VECTOR) >= 0) { + struct ALT_IRQ_HANDLER* handler_entry = + (struct ALT_IRQ_HANDLER*)(alt_irq_base + offset); +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT + handler_entry->handler(handler_entry->context); +#else + handler_entry->handler(handler_entry->context, offset >> 3); +#endif + } +#else /* ALT_CI_INTERRUPT_VECTOR */ + /* + * Obtain from the interrupt controller a bit list of pending interrupts, + * and then process the highest priority interrupt. This process loops, + * loading the active interrupt list on each pass until alt_irq_pending() + * return zero. + * + * The maximum interrupt latency for the highest priority interrupt is + * reduced by finding out which interrupts are pending as late as possible. + * 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 (); + + do + { + i = 0; + mask = 1; + + /* + * Test each bit in turn looking for an active interrupt. Once one is + * found, the interrupt handler asigned by a call to alt_irq_register() is + * called to clear the interrupt condition. + */ + + do + { + if (active & mask) + { +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT + alt_irq[i].handler(alt_irq[i].context); +#else + alt_irq[i].handler(alt_irq[i].context, i); +#endif + break; + } + mask <<= 1; + i++; + + } while (1); + + active = alt_irq_pending (); + + } while (active); +#endif /* ALT_CI_INTERRUPT_VECTOR */ + + /* + * Notify the operating system that interrupt processing is complete. + */ + + ALT_OS_INT_EXIT(); +} + +#endif /* ALT_CPU_EIC_PRESENT */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_register.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_register.c new file mode 100644 index 0000000..cf7261e --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_register.c @@ -0,0 +1,102 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ +#include +#include "system.h" + +/* + * This interrupt registry mechanism works with the Nios II internal interrupt + * controller (IIC) only. Systems with an external interrupt controller (EIC), + * or those with the IIC who are using the enhanced interrupt API will + * utilize the alt_ic_isr_register() routine to register an interrupt. + */ +#ifndef NIOS2_EIC_PRESENT + +#include "sys/alt_irq.h" +#include "priv/alt_legacy_irq.h" +#include "os/alt_hooks.h" + +#include "alt_types.h" + +/* + * The header, alt_irq_entry.h, contains the exception entry point, and is + * provided by the processor component. It is included here, so that the code + * will be added to the executable only if alt_irq_register() is present, i.e. + * if no interrupts are registered - there's no need to provide any + * interrupt handling. + */ + +#include "sys/alt_irq_entry.h" + +/* + * The header, alt_irq_table.h contains a table describing which function + * handles each interrupt. + */ + +#include "priv/alt_irq_table.h" + +/* + * alt_irq_handler() is called to register an interrupt handler. If the + * function is succesful, then the requested interrupt will be enabled upon + * return. Registering a NULL handler will disable the interrupt. + * + * The return value is 0 if the interrupt handler was registered and the + * interrupt was enabled, otherwise it is negative. + */ + +int alt_irq_register (alt_u32 id, + void* context, + alt_isr_func handler) +{ + int rc = -EINVAL; + alt_irq_context status; + + if (id < ALT_NIRQ) + { + /* + * 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 (); + + alt_irq[id].handler = handler; + alt_irq[id].context = context; + + rc = (handler) ? alt_irq_enable (id): alt_irq_disable (id); + + alt_irq_enable_all(status); + } + return rc; +} +#endif /* NIOS2_EIC_PRESENT */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_vars.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_vars.c new file mode 100644 index 0000000..4f4d140 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_irq_vars.c @@ -0,0 +1,47 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "alt_types.h" + +#include "system.h" + +/* + * These global variables are used to save the current list of enabled + * interrupts. See alt_irq.h for further details. + */ + +volatile alt_u32 alt_irq_active = 0; + +#ifndef ALT_EXCEPTION_STACK + +volatile alt_u32 alt_priority_mask = (alt_u32) -1; + +#endif + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_isatty.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_isatty.c new file mode 100644 index 0000000..73677dd --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_isatty.c @@ -0,0 +1,125 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include + +#include "sys/alt_dev.h" +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "priv/alt_file.h" +#include "os/alt_syscall.h" + +#ifdef ALT_USE_DIRECT_DRIVERS + +#include "system.h" + +/* + * Provide minimal version that just describes all file descriptors + * as tty devices for provided stdio devices. + */ +int ALT_ISATTY (int file) +{ + switch (file) { +#ifdef ALT_STDIN_PRESENT + case 0: /* stdin file descriptor */ +#endif /* ALT_STDIN_PRESENT */ +#ifdef ALT_STDOUT_PRESENT + case 1: /* stdout file descriptor */ +#endif /* ALT_STDOUT_PRESENT */ +#ifdef ALT_STDERR_PRESENT + case 2: /* stderr file descriptor */ +#endif /* ALT_STDERR_PRESENT */ + return 1; + default: + return 0; + } + +#if !defined(ALT_STDIN_PRESENT) && !defined(ALT_STDOUT_PRESENT) && !defined(ALT_STDERR_PRESENT) + /* Generate a link time warning, should this function ever be called. */ + ALT_STUB_WARNING(isatty); +#endif +} + +#else /* !ALT_USE_DIRECT_DRIVERS */ +/* + * isatty() can be used to determine whether the input file descriptor "file" + * refers to a terminal device or not. If it is a terminal device then the + * return value is one, otherwise it is zero. + * + * ALT_ISATTY is mapped onto the isatty() system call in alt_syscall.h + */ + +int ALT_ISATTY (int file) +{ + alt_fd* fd; + struct stat stat; + + /* + * 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]; + + if (fd) + { + /* + * If a device driver does not provide an fstat() function, then it is + * treated as a terminal device by default. + */ + + if (!fd->dev->fstat) + { + return 1; + } + + /* + * If a driver does provide an implementation of the fstat() function, then + * this is called so that the device can identify itself. + */ + + else + { + fstat (file, &stat); + return (stat.st_mode == _IFCHR) ? 1 : 0; + } + } + else + { + ALT_ERRNO = EBADFD; + return 0; + } +} + +#endif /* ALT_USE_DIRECT_DRIVERS */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_kill.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_kill.c new file mode 100644 index 0000000..58097d1 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_kill.c @@ -0,0 +1,121 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include + +#include "sys/alt_errno.h" +#include "os/alt_syscall.h" + + +/* + * kill() is used by newlib in order to send signals to processes. Since there + * is only a single process in the HAL, the only valid values for pid are + * either the current process id, or the broadcast values, i.e. pid must be + * less than or equal to zero. + * + * ALT_KILL is mapped onto the kill() system call in alt_syscall.h + */ + +int ALT_KILL (int pid, int sig) +{ + int status = 0; + + if (pid <= 0) + { + switch (sig) + { + case 0: + + /* The null signal is used to check that a pid is valid. */ + + break; + + case SIGABRT: + case SIGALRM: + case SIGFPE: + case SIGILL: + case SIGKILL: + case SIGPIPE: + case SIGQUIT: + case SIGSEGV: + case SIGTERM: + case SIGUSR1: + case SIGUSR2: + case SIGBUS: + case SIGPOLL: + case SIGPROF: + case SIGSYS: + case SIGTRAP: + case SIGVTALRM: + case SIGXCPU: + case SIGXFSZ: + + /* + * The Posix standard defines the default behaviour for all these signals + * as being eqivalent to a call to _exit(). No mechanism is provided to + * change this behaviour. + */ + + _exit(0); + case SIGCHLD: + case SIGURG: + + /* + * The Posix standard defines these signals to be ignored by default. No + * mechanism is provided to change this behaviour. + */ + + break; + default: + + /* Tried to send an unsupported signal */ + + status = EINVAL; + } + } + + else if (pid > 0) + { + /* Attempted to signal a non-existant process */ + + status = ESRCH; + } + + if (status) + { + ALT_ERRNO = status; + return -1; + } + + return 0; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_link.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_link.c new file mode 100644 index 0000000..a57a5c4 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_link.c @@ -0,0 +1,56 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_warning.h" +#include "sys/alt_errno.h" +#include "os/alt_syscall.h" + +/* + * link() is used by newlib to create a new link to an existing file. This is + * unsupported in the HAL environment. However a "do-nothing" implementation + * is still provied for newlib compatability. + * + * ALT_LINK is mapped onto the link() system call in alt_syscall.h + */ + +int ALT_LINK ( char *existing, char *new) +{ + /* Generate a link time warning, should this function ever be called. */ + + ALT_STUB_WARNING(link); + + /* Indicate an error */ + + ALT_ERRNO = ENOSYS; + return -1; +} + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_load.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_load.c new file mode 100644 index 0000000..38d9618 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_load.c @@ -0,0 +1,99 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_load.h" +#include "sys/alt_cache.h" + +/* + * Linker defined symbols. + These used to be + * extern alt_u32 __flash_rwdata_start; + * extern alt_u32 __ram_rwdata_start; + * extern alt_u32 __ram_rwdata_end; + * but that results in a fatal error when compiling -mgpopt=global + * because gcc assumes they are normal C variables in .sdata + * and therefore addressable from gp using a 16-bit offset, + * when in fact they are special values defined by linker.x + * and located nowhere near .sdata. + * Specifying __attribute__((section(".data"))) will force these + * in .data. (CASE:258384.) + */ + +extern alt_u32 __flash_rwdata_start __attribute__((section(".data"))); +extern alt_u32 __ram_rwdata_start __attribute__((section(".data"))); +extern alt_u32 __ram_rwdata_end __attribute__((section(".data"))); +extern alt_u32 __flash_rodata_start __attribute__((section(".data"))); +extern alt_u32 __ram_rodata_start __attribute__((section(".data"))); +extern alt_u32 __ram_rodata_end __attribute__((section(".data"))); +extern alt_u32 __flash_exceptions_start __attribute__((section(".data"))); +extern alt_u32 __ram_exceptions_start __attribute__((section(".data"))); +extern alt_u32 __ram_exceptions_end __attribute__((section(".data"))); + +/* + * alt_load() is called when the code is executing from flash. In this case + * there is no bootloader, so this application is responsible for loading to + * RAM any sections that are required. + */ + +void alt_load (void) +{ + /* + * Copy the .rwdata section. + */ + + alt_load_section (&__flash_rwdata_start, + &__ram_rwdata_start, + &__ram_rwdata_end); + + /* + * Copy the exception handler. + */ + + alt_load_section (&__flash_exceptions_start, + &__ram_exceptions_start, + &__ram_exceptions_end); + + /* + * Copy the .rodata section. + */ + + alt_load_section (&__flash_rodata_start, + &__ram_rodata_start, + &__ram_rodata_end); + + /* + * Now ensure that the caches are in synch. + */ + + alt_dcache_flush_all(); + alt_icache_flush_all(); +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_log_macro.S b/FPGA_nios/hit_pat_bsp/HAL/src/alt_log_macro.S new file mode 100644 index 0000000..d6b0a90 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_log_macro.S @@ -0,0 +1,60 @@ +/* alt_log_macro.S + * + * Implements the function tx_log_str, called by the assembly macro + * ALT_LOG_PUTS(). The macro will be empty when logging is turned off, + * and this function will not be compiled. When logging is on, + * this function is used to print out the strings defined in the beginning + * of alt_log_printf.c, using port information taken from system.h and + * alt_log_printf.h. + * + * This routine only handles strings, and sends a character into the defined + * output device's output buffer when the device is ready. It's intended for + * debugging purposes, where messages can be set to print out at certain + * points in the boot code to indicate the progress of the program. + * + */ + +#ifndef __ALT_LOG_MACROS__ +#define __ALT_LOG_MACROS__ + +/* define this flag to skip assembly-incompatible parts + * of various include files. */ +#define ALT_ASM_SRC + +#ifdef ALT_LOG_ENABLE // only compile this function if this flag is defined. + + #include "system.h" + #include "sys/alt_log_printf.h" + + .global tx_log_str +tx_log_str: + /* load base uart / jtag uart address into r6 */ + movhi r6, %hiadj(ALT_LOG_PORT_BASE) + addi r6, r6, %lo(ALT_LOG_PORT_BASE) +tx_next_char: + /* if pointer points to null, return + * r4 is the pointer to the str to be printed, set by ALT_LOG_PUTS */ + ldb r7, (r4) + beq r0, r7, end_tx + + /* check device transmit ready */ +wait_tx_ready_loop: + ldwio r8, ALT_LOG_PRINT_REG_OFFSET(r6) + /*UART, ALT_LOG_PRINT_MSK == 0x40 + JTAG UART, ALT_LOG_PRINT_MSK == 0xFFFF0000 */ + andhi r5, r8, %hi(ALT_LOG_PRINT_MSK) + andi r8, r8, %lo(ALT_LOG_PRINT_MSK) + or r5, r5, r8 + beq r5, r0, wait_tx_ready_loop + /* write char */ + stwio r7, ALT_LOG_PRINT_TXDATA_REG_OFFSET (r6) + /* advance string pointer */ + addi r4, r4, 1 + br tx_next_char +end_tx: + ret + +#endif + +#endif /* __ALT_LOG_MACROS__ */ + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_log_printf.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_log_printf.c new file mode 100644 index 0000000..7464185 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_log_printf.c @@ -0,0 +1,479 @@ + +/* alt_log_printf.c + * + * This file implements the various C functions used for the + * alt_log logging/debugging print functions. The functions + * sit as is here - the job of hiding them from the compiler + * if logging is disabled is accomplished in the .h file. + * + * All the global variables for alt_log are defined here. + * These include the various flags that turn on additional + * logging options; the strings for assembly printing; and + * other globals needed by different logging options. + * + * There are 4 functions that handle the actual printing: + * alt_log_txchar: Actual function that puts 1 char to UART/JTAG UART. + * alt_log_repchar: Calls alt_log_txchar 'n' times - used by + * alt_log_private_printf for formatting. + * alt_log_private_printf: + * Stripped down implementation of printf - no floats. + * alt_log_printf_proc: + * Wrapper function for private_printf. + * + * The rest of the functions are called by the macros which + * were called by code in the other components. Each function + * is preceded by a comment, about which file it gets called + * in, and what its purpose is. + * + * author: gkwan + */ + +/* skip all code if enable is off */ +#ifdef ALT_LOG_ENABLE + +#include +#include +#include +#ifdef __ALTERA_AVALON_JTAG_UART + #include "altera_avalon_jtag_uart.h" + #include +#endif +#include "sys/alt_log_printf.h" + +/* strings for assembly puts */ +char alt_log_msg_bss[] = "[crt0.S] Clearing BSS \r\n";; +char alt_log_msg_alt_main[] = "[crt0.S] Calling alt_main.\r\n"; +char alt_log_msg_stackpointer[] \ + = "[crt0.S] Setting up stack and global pointers.\r\n"; +char alt_log_msg_cache[] = "[crt0.S] Inst & Data Cache Initialized.\r\n"; +/* char array allocation for alt_write */ +char alt_log_write_buf[ALT_LOG_WRITE_ECHO_LEN+2]; + +/* global variables for all 'on' flags */ + +/* + * CASE:368514 - The boot message flag is linked into the sdata section + * because if it is zero, it would otherwise be placed in the bss section. + * alt_log examines this variable before the BSS is cleared in the boot-up + * process. + */ +volatile alt_u32 alt_log_boot_on_flag \ + __attribute__ ((section (".sdata"))) = ALT_LOG_BOOT_ON_FLAG_SETTING; + +volatile alt_u8 alt_log_write_on_flag = ALT_LOG_WRITE_ON_FLAG_SETTING; + +volatile alt_u8 alt_log_sys_clk_on_flag = ALT_LOG_SYS_CLK_ON_FLAG_SETTING; + +volatile alt_u8 alt_log_jtag_uart_alarm_on_flag = \ + ALT_LOG_JTAG_UART_ALARM_ON_FLAG_SETTING; + +volatile alt_u8 alt_log_jtag_uart_isr_on_flag = \ + ALT_LOG_JTAG_UART_ISR_ON_FLAG_SETTING; + +volatile alt_u8 alt_log_jtag_uart_startup_info_on_flag = \ + ALT_LOG_JTAG_UART_STARTUP_INFO_ON_FLAG_SETTING; + +/* Global alarm object for recurrent JTAG UART status printing */ +alt_alarm alt_log_jtag_uart_alarm_1; + +/* Global ints for system clock printing and count */ +volatile int alt_log_sys_clk_count; +volatile int alt_system_clock_in_sec; + +/* enum used by alt_log_private_printf */ +enum +{ + pfState_chars, + pfState_firstFmtChar, + pfState_otherFmtChar +}; + + + + +/* Function to put one char onto the UART/JTAG UART txdata register. */ +void alt_log_txchar(int c,char *base) +{ + /* Wait until the device is ready for a character */ + while((ALT_LOG_PRINT_REG_RD(base) & ALT_LOG_PRINT_MSK) == 0) + ; + /* And pop the character into the register */ + ALT_LOG_PRINT_TXDATA_WR(base,c); +} + + +/* Called by alt_log_private_printf to print out characters repeatedly */ +void alt_log_repchar(char c,int r,int base) +{ + while(r-- > 0) + alt_log_txchar(c,(char*) base); +} + + +/* Stripped down printf function */ +void alt_log_private_printf(const char *fmt,int base,va_list args) + { + const char *w; + char c; + int state; + int fmtLeadingZero = 0; /* init these all to 0 for -W warnings. */ + int fmtLong = 0; + int fmtBeforeDecimal = 0; + int fmtAfterDecimal = 0; + int fmtBase = 0; + int fmtSigned = 0; + int fmtCase = 0; /* For hex format, if 1, A-F, else a-f. */ + + w = fmt; + state = pfState_chars; + + while(0 != (c = *w++)) + { + switch(state) + { + case pfState_chars: + if(c == '%') + { + fmtLeadingZero = 0; + fmtLong = 0; + fmtBase = 10; + fmtSigned = 1; + fmtCase = 0; /* Only %X sets this. */ + fmtBeforeDecimal = -1; + fmtAfterDecimal = -1; + state = pfState_firstFmtChar; + } + else + { + alt_log_txchar(c,(char*)base); + } + break; + + case pfState_firstFmtChar: + if(c == '0') + { + fmtLeadingZero = 1; + state = pfState_otherFmtChar; + } + else if(c == '%') + { + alt_log_txchar(c,(char*)base); + state = pfState_chars; + } + else + { + state = pfState_otherFmtChar; + goto otherFmtChar; + } + break; + + case pfState_otherFmtChar: +otherFmtChar: + if(c == '.') + { + fmtAfterDecimal = 0; + } + else if('0' <= c && c <= '9') + { + c -= '0'; + if(fmtAfterDecimal < 0) /* still before decimal */ + { + if(fmtBeforeDecimal < 0) + { + fmtBeforeDecimal = 0; + } + else + { + fmtBeforeDecimal *= 10; + } + fmtBeforeDecimal += c; + } + else + { + fmtAfterDecimal = (fmtAfterDecimal * 10) + c; + } + } + else if(c == 'l') + { + fmtLong = 1; + } + else /* we're up to the letter which determines type */ + { + switch(c) + { + case 'd': + case 'i': +doIntegerPrint: + { + unsigned long v; + unsigned long p; /* biggest power of fmtBase */ + unsigned long vShrink; /* used to count digits */ + int sign; + int digitCount; + + /* Get the value */ + if(fmtLong) + { + if (fmtSigned) + { + v = va_arg(args,long); + } + else + { + v = va_arg(args,unsigned long); + } + } + else + { + if (fmtSigned) + { + v = va_arg(args,int); + } + else + { + v = va_arg(args,unsigned int); + } + } + + /* Strip sign */ + sign = 0; + /* (assumes sign bit is #31) */ + if( fmtSigned && (v & (0x80000000)) ) + { + v = ~v + 1; + sign = 1; + } + + /* Count digits, and get largest place value */ + vShrink = v; + p = 1; + digitCount = 1; + while( (vShrink = vShrink / fmtBase) > 0 ) + { + digitCount++; + p *= fmtBase; + } + + /* Print leading characters & sign */ + fmtBeforeDecimal -= digitCount; + if(fmtLeadingZero) + { + if(sign) + { + alt_log_txchar('-',(char*)base); + fmtBeforeDecimal--; + } + alt_log_repchar('0',fmtBeforeDecimal,base); + } + else + { + if(sign) + { + fmtBeforeDecimal--; + } + alt_log_repchar(' ',fmtBeforeDecimal,base); + if(sign) + { + alt_log_txchar('-',(char*)base); + } + } + + /* Print numbery parts */ + while(p) + { + unsigned char d; + + d = v / p; + d += '0'; + if(d > '9') + { + d += (fmtCase ? 'A' : 'a') - '0' - 10; + } + alt_log_txchar(d,(char*)base); + + v = v % p; + p = p / fmtBase; + } + } + + state = pfState_chars; + break; + + case 'u': + fmtSigned = 0; + goto doIntegerPrint; + case 'o': + fmtSigned = 0; + fmtBase = 8; + goto doIntegerPrint; + case 'x': + fmtSigned = 0; + fmtBase = 16; + goto doIntegerPrint; + case 'X': + fmtSigned = 0; + fmtBase = 16; + fmtCase = 1; + goto doIntegerPrint; + + case 'c': + alt_log_repchar(' ',fmtBeforeDecimal-1,base); + alt_log_txchar(va_arg(args,int),(char*)base); + break; + + case 's': + { + char *s; + + s = va_arg(args,char *); + alt_log_repchar(' ',fmtBeforeDecimal-strlen(s),base); + + while(*s) + alt_log_txchar(*s++,(char*)base); + } + break; + } /* switch last letter of fmt */ + state=pfState_chars; + } + break; + } /* switch */ + } /* while chars left */ + } /* printf */ + +/* Main logging printf function */ +int alt_log_printf_proc(const char *fmt, ... ) +{ + va_list args; + + va_start (args, fmt); + alt_log_private_printf(fmt,ALT_LOG_PORT_BASE,args); + return (0); +} + +/* Below are the functions called by different macros in various components. */ + +/* If the system has a JTAG_UART, include JTAG_UART debugging functions */ +#ifdef __ALTERA_AVALON_JTAG_UART + +/* The alarm function in altera_avalon_jtag_uart.c. + * This function, when turned on, prints out the status + * of the JTAG UART Control register, every ALT_LOG_JTAG_UART_TICKS. + * If the flag is off, the alarm should never be registered, and this + * function should never run */ +alt_u32 altera_avalon_jtag_uart_report_log(void * context) +{ + if (alt_log_jtag_uart_alarm_on_flag) { + altera_avalon_jtag_uart_state* dev = (altera_avalon_jtag_uart_state*) context; + const char* header="JTAG Alarm:"; + alt_log_jtag_uart_print_control_reg(dev, dev->base, header); + return ALT_LOG_JTAG_UART_TICKS; + } + else + { + /* If flag is not on, return 0 to disable future alarms. + * Should never be here, alarm should not be enabled at all. */ + return 0; + } +} + +void alt_log_jtag_uart_print_control_reg(altera_avalon_jtag_uart_state* dev, int base, const char* header) +{ + unsigned int control, space, ac, wi, ri, we, re; + control = IORD_ALTERA_AVALON_JTAG_UART_CONTROL(base); + space = (control & ALTERA_AVALON_JTAG_UART_CONTROL_WSPACE_MSK) >> + ALTERA_AVALON_JTAG_UART_CONTROL_WSPACE_OFST; + we= (control & ALTERA_AVALON_JTAG_UART_CONTROL_WE_MSK) >> + ALTERA_AVALON_JTAG_UART_CONTROL_WE_OFST; + re= (control & ALTERA_AVALON_JTAG_UART_CONTROL_RE_MSK) >> + ALTERA_AVALON_JTAG_UART_CONTROL_RE_OFST; + ri= (control & ALTERA_AVALON_JTAG_UART_CONTROL_RI_MSK) >> + ALTERA_AVALON_JTAG_UART_CONTROL_RI_OFST; + wi= (control & ALTERA_AVALON_JTAG_UART_CONTROL_WI_MSK) >> + ALTERA_AVALON_JTAG_UART_CONTROL_WI_OFST; + ac= (control & ALTERA_AVALON_JTAG_UART_CONTROL_AC_MSK) >> + ALTERA_AVALON_JTAG_UART_CONTROL_AC_OFST; + +#ifdef ALTERA_AVALON_JTAG_UART_SMALL + ALT_LOG_PRINTF( + "%s HW FIFO wspace=%d AC=%d WI=%d RI=%d WE=%d RE=%d\r\n", + header,space,ac,wi,ri,we,re); +#else + ALT_LOG_PRINTF( + "%s SW CirBuf = %d, HW FIFO wspace=%d AC=%d WI=%d RI=%d WE=%d RE=%d\r\n", + header,(dev->tx_out-dev->tx_in),space,ac,wi,ri,we,re); +#endif + + return; + +} + +/* In altera_avalon_jtag_uart.c + * Same output as the alarm function above, but this is called in the driver + * init function. Hence, it gives the status of the JTAG UART control register + * right at the initialization of the driver */ +void alt_log_jtag_uart_startup_info(altera_avalon_jtag_uart_state* dev, int base) +{ + const char* header="JTAG Startup Info:"; + alt_log_jtag_uart_print_control_reg(dev, base, header); + return; +} + +/* In altera_avalon_jtag_uart.c + * When turned on, this function will print out the status of the jtag uart + * control register every time there is a jtag uart "almost-empty" interrupt. */ +void alt_log_jtag_uart_isr_proc(int base, altera_avalon_jtag_uart_state* dev) +{ + if (alt_log_jtag_uart_isr_on_flag) { + const char* header="JTAG IRQ:"; + alt_log_jtag_uart_print_control_reg(dev, base, header); + } + return; +} + +#endif /* __ALTERA_AVALON_JTAG_UART */ + +/* In alt_write.c + * When the alt_log_write_on_flag is turned on, this function gets called + * every time alt_write gets called. The first + * ALT_LOG_WRITE_ECHO_LEN characters of every printf command (or any command + * that eventually calls write()) gets echoed to the alt_log output. */ +void alt_log_write(const void *ptr, size_t len) +{ + if (alt_log_write_on_flag) { + int temp_cnt; + int length=(ALT_LOG_WRITE_ECHO_LEN>len) ? len : ALT_LOG_WRITE_ECHO_LEN; + + if (length < 2) return; + + strncpy (alt_log_write_buf,ptr,length); + alt_log_write_buf[length-1]='\n'; + alt_log_write_buf[length]='\r'; + alt_log_write_buf[length+1]='\0'; + + /* Escape Ctrl-D's. If the Ctrl-D gets sent it might kill the terminal + * connection of alt_log. It will get replaced by 'D'. */ + for (temp_cnt=0;temp_cnt < length; temp_cnt++) { + if (alt_log_write_buf[temp_cnt]== 0x4) { + alt_log_write_buf[temp_cnt]='D'; + } + } + ALT_LOG_PRINTF("Write Echo: %s",alt_log_write_buf); + } +} + +/* In altera_avalon_timer_sc + * This function prints out a system clock is alive message + * every ALT_LOG_SYS_CLK_INTERVAL (in ticks). */ +void alt_log_system_clock() +{ + if (alt_log_sys_clk_on_flag) { + alt_log_sys_clk_count++; + if (alt_log_sys_clk_count > ALT_LOG_SYS_CLK_INTERVAL) { + alt_log_sys_clk_count = 0; + ALT_LOG_PRINTF("System Clock On %u\r\n",alt_system_clock_in_sec++); + } + } +} + + +#endif diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_lseek.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_lseek.c new file mode 100644 index 0000000..a56dbfb --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_lseek.c @@ -0,0 +1,117 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "priv/alt_file.h" +#include "os/alt_syscall.h" + +#ifdef ALT_USE_DIRECT_DRIVERS + +off_t ALT_LSEEK (int file, off_t ptr, int dir) +{ + /* Generate a link time warning, should this function ever be called. */ + + ALT_STUB_WARNING(lseek); + + /* Indicate an error */ + + ALT_ERRNO = ENOSYS; + return -1; +} + +#else /* !ALT_USE_DIRECT_DRIVERS */ + +/* + * lseek() can be called to move the read/write pointer associated with the + * file descriptor "file". This function simply vectors the call to the lseek() + * function provided by the driver associated with the file descriptor. + * + * If the driver does not provide an implementation of lseek() an error is + * indicated. + * + * lseek() corresponds to the standard lseek() function. + * + * ALT_LSEEK is mapped onto the lseek() system call in alt_syscall.h + * + */ + +off_t ALT_LSEEK (int file, off_t ptr, int dir) +{ + alt_fd* fd; + off_t rc = 0; + + /* + * 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]; + + if (fd) + { + /* + * If the device driver provides an implementation of the lseek() function, + * then call that to process the request. + */ + + if (fd->dev->lseek) + { + rc = fd->dev->lseek(fd, ptr, dir); + } + /* + * Otherwise return an error. + */ + + else + { + rc = -ENOTSUP; + } + } + else + { + rc = -EBADFD; + } + + if (rc < 0) + { + ALT_ERRNO = -rc; + rc = -1; + } + + return rc; +} + +#endif /* ALT_USE_DIRECT_DRIVERS */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_main.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_main.c new file mode 100644 index 0000000..33e3463 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_main.c @@ -0,0 +1,161 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include "sys/alt_dev.h" +#include "sys/alt_sys_init.h" +#include "sys/alt_irq.h" +#include "sys/alt_dev.h" + +#include "os/alt_hooks.h" + +#include "priv/alt_file.h" +#include "alt_types.h" + +#include "system.h" + +#include "sys/alt_log_printf.h" + +extern void _do_ctors(void); +extern void _do_dtors(void); + +/* + * Standard arguments for main. By default, no arguments are passed to main. + * However a device driver may choose to configure these arguments by calling + * alt_set_args(). The expectation is that this facility will only be used by + * the iclient/ihost utility. + */ + +int alt_argc = 0; +char** alt_argv = {NULL}; +char** alt_envp = {NULL}; + +/* + * Prototype for the entry point to the users application. + */ + +extern int main (int, char **, char **); + +/* + * alt_main is the C entry point for the HAL. It is called by the assembler + * startup code in the processor specific crt0.S. It is responsible for: + * completing the C runtime configuration; configuring all the + * devices/filesystems/components in the system; and call the entry point for + * the users application, i.e. main(). + */ + +void alt_main (void) +{ +#ifndef ALT_NO_EXIT + int result; +#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); + + /* Initialize the operating system */ + ALT_LOG_PRINT_BOOT("[alt_main.c] Done alt_irq_init, calling alt_os_init.\r\n"); + ALT_OS_INIT(); + + /* + * Initialize the semaphore used to control access to the file descriptor + * list. + */ + + 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(); + ALT_LOG_PRINT_BOOT("[alt_main.c] Done alt_sys_init.\r\n"); + +#if !defined(ALT_USE_DIRECT_DRIVERS) && (defined(ALT_STDIN_PRESENT) || defined(ALT_STDOUT_PRESENT) || defined(ALT_STDERR_PRESENT)) + + /* + * Redirect stdio to the apropriate devices now that the devices have + * been initialized. This is only done if the user has requested these + * 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); +#endif + +#ifndef ALT_NO_C_PLUS_PLUS + /* + * Call the C++ constructors + */ + + ALT_LOG_PRINT_BOOT("[alt_main.c] Calling C++ constructors.\r\n"); + _do_ctors (); +#endif /* ALT_NO_C_PLUS_PLUS */ + +#if !defined(ALT_NO_C_PLUS_PLUS) && !defined(ALT_NO_CLEAN_EXIT) && !defined(ALT_NO_EXIT) + /* + * Set the C++ destructors to be called at system shutdown. This is only done + * if a clean exit has been requested (i.e. the exit() function has not been + * 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); +#endif + + /* + * Finally, call main(). The return code is then passed to a subsequent + * call to exit() unless the application is never supposed to exit. + */ + + 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); + close(STDOUT_FILENO); + exit (result); +#endif + + ALT_LOG_PRINT_BOOT("[alt_main.c] After main - we should not be here?.\r\n"); +} + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_mcount.S b/FPGA_nios/hit_pat_bsp/HAL/src/alt_mcount.S new file mode 100644 index 0000000..cf510da --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_mcount.S @@ -0,0 +1,198 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2010 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* mcount or _mcount is inserted by GCC before the function prologue of every + * function when a program is compiled for profiling. At the start of mcount, + * we guarantee that: + * ra = self_pc (an address in the function which called mcount) + * r8 = from_pc (an address in the function which called mcount's caller) + * + * Because this is always called at the start of a function we can corrupt + * r2,r3 and r11-r15. We must not corrupt r4-r7 (because they might contain + * function arguments for the instrumented function) or r8 (which holds ra + * for the instrumented function). + */ + + .global __mcount_fn_head + + .global mcount + + /* _mcount is used by gcc4 */ + .global _mcount + +_mcount: +mcount: + /* Use a hash to speed up locating fn_entry. We use bits 5 upwards to choose + * the bucket because bits 1:0 will always be 0, and because the distribution + * of values for bits 4:2 won't be even (aligning on cache line boundaries + * will skew it). Higher bits should be fairly random. + */ + /* fn_head = mcount_fn_head + (((unsigned int)self_pc >> 5) & (HASH_BUCKETS - 1)); */ + + srli r2, ra, 3 + movhi r3, %hiadj(__mcount_fn_head) + addi r3, r3, %lo(__mcount_fn_head) + andi r2, r2, 0xFC + add r11, r2, r3 + + /* The fast case is where we have already allocated a function arc, and so + * also a function pointer. + */ + + /* First find the function being called (using self_pc) */ + mov r10, r11 +0: + ldw r10, 0(r10) + beq r10, zero, .Lnew_arc + ldw r2, 4(r10) + bne r2, ra, 0b + + /* Found a function entry for this PC. Now look for an arc with a matching + * from_pc value. There will always be at least one arc. */ + ldw r3, 8(r10) +0: + ldw r2, 4(r3) + beq r2, r8, .Lfound_arc + ldw r3, 0(r3) + bne r3, zero, 0b + +.Lnew_arc: + addi sp, sp, -24 + +.LCFI0: + stw ra, 0(sp) + stw r4, 4(sp) + stw r5, 8(sp) + stw r6, 12(sp) + stw r7, 16(sp) + stw r8, 20(sp) + +.LCFI1: + /* __mcount_record(orig_ra, orig_r8, fn_entry, *fn_head); */ + mov r4, ra + mov r5, r8 + mov r6, r10 + mov r7, r11 + call __mcount_record + + /* restore registers from the stack */ + ldw ra, 0(sp) + ldw r4, 4(sp) + ldw r5, 8(sp) + ldw r6, 12(sp) + ldw r7, 16(sp) + ldw r8, 20(sp) + + addi sp, sp, 24 + +.LCFI2: + ret + +.Lfound_arc: + /* We've found the correct arc record. Increment the count and return */ + ldw r2, 8(r3) + addi r2, r2, 1 + stw r2, 8(r3) + ret + +.Lmcount_end: + + + +/* + * Dwarf2 debug information for the function. This provides GDB with the + * information it needs to backtrace out of this function. + */ + + .section .debug_frame,"",@progbits +.LCIE: + .4byte 2f - 1f /* Length */ +1: + .4byte 0xffffffff /* CIE id */ + .byte 0x1 /* Version */ + .string "" /* Augmentation */ + .uleb128 0x1 /* Code alignment factor */ + .sleb128 -4 /* Data alignment factor */ + .byte 0x1f /* Return address register */ + + .byte 0xc /* Define CFA */ + .uleb128 0x1b /* Register 27 (sp) */ + .uleb128 0x0 /* Offset 0 */ + + .align 2 /* Padding */ +2: + +.LFDE_mcount: + .4byte 2f - 1f /* Length */ +1: + .4byte .LCIE /* Pointer to CIE */ + .4byte mcount /* Start of table entry */ + .4byte .Lmcount_end - mcount /* Size of table entry */ + + .byte 0x4 /* Advance location */ + .4byte .LCFI0 - mcount /* to .LCFI0 */ + .byte 0xe /* Define CFA offset */ + .uleb128 24 /* to 24 */ + + .byte 0x4 /* Advance location */ + .4byte .LCFI1 - .LCFI0 /* to .LCFI1 */ + .byte 0x9f /* Store ra */ + .uleb128 0x6 /* at CFA-24 */ + .byte 0x84 /* Store r4 */ + .uleb128 0x5 /* at CFA-20 */ + .byte 0x85 /* Store r5 */ + .uleb128 0x4 /* at CFA-16 */ + .byte 0x86 /* Store r6 */ + .uleb128 0x3 /* at CFA-12 */ + .byte 0x87 /* Store r7 */ + .uleb128 0x2 /* at CFA-8 */ + .byte 0x88 /* Store r8 */ + .uleb128 0x1 /* at CFA-4 */ + + .byte 0x4 /* Advance location */ + .4byte .LCFI2 - .LCFI1 /* to .LCFI2 */ + .byte 0xe /* Define CFA offset */ + .uleb128 0 /* to 0 */ + .byte 0x8 /* Same value */ + .uleb128 31 /* for ra */ + .byte 0x8 /* Same value */ + .uleb128 4 /* for r4 */ + .byte 0x8 /* Same value */ + .uleb128 5 /* for r5 */ + .byte 0x8 /* Same value */ + .uleb128 6 /* for r6 */ + .byte 0x8 /* Same value */ + .uleb128 7 /* for r7 */ + .byte 0x8 /* Same value */ + .uleb128 8 /* for r8 */ + + .align 2 +2: + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_open.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_open.c new file mode 100644 index 0000000..d7040bc --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_open.c @@ -0,0 +1,173 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "priv/alt_file.h" +#include "alt_types.h" +#include "os/alt_syscall.h" + +#ifdef ALT_USE_DIRECT_DRIVERS + +int ALT_OPEN (const char* file, int flags, int mode) +{ + /* Generate a link time warning, should this function ever be called. */ + + ALT_STUB_WARNING(open); + + /* Indicate an error */ + + ALT_ERRNO = ENOSYS; + return -1; +} + +#else /* !ALT_USE_DIRECT_DRIVERS */ + +extern alt_llist alt_dev_list; + +/* + * alt_file_locked() is used by open() to ensure that a device has not been + * previously locked for exclusive access using ioctl(). This test is only + * 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) +{ + alt_u32 i; + + /* + * Mark the file descriptor as belonging to a device. + */ + + fd->fd_flags |= ALT_FD_DEV; + + /* + * 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++) + { + if ((alt_fd_list[i].dev == fd->dev) && + (alt_fd_list[i].fd_flags & ALT_FD_EXCL) && + (&alt_fd_list[i] != fd)) + { + return -EACCES; + } + } + + /* The device is not locked */ + + return 0; +} + +/* + * open() is called in order to get a file descriptor that reference the file + * or device named "name". This descriptor can then be used to manipulate the + * file/device using the standard system calls, e.g. write(), read(), ioctl() + * etc. + * + * This is equivalent to the standard open() system call. + * + * ALT_OPEN is mapped onto the open() system call in alt_syscall.h + */ + +int ALT_OPEN (const char* file, int flags, int mode) +{ + alt_dev* dev; + alt_fd* fd; + int index = -1; + int status = -ENODEV; + int isafs = 0; + + /* + * Check the device list, to see if a device with a matching name is + * registered. + */ + + if (!(dev = alt_find_dev (file, &alt_dev_list))) + { + /* No matching device, so try the filesystem list */ + + dev = alt_find_file (file); + isafs = 1; + } + + /* + * If a matching device or filesystem is found, allocate a file descriptor. + */ + + if (dev) + { + if ((index = alt_get_fd (dev)) < 0) + { + status = index; + } + else + { + fd = &alt_fd_list[index]; + fd->fd_flags = (flags & ~ALT_FD_FLAGS_MASK); + + /* If this is a device, ensure it isn't already locked */ + + if (isafs || ((status = alt_file_locked (fd)) >= 0)) + { + /* + * 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; + } + } + } + else + { + status = -ENODEV; + } + + /* Allocation failed, so clean up and return an error */ + + if (status < 0) + { + alt_release_fd (index); + ALT_ERRNO = -status; + return -1; + } + + /* return the reference upon success */ + + return index; +} + +#endif /* ALT_USE_DIRECT_DRIVERS */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_printf.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_printf.c new file mode 100644 index 0000000..f81b290 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_printf.c @@ -0,0 +1,132 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/* + * This file provides a very minimal printf implementation for use with very + * small applications. Only the following format strings are supported: + * %x + * %s + * %c + * %% + */ + +#include +#include "sys/alt_stdio.h" +#ifdef ALT_SEMIHOSTING +#define alt_putchar(x) alt_putcharbuf(x) +#endif +/* + * ALT printf function + */ +void +alt_printf(const char* fmt, ... ) +{ + va_list args; + va_start(args, fmt); + const char *w; + char c; + + /* Process format string. */ + w = fmt; + while ((c = *w++) != 0) + { + /* If not a format escape character, just print */ + /* character. Otherwise, process format string. */ + if (c != '%') + { + alt_putchar(c); + } + else + { + /* Get format character. If none */ + /* available, processing is complete. */ + if ((c = *w++) != 0) + { + if (c == '%') + { + /* Process "%" escape sequence. */ + alt_putchar(c); + } + else if (c == 'c') + { + int v = va_arg(args, int); + alt_putchar(v); + } + else if (c == 'x') + { + /* Process hexadecimal number format. */ + unsigned long v = va_arg(args, unsigned long); + unsigned long digit; + int digit_shift; + + /* If the number value is zero, just print and continue. */ + if (v == 0) + { + alt_putchar('0'); + continue; + } + + /* Find first non-zero digit. */ + digit_shift = 28; + while (!(v & (0xF << digit_shift))) + digit_shift -= 4; + + /* Print digits. */ + for (; digit_shift >= 0; digit_shift -= 4) + { + digit = (v & (0xF << digit_shift)) >> digit_shift; + if (digit <= 9) + c = '0' + digit; + else + c = 'a' + digit - 10; + alt_putchar(c); + } + } + else if (c == 's') + { + /* Process string format. */ + char *s = va_arg(args, char *); + + while(*s) + alt_putchar(*s++); + } + } + else + { + break; + } + } + } +#ifdef ALT_SEMIHOSTING + alt_putbufflush(); +#endif +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_putchar.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_putchar.c new file mode 100644 index 0000000..a8049d7 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_putchar.c @@ -0,0 +1,68 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#ifdef ALT_USE_DIRECT_DRIVERS +#include "system.h" +#include "sys/alt_driver.h" +#include "sys/alt_stdio.h" +#endif +#ifdef ALT_SEMIHOSTING +#include "sys/alt_stdio.h" +#include "unistd.h" +#endif + +/* + * Uses the ALT_DRIVER_WRITE() macro to call directly to driver if available. + * Otherwise, uses newlib provided putchar() routine. + */ +int +alt_putchar(int c) +{ +#ifdef ALT_SEMIHOSTING + char c1 = (char)(c & 0xff); + return write(STDOUT_FILENO,&c1,1); +#else +#ifdef ALT_USE_DIRECT_DRIVERS + ALT_DRIVER_WRITE_EXTERNS(ALT_STDOUT_DEV); + char c1 = (char)(c & 0xff); + + if (ALT_DRIVER_WRITE(ALT_STDOUT_DEV, &c1, 1, 0) == -1) { + return -1; + } + return c; +#else + return putchar(c); +#endif +#endif +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_putcharbuf.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_putcharbuf.c new file mode 100644 index 0000000..a0e4f2b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_putcharbuf.c @@ -0,0 +1,80 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + + +#ifdef ALT_SEMIHOSTING +#include "sys/alt_stdio.h" +#include "unistd.h" + +#ifndef ALT_PUTBUF_SIZE +#define ALT_PUTBUF_SIZE 64 +#endif + +// Buffer for the printed chars +static char buf[ALT_PUTBUF_SIZE] ={0}; +// index into the buffer +static unsigned int fill_index; + +/* + * ALT putcharbuf funtion + * Used only for semihosting. + * Not thread safe! + * This fucntion buffers up chars to be printed until either alt_putbufflush() + * is called or the buffer is full. + * It is called by alt_printf when semihosting is turned on + * Its purpose is to minimize the number of Break 1 issuesd by the semihosting + * libraries. + */ +int +alt_putcharbuf(int c) +{ + buf[fill_index++] = (char)(c & 0xff); + if(fill_index >= ALT_PUTBUF_SIZE) + alt_putbufflush(); + return c; +} + +/* + * ALT putbufflush + * used only for smehosting + * Not thread safe! + * Dumps all the chars in the buffer to STDOUT + */ +int +alt_putbufflush() +{ + int results; + results = write(STDOUT_FILENO,buf,fill_index); + fill_index = 0; + return results; +} +#endif diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_putstr.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_putstr.c new file mode 100644 index 0000000..add3402 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_putstr.c @@ -0,0 +1,64 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#ifdef ALT_USE_DIRECT_DRIVERS +#include +#include "system.h" +#include "sys/alt_driver.h" +#include "sys/alt_stdio.h" +#endif +#ifdef ALT_SEMIHOSTING +#include +#include "sys/alt_stdio.h" +#include "unistd.h" +#endif + +/* + * Uses the ALT_DRIVER_WRITE() macro to call directly to driver if available. + * Otherwise, uses newlib provided fputs() routine. + */ +int +alt_putstr(const char* str) +{ +#ifdef ALT_SEMIHOSTING + return write(STDOUT_FILENO,str,strlen(str)); +#else +#ifdef ALT_USE_DIRECT_DRIVERS + ALT_DRIVER_WRITE_EXTERNS(ALT_STDOUT_DEV); + return ALT_DRIVER_WRITE(ALT_STDOUT_DEV, str, strlen(str), 0); +#else + return fputs(str, stdout); +#endif +#endif +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_read.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_read.c new file mode 100644 index 0000000..920ab13 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_read.c @@ -0,0 +1,125 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include + +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "priv/alt_file.h" +#include "os/alt_syscall.h" + +/* + * The read() system call is used to read a block of data from a file or device. + * This function simply vectors the request to the device driver associated + * with the input file descriptor "file". + * + * ALT_READ is mapped onto the read() system call in alt_syscall.h + */ + +#ifdef ALT_USE_DIRECT_DRIVERS + +#include "system.h" +#include "sys/alt_driver.h" + +/* + * Provide minimal version that just reads from the stdin device when provided. + */ + +int ALT_READ (int file, void *ptr, size_t len) +{ +#ifdef ALT_STDIN_PRESENT + ALT_DRIVER_READ_EXTERNS(ALT_STDIN_DEV); +#endif + +#if !defined(ALT_STDIN_PRESENT) + /* Generate a link time warning, should this function ever be called. */ + ALT_STUB_WARNING(read); +#endif + + switch (file) { +#ifdef ALT_STDIN_PRESENT + case 0: /* stdin file descriptor */ + return ALT_DRIVER_READ(ALT_STDIN_DEV, ptr, len, 0); +#endif /* ALT_STDIN_PRESENT */ + default: + ALT_ERRNO = EBADFD; + return -1; + } +} + +#else /* !ALT_USE_DIRECT_DRIVERS */ + +int ALT_READ (int file, void *ptr, size_t len) +{ + alt_fd* fd; + int rval; + + /* + * 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]; + + if (fd) + { + /* + * 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) && + (fd->dev->read)) + { + if ((rval = fd->dev->read(fd, ptr, len)) < 0) + { + ALT_ERRNO = -rval; + return -1; + } + return rval; + } + else + { + ALT_ERRNO = EACCES; + } + } + else + { + ALT_ERRNO = EBADFD; + } + return -1; +} + +#endif /* ALT_USE_DIRECT_DRIVERS */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_release_fd.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_release_fd.c new file mode 100644 index 0000000..c22a97f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_release_fd.c @@ -0,0 +1,54 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_dev.h" +#include "priv/alt_file.h" + +/* + * alt_release_fd() is called to free an allocated file descriptor. This is + * done by setting the device pointer in the file descriptor structure to zero. + * + * 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) +{ + if (fd > 2) + { + alt_fd_list[fd].fd_flags = 0; + alt_fd_list[fd].dev = 0; + } +} + + + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_remap_cached.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_remap_cached.c new file mode 100644 index 0000000..6d7c137 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_remap_cached.c @@ -0,0 +1,55 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003,2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "sys/alt_warning.h" +#include "sys/alt_cache.h" +#include "system.h" + +/* + * Convert a pointer to a block of uncached memory into a block of cached memory. + * Return a pointer that should be used to access the cached memory. + */ + +void* +alt_remap_cached(volatile void* ptr, alt_u32 len) +{ +#if ALT_CPU_DCACHE_SIZE > 0 +#ifdef ALT_CPU_DCACHE_BYPASS_MASK + return (void*) (((alt_u32)ptr) & ~ALT_CPU_DCACHE_BYPASS_MASK); +#else /* No address mask option enabled. */ + /* Generate a link time error, should this function ever be called. */ + ALT_LINK_ERROR("alt_remap_cached() is not available because CPU is not configured to use bit 31 of address to bypass data cache"); + return NULL; +#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 */ +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_remap_uncached.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_remap_uncached.c new file mode 100644 index 0000000..7b3a216 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_remap_uncached.c @@ -0,0 +1,54 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003,2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "sys/alt_warning.h" +#include "sys/alt_cache.h" +#include "system.h" + +/* + * Convert a pointer to a block of cached memory into a block of uncached memory. + * Return a pointer that should be used to access the uncached memory. + * + * This routine was created for Nios II Gen1 cores which allow mixing cacheable and + * uncachable data in the same data cache line. So, they could take any memory region + * and make it uncached. However, Nios II Gen2 cores don't support mixing cacheable + * and uncachable data in the same data cache line so require the memory region to + * be aligned to a cache line boundary and must be an integer number of cache line + * bytes in size. So, software on a Nios II Gen2 core shouldn't really be using this + * function so it fails with a link error. + */ + +volatile void* +alt_remap_uncached(void* ptr, alt_u32 len) +{ + /* Generate a link time error, should this function ever be called. */ + ALT_LINK_ERROR("alt_remap_uncached() is not available because Nios II Gen2 cores with data caches don't support mixing cacheable and uncacheable data on the same line."); + return NULL; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_rename.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_rename.c new file mode 100644 index 0000000..26db44d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_rename.c @@ -0,0 +1,55 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "os/alt_syscall.h" + +/* + * _rename() is used by newlib to rename an existing file. This is unsupported + * in the HAL environment. However a "do-nothing" implementation is still + * provied for newlib compatability. + * + * ALT_RENAME is mapped onto the _rename() system call in alt_syscall.h + */ + +int ALT_RENAME (char *existing, char *new) +{ + /* Generate a link time warning, should this function ever be called. */ + + ALT_STUB_WARNING(_rename); + + /* Indicate an error */ + + ALT_ERRNO = ENOSYS; + return -1; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_sbrk.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_sbrk.c new file mode 100644 index 0000000..7ab3367 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_sbrk.c @@ -0,0 +1,136 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "os/alt_syscall.h" + +#include "sys/alt_irq.h" +#include "sys/alt_stack.h" + +#include "system.h" + +/* + * sbrk() is called to dynamically extend the data segment for the application. + * Thie input argument "incr" is the size of the block to allocate. + * + * This simple implementation does not perform any bounds checking. Memory will + * be allocated, even if the request region colides with the stack or overflows + * the available physical memory. + * + * ALT_SBRK is mapped onto the sbrk() system call in alt_syscall.h + * + * This function is called by the profiling code to allocate memory so must be + * safe if called from an interrupt context. It must also not be instrumented + * because that would lead to an infinate loop. + */ + +extern char __alt_heap_start[]; /* set by linker */ +extern char __alt_heap_limit[]; /* set by linker */ + +static char *heap_end = __alt_heap_start; + +#if defined(ALT_EXCEPTION_STACK) && defined(ALT_STACK_CHECK) +char * alt_exception_old_stack_limit = NULL; +#endif + +caddr_t ALT_SBRK (int incr) __attribute__ ((no_instrument_function )); + +caddr_t ALT_SBRK (int incr) +{ + alt_irq_context context; + char *prev_heap_end; + + context = alt_irq_disable_all(); + + /* Always return data aligned on a word boundary */ + heap_end = (char *)(((unsigned int)heap_end + 3) & ~3); + +#ifdef ALT_MAX_HEAP_BYTES + /* + * User specified a maximum heap size. Return -1 if it would + * be exceeded by this sbrk call. + */ + 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) { + alt_irq_enable_all(context); + return (caddr_t)-1; + } +#endif + + prev_heap_end = heap_end; + heap_end += incr; + +#ifdef ALT_STACK_CHECK + /* + * If the stack and heap are contiguous then extending the heap reduces the + * space available for the stack. If we are still using the default stack + * then adjust the stack limit to note this, while checking for stack + * pointer overflow. + * If the stack limit isn't pointing at the top of the heap then the code + * is using a different stack so none of this needs to be done. + */ + + if (alt_stack_limit() == prev_heap_end) + { + if (alt_stack_pointer() <= heap_end) + alt_report_stack_overflow(); + + alt_set_stack_limit(heap_end); + } + +#ifdef ALT_EXCEPTION_STACK + /* + * If we are executing from the exception stack then compare against the + * stack we switched away from as well. The exception stack is a fixed + * size so doesn't need to be checked. + */ + + if (alt_exception_old_stack_limit == prev_heap_end) + { + if (alt_exception_old_stack_limit <= heap_end) + alt_report_stack_overflow(); + + alt_exception_old_stack_limit = heap_end; + } +#endif + +#endif + + alt_irq_enable_all(context); + + return (caddr_t) prev_heap_end; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_settod.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_settod.c new file mode 100644 index 0000000..13349b8 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_settod.c @@ -0,0 +1,96 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include + +#include "sys/alt_errno.h" +#include "sys/alt_alarm.h" +#include "os/alt_syscall.h" + +/* + * "alt_timezone" and "alt_resettime" are the values of the the reset time and + * time zone set through the last call to settimeofday(). By default they are + * zero initialised. + */ + +extern struct timezone alt_timezone; +extern struct timeval alt_resettime; + +/* + * Macro defining the number of micoseconds in a second. + */ + +#define ALT_US (1000000) + + +/* + * settimeofday() can be called to calibrate the system clock, so that + * subsequent calls to gettimeofday() will return the elapsed "wall clock" + * time. + * + * This is done by updating the global structures "alt_resettime" and + * "alt_timezone" so that an immediate call to gettimeofday() would return + * the value specified by "t" and "tz". + * + * Warning: if this function is called concurrently with a call to + * gettimeofday(), the value returned by gettimeofday() will be unreliable. + * + * ALT_SETTIMEOFDAY is mapped onto the settimeofday() system call in + * alt_syscall.h + */ + +int ALT_SETTIMEOFDAY (const struct timeval *t, + const struct timezone *tz) +{ + alt_u32 nticks = alt_nticks (); + alt_u32 tick_rate = alt_ticks_per_second (); + + /* If there is a system clock available, update the current time */ + + if (tick_rate) + { + alt_resettime.tv_sec = t->tv_sec - nticks/tick_rate; + alt_resettime.tv_usec = t->tv_usec - + ((nticks*(ALT_US/tick_rate))%ALT_US); + + alt_timezone.tz_minuteswest = tz->tz_minuteswest; + alt_timezone.tz_dsttime = tz->tz_dsttime; + + return 0; + } + + /* There's no system clock available */ + + ALT_ERRNO = ENOSYS; + return -1; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_software_exception.S b/FPGA_nios/hit_pat_bsp/HAL/src/alt_software_exception.S new file mode 100644 index 0000000..0a9381e --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_software_exception.S @@ -0,0 +1,53 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003-2005 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + + /* + * This file provides the global symbol: software_exception. It is provided to + * support legacy code, and should not be used by new software. + * + * It is used by legacy code to invoke the software exception handler as + * defined by version 1.0 of the Nios II kit. It should only be used when you + * are providing your own interrupt entry point, i.e. you are not using + * alt_irq_entry. + */ + +#include "system.h" + + /* + * Pull in the exception handler. + */ + + .globl alt_exception + + .section .exceptions.entry.label, "xa" + + .globl software_exception + .type software_exception, @function +software_exception: diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_stat.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_stat.c new file mode 100644 index 0000000..c196d0c --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_stat.c @@ -0,0 +1,59 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include +#include +#include + +#include "os/alt_syscall.h" + +/* + * The stat() function is similar to the fstat() function in that it is used to + * obtain status information about a file. Instead of using an open file + * descriptor (like fstat()), stat() takes the name of a file as an input + * argument. + * + * ALT_STAT is mapped onto the stat() system call in alt_syscall.h + */ + +int ALT_STAT (const char *file, struct stat *st) +{ + int fd; + int rc; + + fd = open (file, 0); + rc = fstat (fd, st); + close (fd); + + return rc; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_tick.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_tick.c new file mode 100644 index 0000000..23719b1 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_tick.c @@ -0,0 +1,149 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_irq.h" +#include "sys/alt_alarm.h" +#include "os/alt_hooks.h" +#include "alt_types.h" + +/* + * "_alt_tick_rate" is used to store the value of the system clock frequency + * in ticks per second. It is initialised to zero, which corresponds to there + * being no system clock facility available. + */ + +alt_u32 _alt_tick_rate = 0; + +/* + * "_alt_nticks" is the number of system clock ticks that have elapsed since + * reset. + */ + +volatile alt_u32 _alt_nticks = 0; + +/* + * "alt_alarm_list" is the head of a linked list of registered alarms. This is + * initialised to be an empty list. + */ + +ALT_LLIST_HEAD(alt_alarm_list); + +/* + * alt_alarm_stop() is called to remove an alarm from the list of registered + * alarms. Alternatively an alarm can unregister itself by returning zero when + * the alarm executes. + */ + +void alt_alarm_stop (alt_alarm* alarm) +{ + alt_irq_context irq_context; + + irq_context = alt_irq_disable_all(); + alt_llist_remove (&alarm->llist); + alt_irq_enable_all (irq_context); +} + +/* + * alt_tick() is periodically called by the system clock driver in order to + * process the registered list of alarms. Each alarm is registed with a + * callback interval, and a callback function, "callback". + * + * The return value of the callback function indicates how many ticks are to + * elapse until the next callback. A return value of zero indicates that the + * alarm should be deactivated. + * + * alt_tick() is expected to run at interrupt level. + */ + +void alt_tick (void) +{ + alt_alarm* next; + alt_alarm* alarm = (alt_alarm*) alt_alarm_list.next; + + alt_u32 next_callback; + + /* update the tick counter */ + + _alt_nticks++; + + /* process the registered callbacks */ + + while (alarm != (alt_alarm*) &alt_alarm_list) + { + next = (alt_alarm*) alarm->llist.next; + + /* + * 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)) + { + alarm->rollover = 0; + } + + /* if the alarm period has expired, make the callback */ + if ((alarm->time <= _alt_nticks) && (alarm->rollover == 0)) + { + next_callback = alarm->callback (alarm->context); + + /* deactivate the alarm if the return value is zero */ + + if (next_callback == 0) + { + alt_alarm_stop (alarm); + } + else + { + alarm->time += next_callback; + + /* + * 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) + { + alarm->rollover = 1; + } + } + } + alarm = next; + } + + /* + * Update the operating system specific timer facilities. + */ + + ALT_OS_TIME_TICK(); +} + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_times.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_times.c new file mode 100644 index 0000000..6543164 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_times.c @@ -0,0 +1,71 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "sys/alt_errno.h" +#include "sys/alt_alarm.h" +#include "os/alt_syscall.h" + +/* + * The times() function is used by newlib to obtain elapsed time information. + * The return value is the elapsed time since reset in system clock ticks. Note + * that this is distinct from the strict Posix version of times(), which should + * return the time since: 0 hours, 0 minutes, 0 seconds, January 1, 1970, GMT. + * + * The input structure is filled in with time accounting information. This + * implementation attributes all cpu time to the system. + * + * ALT_TIMES is mapped onto the times() system call in alt_syscall.h + */ + +clock_t ALT_TIMES (struct tms *buf) +{ + clock_t ticks = alt_nticks(); + + /* If there is no system clock present, generate an error */ + + if (!alt_ticks_per_second()) + { + ALT_ERRNO = ENOSYS; + return 0; + } + + /* Otherwise return the elapsed time */ + + buf->tms_utime = 0; + buf->tms_stime = ticks; + buf->tms_cutime = 0; + buf->tms_cstime = 0; + + return ticks; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_uncached_free.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_uncached_free.c new file mode 100644 index 0000000..0d725c0 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_uncached_free.c @@ -0,0 +1,53 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003,2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "sys/alt_warning.h" +#include "sys/alt_cache.h" +#include "system.h" + +/* + * Free a block of uncached memory. + */ + +void +alt_uncached_free(volatile void* ptr) +{ +#if ALT_CPU_DCACHE_SIZE > 0 +#ifdef ALT_CPU_DCACHE_BYPASS_MASK + free((void*) (((alt_u32)ptr) & ~ALT_CPU_DCACHE_BYPASS_MASK)); +#else /* No address mask option enabled. */ + /* Generate a link time error, should this function ever be called. */ + ALT_LINK_ERROR("alt_uncached_free() is not available because CPU is not configured to use bit 31 of address to bypass data cache"); +#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 */ +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_uncached_malloc.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_uncached_malloc.c new file mode 100644 index 0000000..75af9b0 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_uncached_malloc.c @@ -0,0 +1,77 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003,2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include +#include "sys/alt_warning.h" +#include "sys/alt_cache.h" +#include "system.h" + +/* + * Allocate a block of uncached memory. + * Return pointer to the block of memory or NULL if can't allocate it. + */ + +volatile void* +alt_uncached_malloc(size_t size) +{ +#if ALT_CPU_DCACHE_SIZE > 0 +#ifdef ALT_CPU_DCACHE_BYPASS_MASK + + 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; + const size_t aligned_size = num_lines * ALT_CPU_DCACHE_LINE_SIZE; + + /* 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); + + if (ptr == NULL) { + return NULL; /* Out of memory */ + } + + /* Ensure that the memory region isn't in the data cache. */ + alt_dcache_flush(ptr, aligned_size); + + return (volatile void*) (((alt_u32)ptr) | ALT_CPU_DCACHE_BYPASS_MASK); + +#else /* No address mask option enabled. */ + /* Generate a link time error, should this function ever be called. */ + ALT_LINK_ERROR("alt_uncached_malloc() is not available because CPU is not configured to use bit 31 of address to bypass data cache"); + return NULL; +#endif /* No address mask option enabled. */ +#else /* No data cache */ + /* Just use regular malloc. */ + return malloc(size); +#endif /* No data cache */ +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_unlink.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_unlink.c new file mode 100644 index 0000000..606f019 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_unlink.c @@ -0,0 +1,55 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "os/alt_syscall.h" + +/* + * unlink() is used by newlib to delete an existing link to a file. This is + * unsupported in the HAL environment. However a "do-nothing" implementation + * is still provied for newlib compatability. + * + * ALT_UNLINK is mapped onto the unlink() system call in alt_syscall.h + */ + +int ALT_UNLINK (char *name) +{ + /* Generate a link time warning, should this function ever be called. */ + + ALT_STUB_WARNING(unlink); + + /* Indicate an error */ + + ALT_ERRNO = ENOSYS; + return -1; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_usleep.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_usleep.c new file mode 100644 index 0000000..86533cb --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_usleep.c @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2003 Altera Corporation, San Jose, California, USA. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * ------------ + * + * Altera does not recommend, suggest or require that this reference design + * file be used in conjunction or combination with any other product. + */ + +#include +#include +#include + +#include "sys/alt_alarm.h" +#include "priv/alt_busy_sleep.h" +#include "os/alt_syscall.h" + +#include "includes.h" + +/* + * Macro defining the number of micoseconds in a second. + */ + +#define ALT_US (1000000) + +/* + * This implementation of usleep overrides the default provided in the HAL/src + * directory of the altera_nios2 component. When possible, this + * implementation uses the uC/OS-II OSTimeDly function to block the current + * thread, rather than using a busy loop. This allows other threads to execute + * while the current thread is sleeping. + * + * ALT_USLEEP is mapped onto the usleep() system call in alt_syscall.h + */ + +#if defined (__GNUC__) && __GNUC__ >= 4 +int ALT_USLEEP (useconds_t us) +#else +unsigned int ALT_USLEEP (unsigned int us) +#endif +{ + alt_u32 ticks; + alt_u32 tick_rate; + + /* + * 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) + { + return alt_busy_sleep (us); + } + + /* + * Calculate the number of whole system clock ticks to delay. + */ + + tick_rate = alt_ticks_per_second (); + ticks = (us/ALT_US)* tick_rate + ((us%ALT_US)*tick_rate)/ALT_US; + + /* + * 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) + { + OSTimeDly(0xffff); + ticks -= 0xffff; + } + + OSTimeDly ((INT16U) (ticks)); + + /* + * 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)); + + return 0; +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_wait.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_wait.c new file mode 100644 index 0000000..dd768ad --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_wait.c @@ -0,0 +1,52 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2004 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "sys/alt_errno.h" +#include "os/alt_syscall.h" + +/* + * wait() is used by newlib to wait for all child processes to exit. Since the + * HAL does not support spawning child processes, this returns immediately as + * there can't be anythign to wait for. + * + * ALT_WAIT is mapped onto the wait() system call in alt_syscall.h + */ + +int ALT_WAIT (int *status) +{ + *status = 0; + + ALT_ERRNO = ECHILD; + + return -1; +} + diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/alt_write.c b/FPGA_nios/hit_pat_bsp/HAL/src/alt_write.c new file mode 100644 index 0000000..d161cdf --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/alt_write.c @@ -0,0 +1,138 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include +#include + +#include "sys/alt_errno.h" +#include "sys/alt_warning.h" +#include "priv/alt_file.h" +#include "os/alt_syscall.h" + +#include "sys/alt_log_printf.h" + +/* + * The write() system call is used to write a block of data to a file or + * device. This function simply vectors the request to the device driver + * associated with the input file descriptor "file". + * + * ALT_WRITE is mapped onto the write() system call in alt_syscall.h + */ + +#ifdef ALT_USE_DIRECT_DRIVERS + +#include "system.h" +#include "sys/alt_driver.h" + +/* + * Provide minimal version that just writes to the stdout/stderr devices + * when provided. + */ + +int ALT_WRITE (int file, const void *ptr, size_t len) +{ +#ifdef ALT_STDOUT_PRESENT + ALT_DRIVER_WRITE_EXTERNS(ALT_STDOUT_DEV); +#endif +#ifdef ALT_STDERR_PRESENT + ALT_DRIVER_WRITE_EXTERNS(ALT_STDERR_DEV); +#endif + +#if !defined(ALT_STDOUT_PRESENT) && !defined(ALT_STDERR_PRESENT) + /* Generate a link time warning, should this function ever be called. */ + ALT_STUB_WARNING(write); +#endif + + switch (file) { +#ifdef ALT_STDOUT_PRESENT + case 1: /* stdout file descriptor */ + return ALT_DRIVER_WRITE(ALT_STDOUT_DEV, ptr, len, 0); +#endif /* ALT_STDOUT_PRESENT */ +#ifdef ALT_STDERR_PRESENT + case 2: /* stderr file descriptor */ + return ALT_DRIVER_WRITE(ALT_STDERR_DEV, ptr, len, 0); +#endif /* ALT_STDERR_PRESENT */ + default: + ALT_ERRNO = EBADFD; + return -1; + } +} + +#else /* !ALT_USE_DIRECT_DRIVERS */ + +int ALT_WRITE (int file, const void *ptr, size_t len) +{ + alt_fd* fd; + int rval; + + /* + * 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]; + + if (fd) + { + /* + * 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) + { + + /* 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) + { + ALT_ERRNO = -rval; + return -1; + } + return rval; + } + else + { + ALT_ERRNO = EACCES; + } + } + else + { + ALT_ERRNO = EBADFD; + } + return -1; +} + +#endif /* ALT_USE_DIRECT_DRIVERS */ diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/altera_nios2_gen2_irq.c b/FPGA_nios/hit_pat_bsp/HAL/src/altera_nios2_gen2_irq.c new file mode 100644 index 0000000..4dfd940 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/altera_nios2_gen2_irq.c @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2009 Altera Corporation, San Jose, California, USA. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * altera_nios2_gen2_irq.c - Support for Nios II internal interrupt controller. + * + */ + +#include "sys/alt_irq.h" +#include "altera_nios2_gen2_irq.h" + +/* + * 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) +{ + NIOS2_WRITE_IENABLE(0); +} diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/crt0.S b/FPGA_nios/hit_pat_bsp/HAL/src/crt0.S new file mode 100644 index 0000000..f12623b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/crt0.S @@ -0,0 +1,521 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "system.h" +#include "nios2.h" + +/* Setup header files to work with assembler code. */ +#define ALT_ASM_SRC + +/* Debug logging facility */ +#include "sys/alt_log_printf.h" + +/*************************************************************************\ +| MACROS | +\*************************************************************************/ + +/* + * The new build tools explicitly define macros when alt_load() + * must be called. The define ALT_LOAD_EXPLICITLY_CONTROLLED tells us that + * those macros are controlling if alt_load() needs to be called. + */ +#ifdef ALT_LOAD_EXPLICITLY_CONTROLLED + +/* Need to call alt_load() if any of these sections are being copied. */ +#if defined(ALT_LOAD_COPY_RODATA) || defined(ALT_LOAD_COPY_RWDATA) || defined(ALT_LOAD_COPY_EXCEPTIONS) +#define CALL_ALT_LOAD +#endif + +#else /* !ALT_LOAD_EXPLICITLY_CONTROLLED */ + +/* + * The legacy build tools use the following macros to detect when alt_load() + * needs to be called. + */ + +#define __ALT_LOAD_SECTIONS(res, text, rodata, exc) \ + ((res##_BASE != rodata##_BASE) || \ + (res##_BASE != rwdata##_BASE) || \ + (res##_BASE != exc##_BASE)) + +#define _ALT_LOAD_SECTIONS(res, text, rodata, exc) \ + __ALT_LOAD_SECTIONS(res, text, rodata, exc) + +#define ALT_LOAD_SECTIONS _ALT_LOAD_SECTIONS(ALT_RESET_DEVICE, \ + ALT_RODATA_DEVICE, \ + ALT_RWDATA_DEVICE, \ + ALT_EXCEPTIONS_DEVICE) + +/* Call alt_load() if there is no bootloader and ALT_LOAD_SECTIONS isn't 0. */ +#if defined(ALT_NO_BOOTLOADER) && ALT_LOAD_SECTIONS +#define CALL_ALT_LOAD +#endif + +#endif /* !ALT_LOAD_EXPLICITLY_CONTROLLED */ + +/* + * When the legacy build tools define a macro called ALT_NO_BOOTLOADER, + * it indicates that initialization code is allowed at the reset address. + * The new build tools define a macro called ALT_ALLOW_CODE_AT_RESET for + * the same purpose. + */ +#ifdef ALT_NO_BOOTLOADER +#define ALT_ALLOW_CODE_AT_RESET +#endif + +/*************************************************************************\ +| EXTERNAL REFERENCES | +\*************************************************************************/ + +/* + * The entry point for user code is either "main" in hosted mode, or + * "alt_main" in standalone mode. These are explicitly referenced here, + * to ensure they are built into the executable. This allows the user + * to build them into libraries, rather than supplying them in object + * files at link time. + */ + .globl main + .globl alt_main + +/* + * Create a reference to the software multiply/divide and trap handers, + * so that if they are provided, they will appear in the executable. + */ +#ifndef ALT_NO_INSTRUCTION_EMULATION + .globl alt_exception_muldiv +#endif +#ifdef ALT_TRAP_HANDLER + .globl alt_exception_trap +#endif + +/* + * Linker defined symbols used to initialize bss. + */ +.globl __bss_start +.globl __bss_end + +/*************************************************************************\ +| RESET SECTION (.entry) | +\*************************************************************************/ + +/* + * This is the reset entry point for Nios II. + * + * At reset, only the cache line which contain the reset vector is + * initialized by the hardware. The code within the first cache line + * initializes the remainder of the instruction cache. + */ + + .section .entry, "xa" + .align 5 + +/* + * Explicitly allow the use of r1 (the assembler temporary register) + * within this code. This register is normally reserved for the use of + * the assembler. + */ + .set noat + +/* + * Some tools want to know where the reset vector is. + * Code isn't always provided at the reset vector but at least the + * __reset label always contains the reset vector address because + * it is defined at the start of the .entry section. + */ + + .globl __reset + .type __reset, @function +__reset: + +/* + * Initialize the instruction cache if present (i.e. size > 0) and + * reset code is allowed unless optimizing for RTL simulation. + * RTL simulations can ensure the instruction cache is already initialized + * so skipping this loop speeds up RTL simulation. + * + * When ECC is present, need to execute initi for each word address + * to ensure ECC parity bits in cache RAM get initialized. + */ + +#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 +#endif + +0: + initi r2 + addi r2, r2, -NIOS2_ICACHE_LINE_SIZE + bgt r2, zero, 0b +1: + + /* + * The following debug information tells the ISS not to run the loop above + * but to perform its actions using faster internal code. + */ + .pushsection .debug_alt_sim_info + .int 1, 1, 0b, 1b + .popsection +#endif /* Initialize Instruction Cache */ + +/* + * 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) + ori r1, r1, %lo(_start) + jmp r1 + + .size __reset, . - __reset +#endif /* Jump to _start */ + +/* + * When not using exit, provide an _exit symbol to prevent unresolved + * references to _exit from the linker script. + */ +#ifdef ALT_NO_EXIT + .globl _exit +_exit: +#endif + +/*************************************************************************\ +| TEXT SECTION (.text) | +\*************************************************************************/ + +/* + * Start of the .text section, and also the code entry point when + * the code is executed by a bootloader rather than directly from reset. + */ + .section .text + .align 2 + + .globl _start + .type _start, @function +_start: + +#if (NIOS2_NUM_OF_SHADOW_REG_SETS > 0) + /* + * Ensure that the current register set is 0 upon + * entry to this code. Switch register set to 0 by + * writing zero to SSTATUS register and executing an ERET instruction + * to set STATUS.CRS to 0. + */ + + /* Get the current register set number (STATUS.CRS). */ + rdctl r2, status + andi r2, r2, NIOS2_STATUS_CRS_MSK + + /* Skip switching register set if STATUS.CRS is 0. */ + beq r2, zero, 0f + + /* Set SSTATUS to 0 to get to set SSTATUS.PRS to 0. */ + .set nobreak + movui sstatus, 0 + .set break + + /* Switch to register set 0 and jump to label. */ + movhi ea, %hi(0f) + ori ea, ea, %lo(0f) + eret + +0: +#endif /* NIOS2_NUM_OF_SHADOW_REG_SETS > 0 */ + +/* + * Initialize the data cache if present (i.e. size > 0). + * Skip initialization if optimizing for RTL simulation and ECC isn't present. + * RTL simulations can ensure the data cache tag RAM is already initialized + * (but not the data RAM for ECC) so skipping this speeds up RTL simulation. + * + * When ECC is present, need to execute initd for each word address + * to ensure ECC parity bits in data RAM get initialized. + * Otherwise, only need to execute initd for each line address. + */ + +#if NIOS2_DCACHE_SIZE > 0 && (!defined(ALT_SIM_OPTIMIZE) || defined(NIOS2_ECC_PRESENT)) + + /* 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 +#endif + +0: + initd 0(r2) +#ifdef NIOS2_ECC_PRESENT + addi r2, r2, -4 +#else + addi r2, r2, -NIOS2_DCACHE_LINE_SIZE +#endif + bgt r2, zero, 0b +1: + + /* + * The following debug information tells the ISS not to run the loop above + * but to perform its actions using faster internal code. + */ + .pushsection .debug_alt_sim_info + .int 2, 1, 0b, 1b + .popsection +#endif /* Initialize Data Cache */ + + /* Log that caches have been initialized. */ + ALT_LOG_PUTS(alt_log_msg_cache) + + /* Log that the stack pointer is about to be setup. */ + ALT_LOG_PUTS(alt_log_msg_stackpointer) + + /* + * 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) + ori sp, sp, %lo(__alt_stack_pointer) + movhi gp, %hi(_gp) + ori gp, gp, %lo(_gp) + +#ifdef NIOS2_ECC_PRESENT + /* + * Initialize all general-purpose registers so that ECC can be enabled + * later without accidentally triggering a spurious ECC error. + */ + movui r1, 0 + movui r2, 0 + movui r3, 0 + movui r4, 0 + movui r5, 0 + movui r6, 0 + movui r7, 0 + movui r8, 0 + movui r9, 0 + movui r10, 0 + movui r11, 0 + movui r12, 0 + movui r13, 0 + movui r14, 0 + movui r15, 0 + movui r16, 0 + movui r17, 0 + movui r18, 0 + movui r19, 0 + movui r20, 0 + movui r21, 0 + movui r22, 0 + movui r23, 0 + /* Skip r24 (et) because only exception handler should write it. */ + /* Skip r25 (bt) because only debugger should write it. */ + /* Skip r26 (gp) because it is already been initialized. */ + /* Skip r27 (sp) because it is already been initialized. */ + movui r28, 0 /* fp */ + movui r29, 0 /* ea */ + .set nobreak + movui r30, 0 /* sstatus */ + .set break + movui r31, 0 /* ra */ + +#endif /* NIOS2_ECC_PRESENT */ + +#if (NIOS2_NUM_OF_SHADOW_REG_SETS > 0) + /* + * Setup registers in shadow register sets + * from 1 to NIOS2_NUM_OF_SHADOW_REG_SETS. + */ + + movui r2, 0 /* Contains value written into STATUS */ + movui r3, NIOS2_NUM_OF_SHADOW_REG_SETS /* counter */ + movhi r4, 1 /* Constant to increment STATUS.PRS */ + +.Linitialize_shadow_registers: + /* Increment STATUS.PRS */ + add r2, r2, r4 + wrctl status, r2 + + /* Clear r0 in the shadow register set (not done by hardware) */ + wrprs r0, r0 + + /* Write the GP in previous register set */ + wrprs gp, gp + + /* + * Only write the SP in previous register set + * if using the separate exception stack. For normal case (single stack), + * funnel code would read the SP from previous register set with a RDPRS. + */ +#ifdef ALT_INTERRUPT_STACK + movhi et, %hiadj(__alt_interrupt_stack_pointer) + addi et, et, %lo(__alt_interrupt_stack_pointer) + wrprs sp, et +#endif /* ALT_INTERRUPT_STACK */ + +#ifdef NIOS2_ECC_PRESENT + /* + * Initialize all general-purpose registers so that ECC can be enabled + * later without accidentally triggering a spurious ECC error. + */ + wrprs r1, r0 + wrprs r2, r0 + wrprs r3, r0 + wrprs r4, r0 + wrprs r5, r0 + wrprs r6, r0 + wrprs r7, r0 + wrprs r8, r0 + wrprs r9, r0 + wrprs r10, r0 + wrprs r11, r0 + wrprs r12, r0 + wrprs r13, r0 + wrprs r14, r0 + wrprs r15, r0 + wrprs r16, r0 + wrprs r17, r0 + wrprs r18, r0 + wrprs r19, r0 + wrprs r20, r0 + wrprs r21, r0 + wrprs r22, r0 + wrprs r23, r0 + /* Skip r24 (et) because only exception handler should write it. */ + /* Skip r25 (bt) because only debugger should write it. */ + /* Skip r26 (gp) because it is already been initialized. */ + /* Skip r27 (sp) because it was initialized above or will be by a rdprs if not above */ + wrprs r28, r0 /* fp */ + wrprs r29, r0 /* ea */ + wrprs r30, r0 /* ba */ + wrprs r31, r0 /* ra */ +#endif /* NIOS2_ECC_PRESENT */ + + /* Decrement shadow register set counter */ + addi r3, r3, -1 + + /* Done if index is 0. */ + bne r3, zero, .Linitialize_shadow_registers +#endif /* (NIOS2_NUM_OF_SHADOW_REG_SETS > 0) */ + +/* + * Clear the BSS if not optimizing for RTL simulation. + * + * This uses the symbols: __bss_start and __bss_end, which are defined + * by the linker script. They mark the begining and the end of the bss + * region. The linker script guarantees that these values are word aligned. + */ +#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) + ori r2, r2, %lo(__bss_start) + + movhi r3, %hi(__bss_end) + ori r3, r3, %lo(__bss_end) + + beq r2, r3, 1f + +0: + stw zero, (r2) + addi r2, r2, 4 + bltu r2, r3, 0b + +1: + + /* + * The following debug information tells the ISS not to run the loop above + * but to perform its actions using faster internal code. + */ + .pushsection .debug_alt_sim_info + .int 3, 1, 0b, 1b + .popsection +#endif /* ALT_SIM_OPTIMIZE */ + +/* + * Turn off the use of r1 (the assembler temporary register) + * so that call instructions can be safely relaxed across a + * 256MB boundary if needed + */ + .set at + +/* + * The alt_load() facility is normally used when there is no bootloader. + * It copies some sections into RAM so it acts like a mini-bootloader. + */ +#ifdef CALL_ALT_LOAD + +#ifdef ALT_STACK_CHECK + /* + * If the user has selected stack checking then we need to set up a safe + * value in the stack limit register so that the relocation functions + * don't think the stack has overflowed (the contents of the rwdata + * section aren't defined until alt_load() has been called). + */ + mov et, zero +#endif + + call alt_load + +#endif /* CALL_ALT_LOAD */ + +#ifdef ALT_STACK_CHECK + /* + * Set up the stack limit (if required). The linker has set up the + * copy of the variable which is in memory. + */ + + ldw et, %gprel(alt_stack_limit_value)(gp) +#endif + + /* 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 + + /* Wait in infinite loop in case alt_main does return. */ +alt_after_alt_main: + br alt_after_alt_main + + .size _start, . - _start + +/* + * Add information about the stack base if stack overflow checking is enabled. + */ +#ifdef ALT_STACK_CHECK + .globl alt_stack_limit_value + .section .sdata,"aws",@progbits + .align 2 + .type alt_stack_limit_value, @object + .size alt_stack_limit_value, 4 +alt_stack_limit_value: + .long __alt_stack_limit +#endif diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_a.S b/FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_a.S new file mode 100644 index 0000000..ce05145 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_a.S @@ -0,0 +1,270 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/********************************************************************************************************* + * uC/OS-II + * The Real-Time Kernel + * File : os_cpu_a.S + * For : uC/OS Real-time multitasking kernel for the Nios2 SoftCore Processor + * Written by : IS + * + *********************************************************************************************************/ + +#include "os_cfg.h" + + .text + +/********************************************************************************************************* + * PERFORM A CONTEXT SWITCH + * void OSCtxSw(void) - from task level + * void OSIntCtxSw(void) - from interrupt level + * + * Note(s): 1) Upon entry, + * OSTCBCur points to the OS_TCB of the task to suspend + * OSTCBHighRdy points to the OS_TCB of the task to resume + * + *********************************************************************************************************/ + .global OSIntCtxSw + .global OSCtxSw + +OSIntCtxSw: +OSCtxSw: + + /* + * Save the remaining registers to the stack. + */ + + addi sp, sp, -44 + +#ifdef ALT_STACK_CHECK + + bltu sp, et, .Lstack_overflow + +#endif + +#if OS_THREAD_SAFE_NEWLIB + ldw r3, %gprel(_impure_ptr)(gp) /* load the pointer */ +#endif /* OS_THREAD_SAFE_NEWLIB */ + + ldw r4, %gprel(OSTCBCur)(gp) + + stw ra, 0(sp) + stw fp, 4(sp) + stw r23, 8(sp) + stw r22, 12(sp) + stw r21, 16(sp) + stw r20, 20(sp) + stw r19, 24(sp) + stw r18, 28(sp) + stw r17, 32(sp) + stw r16, 36(sp) + +#if OS_THREAD_SAFE_NEWLIB + /* + * 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 */ +#endif /* OS_THREAD_SAFE_NEWLIB */ + + /* + * 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 */ + /* is the first element in the OS_TCB */ + /* structure. */ + + /* + * Call the user definable OSTaskSWHook() + */ + + call OSTaskSwHook + +0: + +9: + + /* + * OSTCBCur = OSTCBHighRdy; + * OSPrioCur = OSPrioHighRdy; + */ + + ldw r4, %gprel(OSTCBHighRdy)(gp) + ldb r5, %gprel(OSPrioHighRdy)(gp) + + stw r4, %gprel(OSTCBCur)(gp) /* set the current task to be the new task */ + stb r5, %gprel(OSPrioCur)(gp) /* store the new task's priority as the current */ + /* task's priority */ + + /* + * 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 */ + +#if defined(ALT_STACK_CHECK) && (OS_TASK_CREATE_EXT_EN > 0) + + ldw et, 8(r4) /* load the new stack limit */ + +#endif + +#if OS_THREAD_SAFE_NEWLIB + /* + * 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 */ +#endif /* OS_THREAD_SAFE_NEWLIB */ + + /* + * Restore the saved registers for the new task. + */ + + ldw ra, 0(sp) + ldw fp, 4(sp) + ldw r23, 8(sp) + ldw r22, 12(sp) + ldw r21, 16(sp) + ldw r20, 20(sp) + ldw r19, 24(sp) + ldw r18, 28(sp) + ldw r17, 32(sp) + ldw r16, 36(sp) + +#if OS_THREAD_SAFE_NEWLIB + + stw r3, %gprel(_impure_ptr)(gp) /* update _impure_ptr */ + +#endif /* OS_THREAD_SAFE_NEWLIB */ + +#if defined(ALT_STACK_CHECK) && (OS_TASK_CREATE_EXT_EN > 0) + + stw et, %gprel(alt_stack_limit_value)(gp) + +#endif + + addi sp, sp, 44 + + /* + * resume execution of the new task. + */ + + ret + +#ifdef ALT_STACK_CHECK + +.Lstack_overflow: + break 3 + +#endif + +.set OSCtxSw_SWITCH_PC,0b-OSCtxSw + +/********************************************************************************************************* + * START THE HIGHEST PRIORITY TASK + * void OSStartHighRdy(void) + * + * Note(s): 1) Upon entry, + * OSTCBCur points to the OS_TCB of the task to suspend + * OSTCBHighRdy points to the OS_TCB of the task to resume + * + *********************************************************************************************************/ + .global OSStartHighRdy + +OSStartHighRdy: + + /* + * disable interrupts so that the scheduler doesn't run while + * we're initialising this task. + */ + rdctl r18, status + subi r17, zero, 2 /* r17 = 0xfffffffe */ + and r18, r18, r17 + wrctl status, r18 + + /* + * Call the user definable OSTaskSWHook() + */ + + call OSTaskSwHook + + /* + * set OSRunning = TRUE. + */ + + movi r18, 1 /* set r18 to the value 'TRUE' */ + stb r18, %gprel(OSRunning)(gp) /* save this to OSRunning */ + +#if defined(ALT_STACK_CHECK) && (OS_TASK_CREATE_EXT_EN == 0) + + mov et, zero /* Don't check stack limits */ + stw et, %gprel(alt_stack_limit_value)(gp) + +#endif + + /* + * start execution of the new task. + */ + + br 9b + +/********************************************************************************************************* + * CALL THE TASK INITILISATION FUNCTION + * void OSStartTsk(void) + *********************************************************************************************************/ + + .global OSStartTsk + +OSStartTsk: + /* This instruction is never executed. Its here to make the + * backtrace work right + */ + movi sp, 0 + + /* Enable interrupts */ + rdctl r2, status + ori r2, r2, 0x1 + wrctl status, r2 + + ldw r2, 4(sp) + ldw r4, 0(sp) + + addi sp, sp, 8 + + callr r2 + + nop diff --git a/FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_c.c b/FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_c.c new file mode 100644 index 0000000..86648e0 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/HAL/src/os_cpu_c.c @@ -0,0 +1,243 @@ +/*********************************************************************************************** + * uC/OS-II + * The Real-Time Kernel + * File : os_cpu_c.c + * For : uC/OS Real-time multitasking kernel for the Nios2 SoftCore Processor + * Written by : IS + * Based on : Nios port done by JS + * + * Functions defined in this module: + * + ***********************************************************************************************/ + +#include +#include + +#include + +#define OS_CPU_GLOBALS +#include "includes.h" /* Standard includes for uC/OS-II */ + +#include "system.h" + +/* This used to be + * extern alt_u32 OSStartTsk; + * but that results in a fatal error when compiling -mgpopt=global + * because gcc assumes they are normal C variables in .sdata + * and therefore addressable from gp using a 16-bit offset, + * when in fact they are special values defined by linker.x + * and located nowhere near .sdata. + * Specifying __attribute__((section(".data"))) will force these + * in .data. (CASE:258384 or CASE:362640) + */ +extern alt_u32 OSStartTsk __attribute__((section(".data"))); /* The entry point for all tasks. */ + +#if OS_TMR_EN > 0 +static INT16U OSTmrCtr; +#endif + +#ifdef ALT_CPU_EIC_PRESENT +#error Nios II does not support uC/OS-II if EIC is enabled. +#endif + +/*********************************************************************************************** + * INITIALIZE A TASK'S STACK + * + * Description: This function is called by either OSTaskCreate() or OSTaskCreateExt() to + * initialize the stack frame of the task being created. This function is + * highly processor specific. + * + * What it does: It builds up initial stack for a task. + * + * Arguments : task is a pointer to the task code + * + * pdata is a pointer to a user supplied data area that will be passed to the task + * when the task first executes. + * + * ptos is a pointer to the top of stack. It is assumed that 'ptos' points to + * a 'free' entry on the task stack. If OS_STK_GROWTH is set to 1 then + * 'ptos' will contain the HIGHEST valid address of the stack. Similarly, if + * OS_STK_GROWTH is set to 0, the 'ptos' will contains the LOWEST valid address + * of the stack. + * + * opt specifies options that can be used to alter the behavior of OSTaskStkInit(). + * (see uCOS_II.H for OS_TASK_OPT_???). + * + * Returns : Always returns the location of the new top-of-stack' once the processor registers have + * been placed on the stack in the proper order. + * + ***********************************************************************************************/ + +OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdata, OS_STK *pstk, INT16U opt) +{ + INT32U *frame_pointer; + INT32U *stk; + +#if OS_THREAD_SAFE_NEWLIB + struct _reent* local_impure_ptr; + + /* + * 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)); + + _REENT_INIT_PTR (local_impure_ptr); + + /* + * create a stack frame at the top of the stack (leaving space for the + * reentrant data structure). + */ + + frame_pointer = (INT32U*) local_impure_ptr; +#else + frame_pointer = (INT32U*) (((INT32U)(pstk)) & ~0x3); +#endif /* OS_THREAD_SAFE_NEWLIB */ + stk = frame_pointer - 13; + + /* Now fill the stack frame. */ + + stk[12] = (INT32U)task; /* task address (ra) */ + stk[11] = (INT32U) pdata; /* first register argument (r4) */ + +#if OS_THREAD_SAFE_NEWLIB + stk[10] = (INT32U) local_impure_ptr; /* value of _impure_ptr for this thread */ +#endif /* OS_THREAD_SAFE_NEWLIB */ + stk[0] = ((INT32U)&OSStartTsk) + 4;/* exception return address (ea) */ + + /* The next three lines don't generate any code, they just put symbols into + * the debug information which will later be used to navigate the thread + * data structures + */ + __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); +} + +#if OS_CPU_HOOKS_EN +/* +********************************************************************************************************* +* TASK CREATION HOOK +* +* Description: This function is called when a task is created. +* +* Arguments : ptcb is a pointer to the task control block of the task being created. +* +* Note(s) : 1) Interrupts are disabled during this call. +********************************************************************************************************* +*/ +void OSTaskCreateHook (OS_TCB *ptcb) +{ + ptcb = ptcb; /* Prevent compiler warning */ +} + + +/* +********************************************************************************************************* +* TASK DELETION HOOK +* +* Description: This function is called when a task is deleted. +* +* Arguments : ptcb is a pointer to the task control block of the task being deleted. +* +* Note(s) : 1) Interrupts are disabled during this call. +********************************************************************************************************* +*/ +void OSTaskDelHook (OS_TCB *ptcb) +{ + ptcb = ptcb; /* Prevent compiler warning */ +} + +/* +********************************************************************************************************* +* TASK SWITCH HOOK +* +* Description: This function is called when a task switch is performed. This allows you to perform other +* operations during a context switch. +* +* Arguments : none +* +* Note(s) : 1) Interrupts are disabled during this call. +* 2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that +* 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) +{ +} + +/* +********************************************************************************************************* +* STATISTIC TASK HOOK +* +* Description: This function is called every second by uC/OS-II's statistics task. This allows your +* application to add functionality to the statistics task. +* +* Arguments : none +********************************************************************************************************* +*/ +void OSTaskStatHook (void) +{ +} + +/* +********************************************************************************************************* +* TICK HOOK +* +* Description: This function is called every tick. +* +* Arguments : none +* +* Note(s) : 1) Interrupts may or may not be ENABLED during this call. +********************************************************************************************************* +*/ + +/* + * Iniche stack has no header declaration for its timer 'hook'. + * Do that here to avoid build warnings. + */ +#ifdef ALT_INICHE +void cticks_hook(void); +#endif + +void OSTimeTickHook (void) +{ +#if OS_TMR_EN > 0 + OSTmrCtr++; + if (OSTmrCtr >= (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC)) { + OSTmrCtr = 0; + OSTmrSignal(); + } +#endif + +#ifdef ALT_INICHE + /* Service the Interniche timer */ + cticks_hook(); +#endif +} + +void OSInitHookBegin(void) +{ +#if OS_TMR_EN > 0 + OSTmrCtr = 0; +#endif +} + +void OSInitHookEnd(void) +{ +} + +void OSTaskIdleHook(void) +{ +} + +void OSTCBInitHook(OS_TCB *ptcb) +{ +} + +#endif diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/Micrium_45_Day_Evaluation_License.pdf b/FPGA_nios/hit_pat_bsp/UCOSII/Micrium_45_Day_Evaluation_License.pdf new file mode 100644 index 0000000000000000000000000000000000000000..de49fdaf14e49ea950c6f65965e95a95704e1dd7 GIT binary patch literal 96321 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'V{t00X|Xhbf2abL_QY`|2ZWuMwBW^B{zX7s40(a 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 z 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%0Dr%n^dS}jcDxibi9CG#y# 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 +#include +#include + +/* +********************************************************************************************************* +* MISCELLANEOUS +********************************************************************************************************* +*/ + +#ifdef OS_GLOBALS +#define OS_EXT +#else +#define OS_EXT extern +#endif + +#ifndef OS_FALSE +#define OS_FALSE 0u +#endif + +#ifndef OS_TRUE +#define OS_TRUE 1u +#endif + +#define OS_ASCII_NUL (INT8U)0 + +#define OS_PRIO_SELF 0xFFu /* Indicate SELF priority */ + +#if OS_TASK_STAT_EN > 0 +#define OS_N_SYS_TASKS 2u /* Number of system tasks */ +#else +#define OS_N_SYS_TASKS 1u +#endif + +#define OS_TASK_STAT_PRIO (OS_LOWEST_PRIO - 1) /* Statistic task priority */ +#define OS_TASK_IDLE_PRIO (OS_LOWEST_PRIO) /* IDLE task priority */ + +#if OS_LOWEST_PRIO <= 63 +#define OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) /* Size of event table */ +#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) /* Size of ready table */ +#else +#define OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 16 + 1) /* Size of event table */ +#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 16 + 1) /* Size of ready table */ +#endif + +#define OS_TASK_IDLE_ID 65535u /* ID numbers for Idle, Stat and Timer tasks */ +#define OS_TASK_STAT_ID 65534u +#define OS_TASK_TMR_ID 65533u + +#define OS_EVENT_EN (((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0)) + +#define OS_TCB_RESERVED ((OS_TCB *)1) + +/*$PAGE*/ +/* +********************************************************************************************************* +* TASK STATUS (Bit definition for OSTCBStat) +********************************************************************************************************* +*/ +#define OS_STAT_RDY 0x00u /* Ready to run */ +#define OS_STAT_SEM 0x01u /* Pending on semaphore */ +#define OS_STAT_MBOX 0x02u /* Pending on mailbox */ +#define OS_STAT_Q 0x04u /* Pending on queue */ +#define OS_STAT_SUSPEND 0x08u /* Task is suspended */ +#define OS_STAT_MUTEX 0x10u /* Pending on mutual exclusion semaphore */ +#define OS_STAT_FLAG 0x20u /* Pending on event flag group */ +#define OS_STAT_MULTI 0x80u /* Pending on multiple events */ + +#define OS_STAT_PEND_ANY (OS_STAT_SEM | OS_STAT_MBOX | OS_STAT_Q | OS_STAT_MUTEX | OS_STAT_FLAG) + +/* +********************************************************************************************************* +* TASK PEND STATUS (Status codes for OSTCBStatPend) +********************************************************************************************************* +*/ +#define OS_STAT_PEND_OK 0u /* Pending status OK, not pending, or pending complete */ +#define OS_STAT_PEND_TO 1u /* Pending timed out */ +#define OS_STAT_PEND_ABORT 2u /* Pending aborted */ + +/* +********************************************************************************************************* +* OS_EVENT types +********************************************************************************************************* +*/ +#define OS_EVENT_TYPE_UNUSED 0u +#define OS_EVENT_TYPE_MBOX 1u +#define OS_EVENT_TYPE_Q 2u +#define OS_EVENT_TYPE_SEM 3u +#define OS_EVENT_TYPE_MUTEX 4u +#define OS_EVENT_TYPE_FLAG 5u + +#define OS_TMR_TYPE 100u /* Used to identify Timers ... */ + /* ... (Must be different value than OS_EVENT_TYPE_xxx) */ + +/* +********************************************************************************************************* +* EVENT FLAGS +********************************************************************************************************* +*/ +#define OS_FLAG_WAIT_CLR_ALL 0u /* Wait for ALL the bits specified to be CLR (i.e. 0) */ +#define OS_FLAG_WAIT_CLR_AND 0u + +#define OS_FLAG_WAIT_CLR_ANY 1u /* Wait for ANY of the bits specified to be CLR (i.e. 0) */ +#define OS_FLAG_WAIT_CLR_OR 1u + +#define OS_FLAG_WAIT_SET_ALL 2u /* Wait for ALL the bits specified to be SET (i.e. 1) */ +#define OS_FLAG_WAIT_SET_AND 2u + +#define OS_FLAG_WAIT_SET_ANY 3u /* Wait for ANY of the bits specified to be SET (i.e. 1) */ +#define OS_FLAG_WAIT_SET_OR 3u + + +#define OS_FLAG_CONSUME 0x80u /* Consume the flags if condition(s) satisfied */ + + +#define OS_FLAG_CLR 0u +#define OS_FLAG_SET 1u + +/* +********************************************************************************************************* +* Values for OSTickStepState +* +* Note(s): This feature is used by uC/OS-View. +********************************************************************************************************* +*/ + +#if OS_TICK_STEP_EN > 0 +#define OS_TICK_STEP_DIS 0u /* Stepping is disabled, tick runs as mormal */ +#define OS_TICK_STEP_WAIT 1u /* Waiting for uC/OS-View to set OSTickStepState to _ONCE */ +#define OS_TICK_STEP_ONCE 2u /* Process tick once and wait for next cmd from uC/OS-View */ +#endif + +/* +********************************************************************************************************* +* Possible values for 'opt' argument of OSSemDel(), OSMboxDel(), OSQDel() and OSMutexDel() +********************************************************************************************************* +*/ +#define OS_DEL_NO_PEND 0u +#define OS_DEL_ALWAYS 1u + +/* +********************************************************************************************************* +* OS???Pend() OPTIONS +* +* These #defines are used to establish the options for OS???PendAbort(). +********************************************************************************************************* +*/ +#define OS_PEND_OPT_NONE 0u /* NO option selected */ +#define OS_PEND_OPT_BROADCAST 1u /* Broadcast action to ALL tasks waiting */ + +/* +********************************************************************************************************* +* OS???PostOpt() OPTIONS +* +* These #defines are used to establish the options for OSMboxPostOpt() and OSQPostOpt(). +********************************************************************************************************* +*/ +#define OS_POST_OPT_NONE 0x00u /* NO option selected */ +#define OS_POST_OPT_BROADCAST 0x01u /* Broadcast message to ALL tasks waiting */ +#define OS_POST_OPT_FRONT 0x02u /* Post to highest priority task waiting */ +#define OS_POST_OPT_NO_SCHED 0x04u /* Do not call the scheduler if this option is selected */ + +/* +********************************************************************************************************* +* TASK OPTIONS (see OSTaskCreateExt()) +********************************************************************************************************* +*/ +#define OS_TASK_OPT_NONE 0x0000u /* NO option selected */ +#define OS_TASK_OPT_STK_CHK 0x0001u /* Enable stack checking for the task */ +#define OS_TASK_OPT_STK_CLR 0x0002u /* Clear the stack when the task is create */ +#define OS_TASK_OPT_SAVE_FP 0x0004u /* Save the contents of any floating-point registers */ + +/* +********************************************************************************************************* +* TIMER OPTIONS (see OSTmrStart() and OSTmrStop()) +********************************************************************************************************* +*/ +#define OS_TMR_OPT_NONE 0u /* No option selected */ + +#define OS_TMR_OPT_ONE_SHOT 1u /* Timer will not automatically restart when it expires */ +#define OS_TMR_OPT_PERIODIC 2u /* Timer will automatically restart when it expires */ + +#define OS_TMR_OPT_CALLBACK 3u /* OSTmrStop() option to call 'callback' w/ timer arg. */ +#define OS_TMR_OPT_CALLBACK_ARG 4u /* OSTmrStop() option to call 'callback' w/ new arg. */ + +/* +********************************************************************************************************* +* TIMER STATES +********************************************************************************************************* +*/ +#define OS_TMR_STATE_UNUSED 0u +#define OS_TMR_STATE_STOPPED 1u +#define OS_TMR_STATE_COMPLETED 2u +#define OS_TMR_STATE_RUNNING 3u + +/* +********************************************************************************************************* +* ERROR CODES +********************************************************************************************************* +*/ +#define OS_ERR_NONE 0u + +#define OS_ERR_EVENT_TYPE 1u +#define OS_ERR_PEND_ISR 2u +#define OS_ERR_POST_NULL_PTR 3u +#define OS_ERR_PEVENT_NULL 4u +#define OS_ERR_POST_ISR 5u +#define OS_ERR_QUERY_ISR 6u +#define OS_ERR_INVALID_OPT 7u +#define OS_ERR_PDATA_NULL 9u + +#define OS_ERR_TIMEOUT 10u +#define OS_ERR_EVENT_NAME_TOO_LONG 11u +#define OS_ERR_PNAME_NULL 12u +#define OS_ERR_PEND_LOCKED 13u +#define OS_ERR_PEND_ABORT 14u +#define OS_ERR_DEL_ISR 15u +#define OS_ERR_CREATE_ISR 16u +#define OS_ERR_NAME_GET_ISR 17u +#define OS_ERR_NAME_SET_ISR 18u + +#define OS_ERR_MBOX_FULL 20u + +#define OS_ERR_Q_FULL 30u +#define OS_ERR_Q_EMPTY 31u + +#define OS_ERR_PRIO_EXIST 40u +#define OS_ERR_PRIO 41u +#define OS_ERR_PRIO_INVALID 42u + +#define OS_ERR_SEM_OVF 50u + +#define OS_ERR_TASK_CREATE_ISR 60u +#define OS_ERR_TASK_DEL 61u +#define OS_ERR_TASK_DEL_IDLE 62u +#define OS_ERR_TASK_DEL_REQ 63u +#define OS_ERR_TASK_DEL_ISR 64u +#define OS_ERR_TASK_NAME_TOO_LONG 65u +#define OS_ERR_TASK_NO_MORE_TCB 66u +#define OS_ERR_TASK_NOT_EXIST 67u +#define OS_ERR_TASK_NOT_SUSPENDED 68u +#define OS_ERR_TASK_OPT 69u +#define OS_ERR_TASK_RESUME_PRIO 70u +#define OS_ERR_TASK_SUSPEND_IDLE 71u +#define OS_ERR_TASK_SUSPEND_PRIO 72u +#define OS_ERR_TASK_WAITING 73u + +#define OS_ERR_TIME_NOT_DLY 80u +#define OS_ERR_TIME_INVALID_MINUTES 81u +#define OS_ERR_TIME_INVALID_SECONDS 82u +#define OS_ERR_TIME_INVALID_MS 83u +#define OS_ERR_TIME_ZERO_DLY 84u +#define OS_ERR_TIME_DLY_ISR 85u + +#define OS_ERR_MEM_INVALID_PART 90u +#define OS_ERR_MEM_INVALID_BLKS 91u +#define OS_ERR_MEM_INVALID_SIZE 92u +#define OS_ERR_MEM_NO_FREE_BLKS 93u +#define OS_ERR_MEM_FULL 94u +#define OS_ERR_MEM_INVALID_PBLK 95u +#define OS_ERR_MEM_INVALID_PMEM 96u +#define OS_ERR_MEM_INVALID_PDATA 97u +#define OS_ERR_MEM_INVALID_ADDR 98u +#define OS_ERR_MEM_NAME_TOO_LONG 99u + +#define OS_ERR_NOT_MUTEX_OWNER 100u + +#define OS_ERR_FLAG_INVALID_PGRP 110u +#define OS_ERR_FLAG_WAIT_TYPE 111u +#define OS_ERR_FLAG_NOT_RDY 112u +#define OS_ERR_FLAG_INVALID_OPT 113u +#define OS_ERR_FLAG_GRP_DEPLETED 114u +#define OS_ERR_FLAG_NAME_TOO_LONG 115u + +#define OS_ERR_PIP_LOWER 120u + +#define OS_ERR_TMR_INVALID_DLY 130u +#define OS_ERR_TMR_INVALID_PERIOD 131u +#define OS_ERR_TMR_INVALID_OPT 132u +#define OS_ERR_TMR_INVALID_NAME 133u +#define OS_ERR_TMR_NON_AVAIL 134u +#define OS_ERR_TMR_INACTIVE 135u +#define OS_ERR_TMR_INVALID_DEST 136u +#define OS_ERR_TMR_INVALID_TYPE 137u +#define OS_ERR_TMR_INVALID 138u +#define OS_ERR_TMR_ISR 139u +#define OS_ERR_TMR_NAME_TOO_LONG 140u +#define OS_ERR_TMR_INVALID_STATE 141u +#define OS_ERR_TMR_STOPPED 142u +#define OS_ERR_TMR_NO_CALLBACK 143u + +/* +********************************************************************************************************* +* OLD ERROR CODE NAMES (< V2.84) +********************************************************************************************************* +*/ +#define OS_NO_ERR OS_ERR_NONE +#define OS_TIMEOUT OS_ERR_TIMEOUT +#define OS_TASK_NOT_EXIST OS_ERR_TASK_NOT_EXIST +#define OS_MBOX_FULL OS_ERR_MBOX_FULL +#define OS_Q_FULL OS_ERR_Q_FULL +#define OS_Q_EMPTY OS_ERR_Q_EMPTY +#define OS_PRIO_EXIST OS_ERR_PRIO_EXIST +#define OS_PRIO_ERR OS_ERR_PRIO +#define OS_PRIO_INVALID OS_ERR_PRIO_INVALID +#define OS_SEM_OVF OS_ERR_SEM_OVF +#define OS_TASK_DEL_ERR OS_ERR_TASK_DEL +#define OS_TASK_DEL_IDLE OS_ERR_TASK_DEL_IDLE +#define OS_TASK_DEL_REQ OS_ERR_TASK_DEL_REQ +#define OS_TASK_DEL_ISR OS_ERR_TASK_DEL_ISR +#define OS_NO_MORE_TCB OS_ERR_TASK_NO_MORE_TCB +#define OS_TIME_NOT_DLY OS_ERR_TIME_NOT_DLY +#define OS_TIME_INVALID_MINUTES OS_ERR_TIME_INVALID_MINUTES +#define OS_TIME_INVALID_SECONDS OS_ERR_TIME_INVALID_SECONDS +#define OS_TIME_INVALID_MS OS_ERR_TIME_INVALID_MS +#define OS_TIME_ZERO_DLY OS_ERR_TIME_ZERO_DLY +#define OS_TASK_SUSPEND_PRIO OS_ERR_TASK_SUSPEND_PRIO +#define OS_TASK_SUSPEND_IDLE OS_ERR_TASK_SUSPEND_IDLE +#define OS_TASK_RESUME_PRIO OS_ERR_TASK_RESUME_PRIO +#define OS_TASK_NOT_SUSPENDED OS_ERR_TASK_NOT_SUSPENDED +#define OS_MEM_INVALID_PART OS_ERR_MEM_INVALID_PART +#define OS_MEM_INVALID_BLKS OS_ERR_MEM_INVALID_BLKS +#define OS_MEM_INVALID_SIZE OS_ERR_MEM_INVALID_SIZE +#define OS_MEM_NO_FREE_BLKS OS_ERR_MEM_NO_FREE_BLKS +#define OS_MEM_FULL OS_ERR_MEM_FULL +#define OS_MEM_INVALID_PBLK OS_ERR_MEM_INVALID_PBLK +#define OS_MEM_INVALID_PMEM OS_ERR_MEM_INVALID_PMEM +#define OS_MEM_INVALID_PDATA OS_ERR_MEM_INVALID_PDATA +#define OS_MEM_INVALID_ADDR OS_ERR_MEM_INVALID_ADDR +#define OS_MEM_NAME_TOO_LONG OS_ERR_MEM_NAME_TOO_LONG +#define OS_TASK_OPT_ERR OS_ERR_TASK_OPT +#define OS_FLAG_INVALID_PGRP OS_ERR_FLAG_INVALID_PGRP +#define OS_FLAG_ERR_WAIT_TYPE OS_ERR_FLAG_WAIT_TYPE +#define OS_FLAG_ERR_NOT_RDY OS_ERR_FLAG_NOT_RDY +#define OS_FLAG_INVALID_OPT OS_ERR_FLAG_INVALID_OPT +#define OS_FLAG_GRP_DEPLETED OS_ERR_FLAG_GRP_DEPLETED + +/*$PAGE*/ +/* +********************************************************************************************************* +* EVENT CONTROL BLOCK +********************************************************************************************************* +*/ + +#if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) +typedef struct os_event { + INT8U OSEventType; /* Type of event control block (see OS_EVENT_TYPE_xxxx) */ + void *OSEventPtr; /* Pointer to message or queue structure */ + INT16U OSEventCnt; /* Semaphore Count (not used if other EVENT type) */ +#if OS_LOWEST_PRIO <= 63 + INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ + INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ +#else + INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ + INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ +#endif + +#if OS_EVENT_NAME_SIZE > 1 + INT8U OSEventName[OS_EVENT_NAME_SIZE]; +#endif +} OS_EVENT; +#endif + + +/* +********************************************************************************************************* +* EVENT FLAGS CONTROL BLOCK +********************************************************************************************************* +*/ + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) + +#if OS_FLAGS_NBITS == 8 /* Determine the size of OS_FLAGS (8, 16 or 32 bits) */ +typedef INT8U OS_FLAGS; +#endif + +#if OS_FLAGS_NBITS == 16 +typedef INT16U OS_FLAGS; +#endif + +#if OS_FLAGS_NBITS == 32 +typedef INT32U OS_FLAGS; +#endif + + +typedef struct os_flag_grp { /* Event Flag Group */ + INT8U OSFlagType; /* Should be set to OS_EVENT_TYPE_FLAG */ + void *OSFlagWaitList; /* Pointer to first NODE of task waiting on event flag */ + OS_FLAGS OSFlagFlags; /* 8, 16 or 32 bit flags */ +#if OS_FLAG_NAME_SIZE > 1 + INT8U OSFlagName[OS_FLAG_NAME_SIZE]; +#endif +} OS_FLAG_GRP; + + + +typedef struct os_flag_node { /* Event Flag Wait List Node */ + void *OSFlagNodeNext; /* Pointer to next NODE in wait list */ + void *OSFlagNodePrev; /* Pointer to previous NODE in wait list */ + void *OSFlagNodeTCB; /* Pointer to TCB of waiting task */ + void *OSFlagNodeFlagGrp; /* Pointer to Event Flag Group */ + OS_FLAGS OSFlagNodeFlags; /* Event flag to wait on */ + INT8U OSFlagNodeWaitType; /* Type of wait: */ + /* OS_FLAG_WAIT_AND */ + /* OS_FLAG_WAIT_ALL */ + /* OS_FLAG_WAIT_OR */ + /* OS_FLAG_WAIT_ANY */ +} OS_FLAG_NODE; +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* MESSAGE MAILBOX DATA +********************************************************************************************************* +*/ + +#if OS_MBOX_EN > 0 +typedef struct os_mbox_data { + void *OSMsg; /* Pointer to message in mailbox */ +#if OS_LOWEST_PRIO <= 63 + INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ + INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ +#else + INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ + INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ +#endif +} OS_MBOX_DATA; +#endif + +/* +********************************************************************************************************* +* MEMORY PARTITION DATA STRUCTURES +********************************************************************************************************* +*/ + +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) +typedef struct os_mem { /* MEMORY CONTROL BLOCK */ + void *OSMemAddr; /* Pointer to beginning of memory partition */ + void *OSMemFreeList; /* Pointer to list of free memory blocks */ + INT32U OSMemBlkSize; /* Size (in bytes) of each block of memory */ + INT32U OSMemNBlks; /* Total number of blocks in this partition */ + INT32U OSMemNFree; /* Number of memory blocks remaining in this partition */ +#if OS_MEM_NAME_SIZE > 1 + INT8U OSMemName[OS_MEM_NAME_SIZE]; /* Memory partition name */ +#endif +} OS_MEM; + + +typedef struct os_mem_data { + void *OSAddr; /* Pointer to the beginning address of the memory partition */ + void *OSFreeList; /* Pointer to the beginning of the free list of memory blocks */ + INT32U OSBlkSize; /* Size (in bytes) of each memory block */ + INT32U OSNBlks; /* Total number of blocks in the partition */ + INT32U OSNFree; /* Number of memory blocks free */ + INT32U OSNUsed; /* Number of memory blocks used */ +} OS_MEM_DATA; +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* MUTUAL EXCLUSION SEMAPHORE DATA +********************************************************************************************************* +*/ + +#if OS_MUTEX_EN > 0 +typedef struct os_mutex_data { +#if OS_LOWEST_PRIO <= 63 + INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ + INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ +#else + INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ + INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ +#endif + BOOLEAN OSValue; /* Mutex value (OS_FALSE = used, OS_TRUE = available) */ + INT8U OSOwnerPrio; /* Mutex owner's task priority or 0xFF if no owner */ + INT8U OSMutexPIP; /* Priority Inheritance Priority or 0xFF if no owner */ +} OS_MUTEX_DATA; +#endif + +/* +********************************************************************************************************* +* MESSAGE QUEUE DATA +********************************************************************************************************* +*/ + +#if OS_Q_EN > 0 +typedef struct os_q { /* QUEUE CONTROL BLOCK */ + struct os_q *OSQPtr; /* Link to next queue control block in list of free blocks */ + void **OSQStart; /* Pointer to start of queue data */ + void **OSQEnd; /* Pointer to end of queue data */ + void **OSQIn; /* Pointer to where next message will be inserted in the Q */ + void **OSQOut; /* Pointer to where next message will be extracted from the Q */ + INT16U OSQSize; /* Size of queue (maximum number of entries) */ + INT16U OSQEntries; /* Current number of entries in the queue */ +} OS_Q; + + +typedef struct os_q_data { + void *OSMsg; /* Pointer to next message to be extracted from queue */ + INT16U OSNMsgs; /* Number of messages in message queue */ + INT16U OSQSize; /* Size of message queue */ +#if OS_LOWEST_PRIO <= 63 + INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ + INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ +#else + INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ + INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ +#endif +} OS_Q_DATA; +#endif + +/* +********************************************************************************************************* +* SEMAPHORE DATA +********************************************************************************************************* +*/ + +#if OS_SEM_EN > 0 +typedef struct os_sem_data { + INT16U OSCnt; /* Semaphore count */ +#if OS_LOWEST_PRIO <= 63 + INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ + INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ +#else + INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ + INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ +#endif +} OS_SEM_DATA; +#endif + +/* +********************************************************************************************************* +* TASK STACK DATA +********************************************************************************************************* +*/ + +#if OS_TASK_CREATE_EXT_EN > 0 +typedef struct os_stk_data { + INT32U OSFree; /* Number of free bytes on the stack */ + INT32U OSUsed; /* Number of bytes used on the stack */ +} OS_STK_DATA; +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* TASK CONTROL BLOCK +********************************************************************************************************* +*/ + +typedef struct os_tcb { + OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */ + +#if OS_TASK_CREATE_EXT_EN > 0 + void *OSTCBExtPtr; /* Pointer to user definable data for TCB extension */ + OS_STK *OSTCBStkBottom; /* Pointer to bottom of stack */ + INT32U OSTCBStkSize; /* Size of task stack (in number of stack elements) */ + INT16U OSTCBOpt; /* Task options as passed by OSTaskCreateExt() */ + INT16U OSTCBId; /* Task ID (0..65535) */ +#endif + + struct os_tcb *OSTCBNext; /* Pointer to next TCB in the TCB list */ + struct os_tcb *OSTCBPrev; /* Pointer to previous TCB in the TCB list */ + +#if (OS_EVENT_EN) || (OS_FLAG_EN > 0) + OS_EVENT *OSTCBEventPtr; /* Pointer to event control block */ +#endif + +#if (OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0) + OS_EVENT **OSTCBEventMultiPtr; /* Pointer to multiple event control blocks */ +#endif + +#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) + void *OSTCBMsg; /* Message received from OSMboxPost() or OSQPost() */ +#endif + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) +#if OS_TASK_DEL_EN > 0 + OS_FLAG_NODE *OSTCBFlagNode; /* Pointer to event flag node */ +#endif + OS_FLAGS OSTCBFlagsRdy; /* Event flags that made task ready to run */ +#endif + + INT16U OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */ + INT8U OSTCBStat; /* Task status */ + INT8U OSTCBStatPend; /* Task PEND status */ + INT8U OSTCBPrio; /* Task priority (0 == highest) */ + + INT8U OSTCBX; /* Bit position in group corresponding to task priority */ + INT8U OSTCBY; /* Index into ready table corresponding to task priority */ +#if OS_LOWEST_PRIO <= 63 + INT8U OSTCBBitX; /* Bit mask to access bit position in ready table */ + INT8U OSTCBBitY; /* Bit mask to access bit position in ready group */ +#else + INT16U OSTCBBitX; /* Bit mask to access bit position in ready table */ + INT16U OSTCBBitY; /* Bit mask to access bit position in ready group */ +#endif + +#if OS_TASK_DEL_EN > 0 + INT8U OSTCBDelReq; /* Indicates whether a task needs to delete itself */ +#endif + +#if OS_TASK_PROFILE_EN > 0 + INT32U OSTCBCtxSwCtr; /* Number of time the task was switched in */ + INT32U OSTCBCyclesTot; /* Total number of clock cycles the task has been running */ + INT32U OSTCBCyclesStart; /* Snapshot of cycle counter at start of task resumption */ + OS_STK *OSTCBStkBase; /* Pointer to the beginning of the task stack */ + INT32U OSTCBStkUsed; /* Number of bytes used from the stack */ +#endif + +#if OS_TASK_NAME_SIZE > 1 + INT8U OSTCBTaskName[OS_TASK_NAME_SIZE]; +#endif +} OS_TCB; + +/*$PAGE*/ +/* +************************************************************************************************************************ +* TIMER DATA TYPES +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +typedef void (*OS_TMR_CALLBACK)(void *ptmr, void *parg); + + + +typedef struct os_tmr { + INT8U OSTmrType; /* Should be set to OS_TMR_TYPE */ + OS_TMR_CALLBACK OSTmrCallback; /* Function to call when timer expires */ + void *OSTmrCallbackArg; /* Argument to pass to function when timer expires */ + void *OSTmrNext; /* Double link list pointers */ + void *OSTmrPrev; + INT32U OSTmrMatch; /* Timer expires when OSTmrTime == OSTmrMatch */ + INT32U OSTmrDly; /* Delay time before periodic update starts */ + INT32U OSTmrPeriod; /* Period to repeat timer */ +#if OS_TMR_CFG_NAME_SIZE > 0 + INT8U OSTmrName[OS_TMR_CFG_NAME_SIZE]; /* Name to give the timer */ +#endif + INT8U OSTmrOpt; /* Options (see OS_TMR_OPT_xxx) */ + INT8U OSTmrState; /* Indicates the state of the timer: */ + /* OS_TMR_STATE_UNUSED */ + /* OS_TMR_STATE_RUNNING */ + /* OS_TMR_STATE_STOPPED */ +} OS_TMR; + + + +typedef struct os_tmr_wheel { + OS_TMR *OSTmrFirst; /* Pointer to first timer in linked list */ + INT16U OSTmrEntries; +} OS_TMR_WHEEL; +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* GLOBAL VARIABLES +********************************************************************************************************* +*/ + +OS_EXT INT32U OSCtxSwCtr; /* Counter of number of context switches */ + +#if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) +OS_EXT OS_EVENT *OSEventFreeList; /* Pointer to list of free EVENT control blocks */ +OS_EXT OS_EVENT OSEventTbl[OS_MAX_EVENTS];/* Table of EVENT control blocks */ +#endif + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) +OS_EXT OS_FLAG_GRP OSFlagTbl[OS_MAX_FLAGS]; /* Table containing event flag groups */ +OS_EXT OS_FLAG_GRP *OSFlagFreeList; /* Pointer to free list of event flag groups */ +#endif + +#if OS_TASK_STAT_EN > 0 +OS_EXT INT8U OSCPUUsage; /* Percentage of CPU used */ +OS_EXT INT32U OSIdleCtrMax; /* Max. value that idle ctr can take in 1 sec. */ +OS_EXT INT32U OSIdleCtrRun; /* Val. reached by idle ctr at run time in 1 sec. */ +OS_EXT BOOLEAN OSStatRdy; /* Flag indicating that the statistic task is rdy */ +OS_EXT OS_STK OSTaskStatStk[OS_TASK_STAT_STK_SIZE]; /* Statistics task stack */ +#endif + +OS_EXT INT8U OSIntNesting; /* Interrupt nesting level */ + +OS_EXT INT8U OSLockNesting; /* Multitasking lock nesting level */ + +OS_EXT INT8U OSPrioCur; /* Priority of current task */ +OS_EXT INT8U OSPrioHighRdy; /* Priority of highest priority task */ + +#if OS_LOWEST_PRIO <= 63 +OS_EXT INT8U OSRdyGrp; /* Ready list group */ +OS_EXT INT8U OSRdyTbl[OS_RDY_TBL_SIZE]; /* Table of tasks which are ready to run */ +#else +OS_EXT INT16U OSRdyGrp; /* Ready list group */ +OS_EXT INT16U OSRdyTbl[OS_RDY_TBL_SIZE]; /* Table of tasks which are ready to run */ +#endif + +OS_EXT BOOLEAN OSRunning; /* Flag indicating that kernel is running */ + +OS_EXT INT8U OSTaskCtr; /* Number of tasks created */ + +OS_EXT volatile INT32U OSIdleCtr; /* Idle counter */ + +OS_EXT OS_STK OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE]; /* Idle task stack */ + + +OS_EXT OS_TCB *OSTCBCur; /* Pointer to currently running TCB */ +OS_EXT OS_TCB *OSTCBFreeList; /* Pointer to list of free TCBs */ +OS_EXT OS_TCB *OSTCBHighRdy; /* Pointer to highest priority TCB R-to-R */ +OS_EXT OS_TCB *OSTCBList; /* Pointer to doubly linked list of TCBs */ +OS_EXT OS_TCB *OSTCBPrioTbl[OS_LOWEST_PRIO + 1];/* Table of pointers to created TCBs */ +OS_EXT OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]; /* Table of TCBs */ + +#if OS_TICK_STEP_EN > 0 +OS_EXT INT8U OSTickStepState; /* Indicates the state of the tick step feature */ +#endif + +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) +OS_EXT OS_MEM *OSMemFreeList; /* Pointer to free list of memory partitions */ +OS_EXT OS_MEM OSMemTbl[OS_MAX_MEM_PART];/* Storage for memory partition manager */ +#endif + +#if (OS_Q_EN > 0) && (OS_MAX_QS > 0) +OS_EXT OS_Q *OSQFreeList; /* Pointer to list of free QUEUE control blocks */ +OS_EXT OS_Q OSQTbl[OS_MAX_QS]; /* Table of QUEUE control blocks */ +#endif + +#if OS_TIME_GET_SET_EN > 0 +OS_EXT volatile INT32U OSTime; /* Current value of system time (in ticks) */ +#endif + +#if OS_TMR_EN > 0 +OS_EXT INT16U OSTmrFree; /* Number of free entries in the timer pool */ +OS_EXT INT16U OSTmrUsed; /* Number of timers used */ +OS_EXT INT32U OSTmrTime; /* Current timer time */ + +OS_EXT OS_EVENT *OSTmrSem; /* Sem. used to gain exclusive access to timers */ +OS_EXT OS_EVENT *OSTmrSemSignal; /* Sem. used to signal the update of timers */ + +OS_EXT OS_TMR OSTmrTbl[OS_TMR_CFG_MAX]; /* Table containing pool of timers */ +OS_EXT OS_TMR *OSTmrFreeList; /* Pointer to free list of timers */ +OS_EXT OS_STK OSTmrTaskStk[OS_TASK_TMR_STK_SIZE]; + +OS_EXT OS_TMR_WHEEL OSTmrWheelTbl[OS_TMR_CFG_WHEEL_SIZE]; +#endif + +extern INT8U const OSUnMapTbl[256]; /* Priority->Index lookup table */ + +/*$PAGE*/ +/* +********************************************************************************************************* +* FUNCTION PROTOTYPES +* (Target Independent Functions) +********************************************************************************************************* +*/ + +/* +********************************************************************************************************* +* MISCELLANEOUS +********************************************************************************************************* +*/ + +#if (OS_EVENT_EN) + +#if (OS_EVENT_NAME_SIZE > 1) +INT8U OSEventNameGet (OS_EVENT *pevent, + INT8U *pname, + INT8U *perr); + +void OSEventNameSet (OS_EVENT *pevent, + INT8U *pname, + INT8U *perr); +#endif + +#if (OS_EVENT_MULTI_EN > 0) +INT16U OSEventPendMulti (OS_EVENT **pevents_pend, + OS_EVENT **pevents_rdy, + void **pmsgs_rdy, + INT16U timeout, + INT8U *perr); +#endif + +#endif + +/* +********************************************************************************************************* +* EVENT FLAGS MANAGEMENT +********************************************************************************************************* +*/ + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) + +#if OS_FLAG_ACCEPT_EN > 0 +OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, + OS_FLAGS flags, + INT8U wait_type, + INT8U *perr); +#endif + +OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, + INT8U *perr); + +#if OS_FLAG_DEL_EN > 0 +OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, + INT8U opt, + INT8U *perr); +#endif + +#if (OS_FLAG_EN > 0) && (OS_FLAG_NAME_SIZE > 1) +INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp, + INT8U *pname, + INT8U *perr); + +void OSFlagNameSet (OS_FLAG_GRP *pgrp, + INT8U *pname, + INT8U *perr); +#endif + +OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, + OS_FLAGS flags, + INT8U wait_type, + INT16U timeout, + INT8U *perr); + +OS_FLAGS OSFlagPendGetFlagsRdy (void); +OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp, + OS_FLAGS flags, + INT8U opt, + INT8U *perr); + +#if OS_FLAG_QUERY_EN > 0 +OS_FLAGS OSFlagQuery (OS_FLAG_GRP *pgrp, + INT8U *perr); +#endif +#endif + +/* +********************************************************************************************************* +* MESSAGE MAILBOX MANAGEMENT +********************************************************************************************************* +*/ + +#if OS_MBOX_EN > 0 + +#if OS_MBOX_ACCEPT_EN > 0 +void *OSMboxAccept (OS_EVENT *pevent); +#endif + +OS_EVENT *OSMboxCreate (void *pmsg); + +#if OS_MBOX_DEL_EN > 0 +OS_EVENT *OSMboxDel (OS_EVENT *pevent, + INT8U opt, + INT8U *perr); +#endif + +void *OSMboxPend (OS_EVENT *pevent, + INT16U timeout, + INT8U *perr); + +#if OS_MBOX_PEND_ABORT_EN > 0 +INT8U OSMboxPendAbort (OS_EVENT *pevent, + INT8U opt, + INT8U *perr); +#endif + +#if OS_MBOX_POST_EN > 0 +INT8U OSMboxPost (OS_EVENT *pevent, + void *pmsg); +#endif + +#if OS_MBOX_POST_OPT_EN > 0 +INT8U OSMboxPostOpt (OS_EVENT *pevent, + void *pmsg, + INT8U opt); +#endif + +#if OS_MBOX_QUERY_EN > 0 +INT8U OSMboxQuery (OS_EVENT *pevent, + OS_MBOX_DATA *p_mbox_data); +#endif +#endif + +/* +********************************************************************************************************* +* MEMORY MANAGEMENT +********************************************************************************************************* +*/ + +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) + +OS_MEM *OSMemCreate (void *addr, + INT32U nblks, + INT32U blksize, + INT8U *perr); + +void *OSMemGet (OS_MEM *pmem, + INT8U *perr); +#if OS_MEM_NAME_SIZE > 1 +INT8U OSMemNameGet (OS_MEM *pmem, + INT8U *pname, + INT8U *perr); + +void OSMemNameSet (OS_MEM *pmem, + INT8U *pname, + INT8U *perr); +#endif +INT8U OSMemPut (OS_MEM *pmem, + void *pblk); + +#if OS_MEM_QUERY_EN > 0 +INT8U OSMemQuery (OS_MEM *pmem, + OS_MEM_DATA *p_mem_data); +#endif + +#endif + +/* +********************************************************************************************************* +* MUTUAL EXCLUSION SEMAPHORE MANAGEMENT +********************************************************************************************************* +*/ + +#if OS_MUTEX_EN > 0 + +#if OS_MUTEX_ACCEPT_EN > 0 +BOOLEAN OSMutexAccept (OS_EVENT *pevent, + INT8U *perr); +#endif + +OS_EVENT *OSMutexCreate (INT8U prio, + INT8U *perr); + +#if OS_MUTEX_DEL_EN > 0 +OS_EVENT *OSMutexDel (OS_EVENT *pevent, + INT8U opt, + INT8U *perr); +#endif + +void OSMutexPend (OS_EVENT *pevent, + INT16U timeout, + INT8U *perr); + +INT8U OSMutexPost (OS_EVENT *pevent); + +#if OS_MUTEX_QUERY_EN > 0 +INT8U OSMutexQuery (OS_EVENT *pevent, + OS_MUTEX_DATA *p_mutex_data); +#endif + +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* MESSAGE QUEUE MANAGEMENT +********************************************************************************************************* +*/ + +#if (OS_Q_EN > 0) && (OS_MAX_QS > 0) + +#if OS_Q_ACCEPT_EN > 0 +void *OSQAccept (OS_EVENT *pevent, + INT8U *perr); +#endif + +OS_EVENT *OSQCreate (void **start, + INT16U size); + +#if OS_Q_DEL_EN > 0 +OS_EVENT *OSQDel (OS_EVENT *pevent, + INT8U opt, + INT8U *perr); +#endif + +#if OS_Q_FLUSH_EN > 0 +INT8U OSQFlush (OS_EVENT *pevent); +#endif + +void *OSQPend (OS_EVENT *pevent, + INT16U timeout, + INT8U *perr); + +#if OS_Q_PEND_ABORT_EN > 0 +INT8U OSQPendAbort (OS_EVENT *pevent, + INT8U opt, + INT8U *perr); +#endif + +#if OS_Q_POST_EN > 0 +INT8U OSQPost (OS_EVENT *pevent, + void *pmsg); +#endif + +#if OS_Q_POST_FRONT_EN > 0 +INT8U OSQPostFront (OS_EVENT *pevent, + void *pmsg); +#endif + +#if OS_Q_POST_OPT_EN > 0 +INT8U OSQPostOpt (OS_EVENT *pevent, + void *pmsg, + INT8U opt); +#endif + +#if OS_Q_QUERY_EN > 0 +INT8U OSQQuery (OS_EVENT *pevent, + OS_Q_DATA *p_q_data); +#endif + +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* SEMAPHORE MANAGEMENT +********************************************************************************************************* +*/ +#if OS_SEM_EN > 0 + +#if OS_SEM_ACCEPT_EN > 0 +INT16U OSSemAccept (OS_EVENT *pevent); +#endif + +OS_EVENT *OSSemCreate (INT16U cnt); + +#if OS_SEM_DEL_EN > 0 +OS_EVENT *OSSemDel (OS_EVENT *pevent, + INT8U opt, + INT8U *perr); +#endif + +void OSSemPend (OS_EVENT *pevent, + INT16U timeout, + INT8U *perr); + +#if OS_SEM_PEND_ABORT_EN > 0 +INT8U OSSemPendAbort (OS_EVENT *pevent, + INT8U opt, + INT8U *perr); +#endif + +INT8U OSSemPost (OS_EVENT *pevent); + +#if OS_SEM_QUERY_EN > 0 +INT8U OSSemQuery (OS_EVENT *pevent, + OS_SEM_DATA *p_sem_data); +#endif + +#if OS_SEM_SET_EN > 0 +void OSSemSet (OS_EVENT *pevent, + INT16U cnt, + INT8U *perr); +#endif + +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* TASK MANAGEMENT +********************************************************************************************************* +*/ +#if OS_TASK_CHANGE_PRIO_EN > 0 +INT8U OSTaskChangePrio (INT8U oldprio, + INT8U newprio); +#endif + +#if OS_TASK_CREATE_EN > 0 +INT8U OSTaskCreate (void (*task)(void *p_arg), + void *p_arg, + OS_STK *ptos, + INT8U prio); +#endif + +#if OS_TASK_CREATE_EXT_EN > 0 +INT8U OSTaskCreateExt (void (*task)(void *p_arg), + void *p_arg, + OS_STK *ptos, + INT8U prio, + INT16U id, + OS_STK *pbos, + INT32U stk_size, + void *pext, + INT16U opt); +#endif + +#if OS_TASK_DEL_EN > 0 +INT8U OSTaskDel (INT8U prio); +INT8U OSTaskDelReq (INT8U prio); +#endif + +#if OS_TASK_NAME_SIZE > 1 +INT8U OSTaskNameGet (INT8U prio, + INT8U *pname, + INT8U *perr); + +void OSTaskNameSet (INT8U prio, + INT8U *pname, + INT8U *perr); +#endif + +#if OS_TASK_SUSPEND_EN > 0 +INT8U OSTaskResume (INT8U prio); +INT8U OSTaskSuspend (INT8U prio); +#endif + +#if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) +INT8U OSTaskStkChk (INT8U prio, + OS_STK_DATA *p_stk_data); +#endif + +#if OS_TASK_QUERY_EN > 0 +INT8U OSTaskQuery (INT8U prio, + OS_TCB *p_task_data); +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* TIME MANAGEMENT +********************************************************************************************************* +*/ + +void OSTimeDly (INT16U ticks); + +#if OS_TIME_DLY_HMSM_EN > 0 +INT8U OSTimeDlyHMSM (INT8U hours, + INT8U minutes, + INT8U seconds, + INT16U milli); +#endif + +#if OS_TIME_DLY_RESUME_EN > 0 +INT8U OSTimeDlyResume (INT8U prio); +#endif + +#if OS_TIME_GET_SET_EN > 0 +INT32U OSTimeGet (void); +void OSTimeSet (INT32U ticks); +#endif + +void OSTimeTick (void); + +/* +********************************************************************************************************* +* TIMER MANAGEMENT +********************************************************************************************************* +*/ + +#if OS_TMR_EN > 0 +OS_TMR *OSTmrCreate (INT32U dly, + INT32U period, + INT8U opt, + OS_TMR_CALLBACK callback, + void *callback_arg, + INT8U *pname, + INT8U *perr); + +BOOLEAN OSTmrDel (OS_TMR *ptmr, + INT8U *perr); + +#if OS_TMR_CFG_NAME_SIZE > 0 +INT8U OSTmrNameGet (OS_TMR *ptmr, + INT8U *pdest, + INT8U *perr); +#endif +INT32U OSTmrRemainGet (OS_TMR *ptmr, + INT8U *perr); + +INT8U OSTmrStateGet (OS_TMR *ptmr, + INT8U *perr); + +BOOLEAN OSTmrStart (OS_TMR *ptmr, + INT8U *perr); + +BOOLEAN OSTmrStop (OS_TMR *ptmr, + INT8U opt, + void *callback_arg, + INT8U *perr); + +INT8U OSTmrSignal (void); +#endif + +/* +********************************************************************************************************* +* MISCELLANEOUS +********************************************************************************************************* +*/ + +void OSInit (void); + +void OSIntEnter (void); +void OSIntExit (void); + +#if OS_SCHED_LOCK_EN > 0 +void OSSchedLock (void); +void OSSchedUnlock (void); +#endif + +void OSStart (void); + +void OSStatInit (void); + +INT16U OSVersion (void); + +/*$PAGE*/ +/* +********************************************************************************************************* +* INTERNAL FUNCTION PROTOTYPES +* (Your application MUST NOT call these functions) +********************************************************************************************************* +*/ + +#if OS_TASK_DEL_EN > 0 +void OS_Dummy (void); +#endif + +#if (OS_EVENT_EN) +INT8U OS_EventTaskRdy (OS_EVENT *pevent, + void *pmsg, + INT8U msk, + INT8U pend_stat); + +void OS_EventTaskWait (OS_EVENT *pevent); + +void OS_EventTaskRemove (OS_TCB *ptcb, + OS_EVENT *pevent); + +#if (OS_EVENT_MULTI_EN > 0) +void OS_EventTaskWaitMulti (OS_EVENT **pevents_wait); + +void OS_EventTaskRemoveMulti (OS_TCB *ptcb, + OS_EVENT **pevents_multi); +#endif + +void OS_EventWaitListInit (OS_EVENT *pevent); +#endif + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) +void OS_FlagInit (void); +void OS_FlagUnlink (OS_FLAG_NODE *pnode); +#endif + +void OS_MemClr (INT8U *pdest, + INT16U size); + +void OS_MemCopy (INT8U *pdest, + INT8U *psrc, + INT16U size); + +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) +void OS_MemInit (void); +#endif + +#if OS_Q_EN > 0 +void OS_QInit (void); +#endif + +void OS_Sched (void); + +#if (OS_EVENT_NAME_SIZE > 1) || (OS_FLAG_NAME_SIZE > 1) || (OS_MEM_NAME_SIZE > 1) || (OS_TASK_NAME_SIZE > 1) +INT8U OS_StrCopy (INT8U *pdest, + INT8U *psrc); + +INT8U OS_StrLen (INT8U *psrc); +#endif + +void OS_TaskIdle (void *p_arg); + +#if OS_TASK_STAT_EN > 0 +void OS_TaskStat (void *p_arg); +#endif + +#if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) +void OS_TaskStkClr (OS_STK *pbos, + INT32U size, + INT16U opt); +#endif + +#if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) +void OS_TaskStatStkChk (void); +#endif + +INT8U OS_TCBInit (INT8U prio, + OS_STK *ptos, + OS_STK *pbos, + INT16U id, + INT32U stk_size, + void *pext, + INT16U opt); + +#if OS_TMR_EN > 0 +void OSTmr_Init (void); +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* FUNCTION PROTOTYPES +* (Target Specific Functions) +********************************************************************************************************* +*/ + +#if OS_DEBUG_EN > 0 +void OSDebugInit (void); +#endif + +void OSInitHookBegin (void); +void OSInitHookEnd (void); + +void OSTaskCreateHook (OS_TCB *ptcb); +void OSTaskDelHook (OS_TCB *ptcb); + +void OSTaskIdleHook (void); + +void OSTaskStatHook (void); +OS_STK *OSTaskStkInit (void (*task)(void *p_arg), + void *p_arg, + OS_STK *ptos, + INT16U opt); + +#if OS_TASK_SW_HOOK_EN > 0 +void OSTaskSwHook (void); +#endif + +void OSTCBInitHook (OS_TCB *ptcb); + +#if OS_TIME_TICK_HOOK_EN > 0 +void OSTimeTickHook (void); +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* FUNCTION PROTOTYPES +* (Application Specific Functions) +********************************************************************************************************* +*/ + +#if OS_APP_HOOKS_EN > 0 +void App_TaskCreateHook (OS_TCB *ptcb); +void App_TaskDelHook (OS_TCB *ptcb); +void App_TaskIdleHook (void); + +void App_TaskStatHook (void); + +#if OS_TASK_SW_HOOK_EN > 0 +void App_TaskSwHook (void); +#endif + +void App_TCBInitHook (OS_TCB *ptcb); + +#if OS_TIME_TICK_HOOK_EN > 0 +void App_TimeTickHook (void); +#endif +#endif + +/* +********************************************************************************************************* +* FUNCTION PROTOTYPES +* +* IMPORTANT: These prototypes MUST be placed in OS_CPU.H +********************************************************************************************************* +*/ + +#if 0 +void OSStartHighRdy (void); +void OSIntCtxSw (void); +void OSCtxSw (void); +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* LOOK FOR MISSING #define CONSTANTS +* +* This section is used to generate ERROR messages at compile time if certain #define constants are +* MISSING in OS_CFG.H. This allows you to quickly determine the source of the error. +* +* You SHOULD NOT change this section UNLESS you would like to add more comments as to the source of the +* compile time error. +********************************************************************************************************* +*/ + +/* +********************************************************************************************************* +* EVENT FLAGS +********************************************************************************************************* +*/ + +#ifndef OS_FLAG_EN +#error "OS_CFG.H, Missing OS_FLAG_EN: Enable (1) or Disable (0) code generation for Event Flags" +#else + #ifndef OS_MAX_FLAGS + #error "OS_CFG.H, Missing OS_MAX_FLAGS: Max. number of Event Flag Groups in your application" + #else + #if OS_MAX_FLAGS > 65500u + #error "OS_CFG.H, OS_MAX_FLAGS must be <= 65500" + #endif + #endif + + #ifndef OS_FLAGS_NBITS + #error "OS_CFG.H, Missing OS_FLAGS_NBITS: Determine #bits used for event flags, MUST be either 8, 16 or 32" + #endif + + #ifndef OS_FLAG_WAIT_CLR_EN + #error "OS_CFG.H, Missing OS_FLAG_WAIT_CLR_EN: Include code for Wait on Clear EVENT FLAGS" + #endif + + #ifndef OS_FLAG_ACCEPT_EN + #error "OS_CFG.H, Missing OS_FLAG_ACCEPT_EN: Include code for OSFlagAccept()" + #endif + + #ifndef OS_FLAG_DEL_EN + #error "OS_CFG.H, Missing OS_FLAG_DEL_EN: Include code for OSFlagDel()" + #endif + + #ifndef OS_FLAG_NAME_SIZE + #error "OS_CFG.H, Missing OS_FLAG_NAME_SIZE: Determines the size of flag group names" + #endif + + #ifndef OS_FLAG_QUERY_EN + #error "OS_CFG.H, Missing OS_FLAG_QUERY_EN: Include code for OSFlagQuery()" + #endif +#endif + +/* +********************************************************************************************************* +* MESSAGE MAILBOXES +********************************************************************************************************* +*/ + +#ifndef OS_MBOX_EN +#error "OS_CFG.H, Missing OS_MBOX_EN: Enable (1) or Disable (0) code generation for MAILBOXES" +#else + #ifndef OS_MBOX_ACCEPT_EN + #error "OS_CFG.H, Missing OS_MBOX_ACCEPT_EN: Include code for OSMboxAccept()" + #endif + + #ifndef OS_MBOX_DEL_EN + #error "OS_CFG.H, Missing OS_MBOX_DEL_EN: Include code for OSMboxDel()" + #endif + + #ifndef OS_MBOX_PEND_ABORT_EN + #error "OS_CFG.H, Missing OS_MBOX_PEND_ABORT_EN: Include code for OSMboxPendAbort()" + #endif + + #ifndef OS_MBOX_POST_EN + #error "OS_CFG.H, Missing OS_MBOX_POST_EN: Include code for OSMboxPost()" + #endif + + #ifndef OS_MBOX_POST_OPT_EN + #error "OS_CFG.H, Missing OS_MBOX_POST_OPT_EN: Include code for OSMboxPostOpt()" + #endif + + #ifndef OS_MBOX_QUERY_EN + #error "OS_CFG.H, Missing OS_MBOX_QUERY_EN: Include code for OSMboxQuery()" + #endif +#endif + +/* +********************************************************************************************************* +* MEMORY MANAGEMENT +********************************************************************************************************* +*/ + +#ifndef OS_MEM_EN +#error "OS_CFG.H, Missing OS_MEM_EN: Enable (1) or Disable (0) code generation for MEMORY MANAGER" +#else + #ifndef OS_MAX_MEM_PART + #error "OS_CFG.H, Missing OS_MAX_MEM_PART: Max. number of memory partitions" + #else + #if OS_MAX_MEM_PART > 65500u + #error "OS_CFG.H, OS_MAX_MEM_PART must be <= 65500" + #endif + #endif + + #ifndef OS_MEM_NAME_SIZE + #error "OS_CFG.H, Missing OS_MEM_NAME_SIZE: Determines the size of memory partition names" + #endif + + #ifndef OS_MEM_QUERY_EN + #error "OS_CFG.H, Missing OS_MEM_QUERY_EN: Include code for OSMemQuery()" + #endif +#endif + +/* +********************************************************************************************************* +* MUTUAL EXCLUSION SEMAPHORES +********************************************************************************************************* +*/ + +#ifndef OS_MUTEX_EN +#error "OS_CFG.H, Missing OS_MUTEX_EN: Enable (1) or Disable (0) code generation for MUTEX" +#else + #ifndef OS_MUTEX_ACCEPT_EN + #error "OS_CFG.H, Missing OS_MUTEX_ACCEPT_EN: Include code for OSMutexAccept()" + #endif + + #ifndef OS_MUTEX_DEL_EN + #error "OS_CFG.H, Missing OS_MUTEX_DEL_EN: Include code for OSMutexDel()" + #endif + + #ifndef OS_MUTEX_QUERY_EN + #error "OS_CFG.H, Missing OS_MUTEX_QUERY_EN: Include code for OSMutexQuery()" + #endif +#endif + +/* +********************************************************************************************************* +* MESSAGE QUEUES +********************************************************************************************************* +*/ + +#ifndef OS_Q_EN +#error "OS_CFG.H, Missing OS_Q_EN: Enable (1) or Disable (0) code generation for QUEUES" +#else + #ifndef OS_MAX_QS + #error "OS_CFG.H, Missing OS_MAX_QS: Max. number of queue control blocks" + #else + #if OS_MAX_QS > 65500u + #error "OS_CFG.H, OS_MAX_QS must be <= 65500" + #endif + #endif + + #ifndef OS_Q_ACCEPT_EN + #error "OS_CFG.H, Missing OS_Q_ACCEPT_EN: Include code for OSQAccept()" + #endif + + #ifndef OS_Q_DEL_EN + #error "OS_CFG.H, Missing OS_Q_DEL_EN: Include code for OSQDel()" + #endif + + #ifndef OS_Q_FLUSH_EN + #error "OS_CFG.H, Missing OS_Q_FLUSH_EN: Include code for OSQFlush()" + #endif + + #ifndef OS_Q_PEND_ABORT_EN + #error "OS_CFG.H, Missing OS_Q_PEND_ABORT_EN: Include code for OSQPendAbort()" + #endif + + #ifndef OS_Q_POST_EN + #error "OS_CFG.H, Missing OS_Q_POST_EN: Include code for OSQPost()" + #endif + + #ifndef OS_Q_POST_FRONT_EN + #error "OS_CFG.H, Missing OS_Q_POST_FRONT_EN: Include code for OSQPostFront()" + #endif + + #ifndef OS_Q_POST_OPT_EN + #error "OS_CFG.H, Missing OS_Q_POST_OPT_EN: Include code for OSQPostOpt()" + #endif + + #ifndef OS_Q_QUERY_EN + #error "OS_CFG.H, Missing OS_Q_QUERY_EN: Include code for OSQQuery()" + #endif +#endif + +/* +********************************************************************************************************* +* SEMAPHORES +********************************************************************************************************* +*/ + +#ifndef OS_SEM_EN +#error "OS_CFG.H, Missing OS_SEM_EN: Enable (1) or Disable (0) code generation for SEMAPHORES" +#else + #ifndef OS_SEM_ACCEPT_EN + #error "OS_CFG.H, Missing OS_SEM_ACCEPT_EN: Include code for OSSemAccept()" + #endif + + #ifndef OS_SEM_DEL_EN + #error "OS_CFG.H, Missing OS_SEM_DEL_EN: Include code for OSSemDel()" + #endif + + #ifndef OS_SEM_PEND_ABORT_EN + #error "OS_CFG.H, Missing OS_SEM_PEND_ABORT_EN: Include code for OSSemPendAbort()" + #endif + + #ifndef OS_SEM_QUERY_EN + #error "OS_CFG.H, Missing OS_SEM_QUERY_EN: Include code for OSSemQuery()" + #endif + + #ifndef OS_SEM_SET_EN + #error "OS_CFG.H, Missing OS_SEM_SET_EN: Include code for OSSemSet()" + #endif +#endif + +/* +********************************************************************************************************* +* TASK MANAGEMENT +********************************************************************************************************* +*/ + +#ifndef OS_MAX_TASKS +#error "OS_CFG.H, Missing OS_MAX_TASKS: Max. number of tasks in your application" +#else + #if OS_MAX_TASKS < 2 + #error "OS_CFG.H, OS_MAX_TASKS must be >= 2" + #endif + + #if OS_MAX_TASKS > ((OS_LOWEST_PRIO - OS_N_SYS_TASKS) + 1) + #error "OS_CFG.H, OS_MAX_TASKS must be <= OS_LOWEST_PRIO - OS_N_SYS_TASKS + 1" + #endif + +#endif + +#if OS_LOWEST_PRIO > 254 +#error "OS_CFG.H, OS_LOWEST_PRIO must be <= 254 in V2.8x and higher" +#endif + +#ifndef OS_TASK_IDLE_STK_SIZE +#error "OS_CFG.H, Missing OS_TASK_IDLE_STK_SIZE: Idle task stack size" +#endif + +#ifndef OS_TASK_STAT_EN +#error "OS_CFG.H, Missing OS_TASK_STAT_EN: Enable (1) or Disable(0) the statistics task" +#endif + +#ifndef OS_TASK_STAT_STK_SIZE +#error "OS_CFG.H, Missing OS_TASK_STAT_STK_SIZE: Statistics task stack size" +#endif + +#ifndef OS_TASK_STAT_STK_CHK_EN +#error "OS_CFG.H, Missing OS_TASK_STAT_STK_CHK_EN: Check task stacks from statistics task" +#endif + +#ifndef OS_TASK_CHANGE_PRIO_EN +#error "OS_CFG.H, Missing OS_TASK_CHANGE_PRIO_EN: Include code for OSTaskChangePrio()" +#endif + +#ifndef OS_TASK_CREATE_EN +#error "OS_CFG.H, Missing OS_TASK_CREATE_EN: Include code for OSTaskCreate()" +#endif + +#ifndef OS_TASK_CREATE_EXT_EN +#error "OS_CFG.H, Missing OS_TASK_CREATE_EXT_EN: Include code for OSTaskCreateExt()" +#endif + +#ifndef OS_TASK_DEL_EN +#error "OS_CFG.H, Missing OS_TASK_DEL_EN: Include code for OSTaskDel()" +#endif + +#ifndef OS_TASK_NAME_SIZE +#error "OS_CFG.H, Missing OS_TASK_NAME_SIZE: Determine the size of task names" +#endif + +#ifndef OS_TASK_SUSPEND_EN +#error "OS_CFG.H, Missing OS_TASK_SUSPEND_EN: Include code for OSTaskSuspend() and OSTaskResume()" +#endif + +#ifndef OS_TASK_QUERY_EN +#error "OS_CFG.H, Missing OS_TASK_QUERY_EN: Include code for OSTaskQuery()" +#endif + +/* +********************************************************************************************************* +* TIME MANAGEMENT +********************************************************************************************************* +*/ + +#ifndef OS_TICKS_PER_SEC +#error "OS_CFG.H, Missing OS_TICKS_PER_SEC: Sets the number of ticks in one second" +#endif + +#ifndef OS_TIME_DLY_HMSM_EN +#error "OS_CFG.H, Missing OS_TIME_DLY_HMSM_EN: Include code for OSTimeDlyHMSM()" +#endif + +#ifndef OS_TIME_DLY_RESUME_EN +#error "OS_CFG.H, Missing OS_TIME_DLY_RESUME_EN: Include code for OSTimeDlyResume()" +#endif + +#ifndef OS_TIME_GET_SET_EN +#error "OS_CFG.H, Missing OS_TIME_GET_SET_EN: Include code for OSTimeGet() and OSTimeSet()" +#endif + +/* +********************************************************************************************************* +* TIMER MANAGEMENT +********************************************************************************************************* +*/ + +#ifndef OS_TMR_EN +#error "OS_CFG.H, Missing OS_TMR_EN: When (1) enables code generation for Timer Management" +#elif OS_TMR_EN > 0 + #if OS_SEM_EN == 0 + #error "OS_CFG.H, Semaphore management is required (set OS_SEM_EN to 1) when enabling Timer Management." + #error " Timer management require TWO semaphores." + #endif + + #ifndef OS_TMR_CFG_MAX + #error "OS_CFG.H, Missing OS_TMR_CFG_MAX: Determines the total number of timers in an application (2 .. 65500)" + #else + #if OS_TMR_CFG_MAX < 2 + #error "OS_CFG.H, OS_TMR_CFG_MAX should be between 2 and 65500" + #endif + + #if OS_TMR_CFG_MAX > 65500 + #error "OS_CFG.H, OS_TMR_CFG_MAX should be between 2 and 65500" + #endif + #endif + + #ifndef OS_TMR_CFG_WHEEL_SIZE + #error "OS_CFG.H, Missing OS_TMR_CFG_WHEEL_SIZE: Sets the size of the timer wheel (1 .. 1023)" + #else + #if OS_TMR_CFG_WHEEL_SIZE < 2 + #error "OS_CFG.H, OS_TMR_CFG_WHEEL_SIZE should be between 2 and 1024" + #endif + + #if OS_TMR_CFG_WHEEL_SIZE > 1024 + #error "OS_CFG.H, OS_TMR_CFG_WHEEL_SIZE should be between 2 and 1024" + #endif + #endif + + #ifndef OS_TMR_CFG_NAME_SIZE + #error "OS_CFG.H, Missing OS_TMR_CFG_NAME_SIZE: Determines the number of characters used for Timer names" + #endif + + #ifndef OS_TMR_CFG_TICKS_PER_SEC + #error "OS_CFG.H, Missing OS_TMR_CFG_TICKS_PER_SEC: Determines the rate at which tiem timer management task will run (Hz)" + #endif + + #ifndef OS_TASK_TMR_STK_SIZE + #error "OS_CFG.H, Missing OS_TASK_TMR_STK_SIZE: Determines the size of the Timer Task's stack" + #endif +#endif + + +/* +********************************************************************************************************* +* MISCELLANEOUS +********************************************************************************************************* +*/ + +#ifndef OS_ARG_CHK_EN +#error "OS_CFG.H, Missing OS_ARG_CHK_EN: Enable (1) or Disable (0) argument checking" +#endif + + +#ifndef OS_CPU_HOOKS_EN +#error "OS_CFG.H, Missing OS_CPU_HOOKS_EN: uC/OS-II hooks are found in the processor port files when 1" +#endif + + +#ifndef OS_APP_HOOKS_EN +#error "OS_CFG.H, Missing OS_APP_HOOKS_EN: Application-defined hooks are called from the uC/OS-II hooks" +#endif + + +#ifndef OS_DEBUG_EN +#error "OS_CFG.H, Missing OS_DEBUG_EN: Allows you to include variables for debugging or not" +#endif + + +#ifndef OS_LOWEST_PRIO +#error "OS_CFG.H, Missing OS_LOWEST_PRIO: Defines the lowest priority that can be assigned" +#endif + + +#ifndef OS_MAX_EVENTS +#error "OS_CFG.H, Missing OS_MAX_EVENTS: Max. number of event control blocks in your application" +#else + #if OS_MAX_EVENTS > 65500u + #error "OS_CFG.H, OS_MAX_EVENTS must be <= 65500" + #endif +#endif + + +#ifndef OS_SCHED_LOCK_EN +#error "OS_CFG.H, Missing OS_SCHED_LOCK_EN: Include code for OSSchedLock() and OSSchedUnlock()" +#endif + + +#ifndef OS_EVENT_MULTI_EN +#error "OS_CFG.H, Missing OS_EVENT_MULTI_EN: Include code for OSEventPendMulti()" +#endif + + +#ifndef OS_TASK_PROFILE_EN +#error "OS_CFG.H, Missing OS_TASK_PROFILE_EN: Include data structure for run-time task profiling" +#endif + + +#ifndef OS_TASK_SW_HOOK_EN +#error "OS_CFG.H, Missing OS_TASK_SW_HOOK_EN: Allows you to include the code for OSTaskSwHook() or not" +#endif + + +#ifndef OS_TICK_STEP_EN +#error "OS_CFG.H, Missing OS_TICK_STEP_EN: Allows to 'step' one tick at a time with uC/OS-View" +#endif + + +#ifndef OS_TIME_TICK_HOOK_EN +#error "OS_CFG.H, Missing OS_TIME_TICK_HOOK_EN: Allows you to include the code for OSTimeTickHook() or not" +#endif + +/* +********************************************************************************************************* +* SAFETY CRITICAL USE +********************************************************************************************************* +*/ + +#ifdef SAFETY_CRITICAL_RELEASE + +#if OS_ARG_CHK_EN < 1 +#error "OS_CFG.H, OS_ARG_CHK_EN must be enabled for safety-critical release code" +#endif + +#if OS_APP_HOOKS_EN > 0 +#error "OS_CFG.H, OS_APP_HOOKS_EN must be disabled for safety-critical release code" +#endif + +#if OS_DEBUG_EN > 0 +#error "OS_CFG.H, OS_DEBUG_EN must be disabled for safety-critical release code" +#endif + +#ifdef CANTATA +#error "OS_CFG.H, CANTATA must be disabled for safety-critical release code" +#endif + +#ifdef OS_SCHED_LOCK_EN +#error "OS_CFG.H, OS_SCHED_LOCK_EN must be disabled for safety-critical release code" +#endif + +#ifdef VSC_VALIDATION_MODE +#error "OS_CFG.H, VSC_VALIDATION_MODE must be disabled for safety-critical release code" +#endif + +#if OS_TASK_STAT_EN > 0 +#error "OS_CFG.H, OS_TASK_STAT_EN must be disabled for safety-critical release code" +#endif + +#if OS_TICK_STEP_EN > 0 +#error "OS_CFG.H, OS_TICK_STEP_EN must be disabled for safety-critical release code" +#endif + +#if OS_FLAG_EN > 0 + #if OS_FLAG_DEL_EN > 0 + #error "OS_CFG.H, OS_FLAG_DEL_EN must be disabled for safety-critical release code" + #endif +#endif + +#if OS_MBOX_EN > 0 + #if OS_MBOX_DEL_EN > 0 + #error "OS_CFG.H, OS_MBOX_DEL_EN must be disabled for safety-critical release code" + #endif +#endif + +#if OS_MUTEX_EN > 0 + #if OS_MUTEX_DEL_EN > 0 + #error "OS_CFG.H, OS_MUTEX_DEL_EN must be disabled for safety-critical release code" + #endif +#endif + +#if OS_Q_EN > 0 + #if OS_Q_DEL_EN > 0 + #error "OS_CFG.H, OS_Q_DEL_EN must be disabled for safety-critical release code" + #endif +#endif + +#if OS_SEM_EN > 0 + #if OS_SEM_DEL_EN > 0 + #error "OS_CFG.H, OS_SEM_DEL_EN must be disabled for safety-critical release code" + #endif +#endif + +#if OS_TASK_EN > 0 + #if OS_TASK_DEL_EN > 0 + #error "OS_CFG.H, OS_TASK_DEL_EN must be disabled for safety-critical release code" + #endif +#endif + +#if OS_CRITICAL_METHOD != 3 +#error "OS_CPU.H, OS_CRITICAL_METHOD must be type 3 for safety-critical release code" +#endif + +#endif /* ------------------------ SAFETY_CRITICAL_RELEASE ------------------------ */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/license-ucosii.txt b/FPGA_nios/hit_pat_bsp/UCOSII/license-ucosii.txt new file mode 100644 index 0000000..3872d99 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/license-ucosii.txt @@ -0,0 +1,20 @@ +MicroC/OS-II Licensing Terms +============================ + +Micrium's uC/OS-II is a real-time operating system (RTOS) available in source code. +This is not open-source software. + +This RTOS can be used free of charge for non-commercial purposes and academic projects only, +any other use of the code is subject to the terms of an end-user license agreement +for more information please see the license file included in the BSP project or contact Micrium. + +Anyone planning to use a Micrium RTOS in a commercial product must purchase a commercial license +from the owner of the software, Silicon Laboratories Inc. + +Licensing information is available at: + +Phone: +1 954-217-2036 +Email: sales@micrium.com +URL: www.micrium.com + +Do not use this code if you do not agree to these conditions. diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/alt_env_lock.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/alt_env_lock.c new file mode 100644 index 0000000..03ed46d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/alt_env_lock.c @@ -0,0 +1,122 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * These are the env lock/unlock stubs required by newlib. These are + * used to make accesses to environment variables thread safe. Note that + * this implementation requires that environment variables are never manipulated + * by an interrupt service routine. + */ + + +#include + +#include "includes.h" +#include "system.h" + +/* semaphore to protect the environment */ + +OS_EVENT *alt_envsem; + +#if OS_THREAD_SAFE_NEWLIB +/* id of the task that is currently manipulating the environment */ + +static int lockid = -1; + +/* number of times __env_lock has recursed */ + +static int locks; +#endif /* OS_THREAD_SAFE_NEWLIB */ + +/* + * + */ + +void __env_lock ( struct _reent *_r ) +{ +#if OS_THREAD_SAFE_NEWLIB + OS_TCB tcb; + OS_SEM_DATA semdata; + INT8U err; + int id; + + /* use our priority as a task id */ + + err = OSTaskQuery( OS_PRIO_SELF, &tcb ); + if (err != OS_NO_ERR) + return; + + id = tcb.OSTCBPrio; + + /* see if we own the environment already */ + + OSSemQuery( alt_envsem, &semdata ); + if( semdata.OSEventGrp && id == lockid ) + { + /* we do; just count the recursion */ + + locks++; + } + else + { + /* wait on the other task to yield, then claim ownership */ + + OSSemPend( alt_envsem, 0, &err ); + locks = 1; + lockid = id; + } + +#endif /* OS_THREAD_SAFE_NEWLIB */ + return; +} + +/* + * + */ + +void __env_unlock ( struct _reent *_r ) +{ +#if OS_THREAD_SAFE_NEWLIB + if (locks == 0) + return; + + /* + * release the environment once the number of locks == the number + * of unlocks + */ + + if( (--locks) == 0 ) + { + lockid = -1; + OSSemPost( alt_envsem ); + } +#endif /* OS_THREAD_SAFE_NEWLIB */ +} + diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/alt_malloc_lock.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/alt_malloc_lock.c new file mode 100644 index 0000000..0f050ca --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/alt_malloc_lock.c @@ -0,0 +1,147 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "system.h" + +/* + * These are the malloc lock/unlock stubs required by newlib. These are + * used to make accesses to the heap thread safe. Note that + * this implementation requires that the heap is never manipulated + * by an interrupt service routine. + */ + +#include + +#include "includes.h" + +/* semaphore to protect the heap */ + +OS_EVENT *alt_heapsem; + + +#if OS_THREAD_SAFE_NEWLIB +/* id of the task that is currently manipulating the heap */ + +static int lockid = -1; + +/* number of times __malloc_lock has recursed */ + +static int locks; +#endif /* OS_THREAD_SAFE_NEWLIB */ + +/* + * + */ + +void __malloc_lock ( struct _reent *_r ) +{ +#if OS_THREAD_SAFE_NEWLIB + 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; +#endif + + if (OSRunning != OS_TRUE) + return; + + /* use our priority as a task id */ + + err = OSTaskQuery( OS_PRIO_SELF, &tcb ); + if (err != OS_NO_ERR) + return; + + id = tcb.OSTCBPrio; + + /* see if we own the heap already */ + + OSSemQuery( alt_heapsem, &semdata ); + + OS_ENTER_CRITICAL(); + + if( !semdata.OSCnt && id == lockid ) + { + /* we do; just count the recursion */ + locks++; + OS_EXIT_CRITICAL(); + } + else + { + /* wait on the other task to yield the heap, then claim ownership of it */ + OS_EXIT_CRITICAL(); + + OSSemPend( alt_heapsem, 0, &err ); + locks = 1; + lockid = id; + } + +#endif /* OS_THREAD_SAFE_NEWLIB */ + return; +} + +/* + * + */ + +void __malloc_unlock ( struct _reent *_r ) +{ +#if OS_THREAD_SAFE_NEWLIB + +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + if (OSRunning != OS_TRUE) + return; + + OS_ENTER_CRITICAL(); + if (locks == 0) + { + OS_EXIT_CRITICAL(); + return; + } + + /* release the heap once the number of locks == the number of unlocks */ + if( (--locks) == 0 ) + { + lockid = -1; + OS_EXIT_CRITICAL(); + OSSemPost( alt_heapsem ); + } + else + { + OS_EXIT_CRITICAL(); + } + +#endif /* OS_THREAD_SAFE_NEWLIB */ +} + diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_core.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_core.c new file mode 100644 index 0000000..8c88045 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_core.c @@ -0,0 +1,2018 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* CORE FUNCTIONS +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_CORE.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micri�m to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#define OS_GLOBALS +#include +#endif + +/* +********************************************************************************************************* +* PRIORITY RESOLUTION TABLE +* +* Note: Index into table is bit pattern to resolve highest priority +* Indexed value corresponds to highest priority bit position (i.e. 0..7) +********************************************************************************************************* +*/ + +INT8U const OSUnMapTbl[256] = { + 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F */ + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x10 to 0x1F */ + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x20 to 0x2F */ + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x30 to 0x3F */ + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x40 to 0x4F */ + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x50 to 0x5F */ + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x60 to 0x6F */ + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x70 to 0x7F */ + 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x80 to 0x8F */ + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x90 to 0x9F */ + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xA0 to 0xAF */ + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xB0 to 0xBF */ + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xC0 to 0xCF */ + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xD0 to 0xDF */ + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xE0 to 0xEF */ + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 /* 0xF0 to 0xFF */ +}; + +/*$PAGE*/ +/* +********************************************************************************************************* +* FUNCTION PROTOTYPES +********************************************************************************************************* +*/ + +static void OS_InitEventList(void); + +static void OS_InitMisc(void); + +static void OS_InitRdyList(void); + +static void OS_InitTaskIdle(void); + +#if OS_TASK_STAT_EN > 0 +static void OS_InitTaskStat(void); +#endif + +static void OS_InitTCBList(void); + +static void OS_SchedNew(void); + +/*$PAGE*/ +/* +********************************************************************************************************* +* GET THE NAME OF A SEMAPHORE, MUTEX, MAILBOX or QUEUE +* +* Description: This function is used to obtain the name assigned to a semaphore, mutex, mailbox or queue. +* +* Arguments : pevent is a pointer to the event group. 'pevent' can point either to a semaphore, +* a mutex, a mailbox or a queue. Where this function is concerned, the actual +* type is irrelevant. +* +* pname is a pointer to an ASCII string that will receive the name of the semaphore, +* mutex, mailbox or queue. The string must be able to hold at least +* OS_EVENT_NAME_SIZE characters. +* +* perr is a pointer to an error code that can contain one of the following values: +* +* OS_ERR_NONE if the name was copied to 'pname' +* OS_ERR_EVENT_TYPE if 'pevent' is not pointing to the proper event +* control block type. +* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname' +* OS_ERR_PEVENT_NULL if you passed a NULL pointer for 'pevent' +* OS_ERR_NAME_GET_ISR if you are trying to call this function from an ISR +* +* Returns : The length of the string or 0 if the 'pevent' is a NULL pointer. +********************************************************************************************************* +*/ + +#if (OS_EVENT_EN) && (OS_EVENT_NAME_SIZE > 1) +INT8U OSEventNameGet (OS_EVENT *pevent, INT8U *pname, INT8U *perr) +{ + INT8U len; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (0); + } + if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */ + *perr = OS_ERR_PEVENT_NULL; + return (0); + } + 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 */ + *perr = OS_ERR_NAME_GET_ISR; + return (0); + } + switch (pevent->OSEventType) { + case OS_EVENT_TYPE_SEM: + case OS_EVENT_TYPE_MUTEX: + case OS_EVENT_TYPE_MBOX: + case OS_EVENT_TYPE_Q: + break; + + default: + *perr = OS_ERR_EVENT_TYPE; + return (0); + } + OS_ENTER_CRITICAL(); + len = OS_StrCopy(pname, pevent->OSEventName); /* Copy name from OS_EVENT */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (len); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* ASSIGN A NAME TO A SEMAPHORE, MUTEX, MAILBOX or QUEUE +* +* Description: This function assigns a name to a semaphore, mutex, mailbox or queue. +* +* Arguments : pevent is a pointer to the event group. 'pevent' can point either to a semaphore, +* a mutex, a mailbox or a queue. Where this function is concerned, it doesn't +* matter the actual type. +* +* pname is a pointer to an ASCII string that will be used as the name of the semaphore, +* mutex, mailbox or queue. The string must be able to hold at least +* OS_EVENT_NAME_SIZE characters. +* +* perr is a pointer to an error code that can contain one of the following values: +* +* OS_ERR_NONE if the requested task is resumed +* OS_ERR_EVENT_TYPE if 'pevent' is not pointing to the proper event +* control block type. +* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname' +* OS_ERR_PEVENT_NULL if you passed a NULL pointer for 'pevent' +* OS_ERR_NAME_SET_ISR if you called this function from an ISR +* +* Returns : None +********************************************************************************************************* +*/ + +#if (OS_EVENT_EN) && (OS_EVENT_NAME_SIZE > 1) +void OSEventNameSet (OS_EVENT *pevent, INT8U *pname, INT8U *perr) +{ + INT8U len; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return; + } + if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */ + *perr = OS_ERR_PEVENT_NULL; + return; + } + 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 */ + *perr = OS_ERR_NAME_SET_ISR; + return; + } + switch (pevent->OSEventType) { + case OS_EVENT_TYPE_SEM: + case OS_EVENT_TYPE_MUTEX: + case OS_EVENT_TYPE_MBOX: + case OS_EVENT_TYPE_Q: + break; + + default: + *perr = OS_ERR_EVENT_TYPE; + return; + } + OS_ENTER_CRITICAL(); + len = OS_StrLen(pname); /* Can we fit the string in the storage area? */ + if (len > (OS_EVENT_NAME_SIZE - 1)) { /* No */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_EVENT_NAME_TOO_LONG; + return; + } + (void)OS_StrCopy(pevent->OSEventName, pname); /* Yes, copy name to the event control block */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* PEND ON MULTIPLE EVENTS +* +* Description: This function waits for multiple events. If multiple events are ready at the start of the +* pend call, then all available events are returned as ready. If the task must pend on the +* multiple events, then only the first posted or aborted event is returned as ready. +* +* Arguments : pevents_pend is a pointer to a NULL-terminated array of event control blocks to wait for. +* +* pevents_rdy is a pointer to an array to return which event control blocks are available +* or ready. The size of the array MUST be greater than or equal to the size +* of the 'pevents_pend' array, including terminating NULL. +* +* pmsgs_rdy is a pointer to an array to return messages from any available message-type +* events. The size of the array MUST be greater than or equal to the size of +* the 'pevents_pend' array, excluding the terminating NULL. Since NULL +* messages are valid messages, this array cannot be NULL-terminated. Instead, +* every available message-type event returns its messages in the 'pmsgs_rdy' +* array at the same index as the event is returned in the 'pevents_rdy' array. +* All other 'pmsgs_rdy' array indices are filled with NULL messages. +* +* timeout is an optional timeout period (in clock ticks). If non-zero, your task will +* wait for the resources up to the amount of time specified by this argument. +* If you specify 0, however, your task will wait forever for the specified +* events or, until the resources becomes available (or the events occur). +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* +* OS_ERR_NONE The call was successful and your task owns the resources +* or, the events you are waiting for occurred; check the +* 'pevents_rdy' array for which events are available. +* OS_ERR_PEND_ABORT The wait on the events was aborted; check the +* 'pevents_rdy' array for which events were aborted. +* OS_ERR_TIMEOUT The events were not received within the specified +* 'timeout'. +* OS_ERR_PEVENT_NULL If 'pevents_pend', 'pevents_rdy', or 'pmsgs_rdy' is a +* NULL pointer. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to an array of semaphores, +* mailboxes, and/or queues. +* OS_ERR_PEND_ISR If you called this function from an ISR and the result +* would lead to a suspension. +* OS_ERR_PEND_LOCKED If you called this function when the scheduler is locked. +* +* Returns : > 0 the number of events returned as ready or aborted. +* == 0 if no events are returned as ready because of timeout or upon error. +* +* Notes : 1) a. Validate 'pevents_pend' array as valid OS_EVENTs : +* +* semaphores, mailboxes, queues +* +* b. Return ALL available events and messages, if any +* +* c. Add current task priority as pending to each events's wait list +* Performed in OS_EventTaskWaitMulti() +* +* d. Wait on any of multiple events +* +* e. Remove current task priority as pending from each events's wait list +* Performed in OS_EventTaskRdy(), if events posted or aborted +* +* f. Return any event posted or aborted, if any +* else +* Return timeout +* +* 2) 'pevents_rdy' initialized to NULL PRIOR to all other validation or function handling in +* case of any error(s). +********************************************************************************************************* +*/ +/*$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) +{ + OS_EVENT **pevents; + OS_EVENT *pevent; +#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) + OS_Q *pq; +#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; +#endif + + + +#if (OS_ARG_CHK_EN > 0) + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (0); + } + if (pevents_pend == (OS_EVENT **)0) { /* Validate 'pevents_pend' */ + *perr = OS_ERR_PEVENT_NULL; + return (0); + } + if (pevents_rdy == (OS_EVENT **)0) { /* Validate 'pevents_rdy' */ + *perr = OS_ERR_PEVENT_NULL; + return (0); + } + if (pmsgs_rdy == (void **)0) { /* Validate 'pmsgs_rdy' */ + *perr = OS_ERR_PEVENT_NULL; + return (0); + } +#endif + + *pevents_rdy = (OS_EVENT *)0; /* Init array to NULL in case of errors */ + + pevents = pevents_pend; + pevent = *pevents; + while (pevent != (OS_EVENT *)0) { + switch (pevent->OSEventType) { /* Validate event block types */ +#if (OS_SEM_EN > 0) + case OS_EVENT_TYPE_SEM: + break; +#endif +#if (OS_MBOX_EN > 0) + case OS_EVENT_TYPE_MBOX: + break; +#endif +#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) + case OS_EVENT_TYPE_Q: + break; +#endif + + case OS_EVENT_TYPE_MUTEX: + case OS_EVENT_TYPE_FLAG: + default: + *perr = OS_ERR_EVENT_TYPE; + return (0); + } + pevents++; + pevent = *pevents; + } + + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */ + return (0); + } + if (OSLockNesting > 0) { /* See if called with scheduler locked ... */ + *perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */ + return (0); + } + +/*$PAGE*/ + OS_ENTER_CRITICAL(); + events_rdy = OS_FALSE; + events_rdy_nbr = 0; + events_stat = OS_STAT_RDY; + pevents = pevents_pend; + pevent = *pevents; + while (pevent != (OS_EVENT *)0) { /* See if any events already available */ + switch (pevent->OSEventType) { +#if (OS_SEM_EN > 0) + case OS_EVENT_TYPE_SEM: + if (pevent->OSEventCnt > 0) { /* If semaphore count > 0, resource available; */ + pevent->OSEventCnt--; /* ... decrement semaphore, ... */ + *pevents_rdy++ = pevent; /* ... and return available semaphore event */ + events_rdy = OS_TRUE; + *pmsgs_rdy++ = (void *)0; /* NO message returned for semaphores */ + events_rdy_nbr++; + + } else { + events_stat |= OS_STAT_SEM; /* Configure multi-pend for semaphore events */ + } + break; +#endif + +#if (OS_MBOX_EN > 0) + case OS_EVENT_TYPE_MBOX: + if (pevent->OSEventPtr != (void *)0) { /* If mailbox NOT empty; ... */ + /* ... return available message, ... */ + *pmsgs_rdy++ = (void *)pevent->OSEventPtr; + pevent->OSEventPtr = (void *)0; + *pevents_rdy++ = pevent; /* ... and return available mailbox event */ + events_rdy = OS_TRUE; + events_rdy_nbr++; + + } else { + events_stat |= OS_STAT_MBOX; /* Configure multi-pend for mailbox events */ + } + break; +#endif + +#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) + case OS_EVENT_TYPE_Q: + pq = (OS_Q *)pevent->OSEventPtr; + if (pq->OSQEntries > 0) { /* If queue NOT empty; ... */ + /* ... return available message, ... */ + *pmsgs_rdy++ = (void *)*pq->OSQOut++; + if (pq->OSQOut == pq->OSQEnd) { /* If OUT ptr at queue end, ... */ + pq->OSQOut = pq->OSQStart; /* ... wrap to queue start */ + } + pq->OSQEntries--; /* Update number of queue entries */ + *pevents_rdy++ = pevent; /* ... and return available queue event */ + events_rdy = OS_TRUE; + events_rdy_nbr++; + + } else { + events_stat |= OS_STAT_Q; /* Configure multi-pend for queue events */ + } + break; +#endif + + case OS_EVENT_TYPE_MUTEX: + case OS_EVENT_TYPE_FLAG: + default: + OS_EXIT_CRITICAL(); + *pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */ + *perr = OS_ERR_EVENT_TYPE; + return (events_rdy_nbr); + } + pevents++; + pevent = *pevents; + } + + if ( events_rdy == OS_TRUE) { /* Return any events already available */ + *pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (events_rdy_nbr); + } +/*$PAGE*/ + /* Otherwise, must wait until any event occurs */ + OSTCBCur->OSTCBStat |= events_stat | /* Resource not available, ... */ + OS_STAT_MULTI; /* ... pend on multiple events */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; + OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB */ + OS_EventTaskWaitMulti(pevents_pend); /* Suspend task until events or timeout occurs */ + + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find next highest priority task ready */ + OS_ENTER_CRITICAL(); + + switch (OSTCBCur->OSTCBStatPend) { /* Handle event posted, aborted, or timed-out */ + case OS_STAT_PEND_OK: + case OS_STAT_PEND_ABORT: + pevent = OSTCBCur->OSTCBEventPtr; + if (pevent != (OS_EVENT *)0) { /* If task event ptr != NULL, ... */ + *pevents_rdy++ = pevent; /* ... return available event ... */ + *pevents_rdy = (OS_EVENT *)0; /* ... & NULL terminate return event array */ + events_rdy_nbr++; + + } else { /* Else NO event available, handle as timeout */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_TO; + OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend); + } + break; + + case OS_STAT_PEND_TO: + default: /* ... remove task from events' wait lists */ + OS_EventTaskRemoveMulti(OSTCBCur, pevents_pend); + break; + } + + switch (OSTCBCur->OSTCBStatPend) { + case OS_STAT_PEND_OK: + switch (pevent->OSEventType) { /* Return event's message */ +#if (OS_SEM_EN > 0) + case OS_EVENT_TYPE_SEM: + *pmsgs_rdy++ = (void *)0; /* NO message returned for semaphores */ + break; +#endif + +#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 */ + break; +#endif + + case OS_EVENT_TYPE_MUTEX: + case OS_EVENT_TYPE_FLAG: + default: + OS_EXIT_CRITICAL(); + *pevents_rdy = (OS_EVENT *)0; /* NULL terminate return event array */ + *perr = OS_ERR_EVENT_TYPE; + return (events_rdy_nbr); + } + *perr = OS_ERR_NONE; + break; + + case OS_STAT_PEND_ABORT: + *pmsgs_rdy++ = (void *)0; /* NO message returned for abort */ + *perr = OS_ERR_PEND_ABORT; /* Indicate that event aborted */ + break; + + case OS_STAT_PEND_TO: + default: + *pmsgs_rdy++ = (void *)0; /* NO message returned for timeout */ + *perr = OS_ERR_TIMEOUT; /* Indicate that events timed out */ + break; + } + + OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */ + OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */ + OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0; + OSTCBCur->OSTCBMsg = (void *)0; /* Clear task message */ + OS_EXIT_CRITICAL(); + + return (events_rdy_nbr); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZATION +* +* Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to +* creating any uC/OS-II object and, prior to calling OSStart(). +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +void OSInit (void) +{ + OSInitHookBegin(); /* Call port specific initialization code */ + + OS_InitMisc(); /* Initialize miscellaneous variables */ + + OS_InitRdyList(); /* Initialize the Ready List */ + + OS_InitTCBList(); /* Initialize the free list of OS_TCBs */ + + OS_InitEventList(); /* Initialize the free list of OS_EVENTs */ + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) + OS_FlagInit(); /* Initialize the event flag structures */ +#endif + +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) + OS_MemInit(); /* Initialize the memory manager */ +#endif + +#if (OS_Q_EN > 0) && (OS_MAX_QS > 0) + OS_QInit(); /* Initialize the message queue structures */ +#endif + + OS_InitTaskIdle(); /* Create the Idle Task */ +#if OS_TASK_STAT_EN > 0 + OS_InitTaskStat(); /* Create the Statistic Task */ +#endif + +#if OS_TMR_EN > 0 + OSTmr_Init(); /* Initialize the Timer Manager */ +#endif + + OSInitHookEnd(); /* Call port specific init. code */ + +#if OS_DEBUG_EN > 0 + OSDebugInit(); +#endif +} +/*$PAGE*/ +/* +********************************************************************************************************* +* ENTER ISR +* +* Description: This function is used to notify uC/OS-II that you are about to service an interrupt +* service routine (ISR). This allows uC/OS-II to keep track of interrupt nesting and thus +* only perform rescheduling at the last nested ISR. +* +* Arguments : none +* +* Returns : none +* +* Notes : 1) This function should be called ith interrupts already disabled +* 2) Your ISR can directly increment OSIntNesting without calling this function because +* OSIntNesting has been declared 'global'. +* 3) You MUST still call OSIntExit() even though you increment OSIntNesting directly. +* 4) You MUST invoke OSIntEnter() and OSIntExit() in pair. In other words, for every call +* to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() at the +* end of the ISR. +* 5) You are allowed to nest interrupts up to 255 levels deep. +********************************************************************************************************* +*/ + +void OSIntEnter (void) +{ + if (OSRunning == OS_TRUE) { + if (OSIntNesting < 255u) { + OSIntNesting++; /* Increment ISR nesting level */ + } + } +} +/*$PAGE*/ +/* +********************************************************************************************************* +* EXIT ISR +* +* Description: This function is used to notify uC/OS-II that you have completed serviving an ISR. When +* the last nested ISR has completed, uC/OS-II will call the scheduler to determine whether +* a new, high-priority task, is ready to run. +* +* Arguments : none +* +* Returns : none +* +* Notes : 1) You MUST invoke OSIntEnter() and OSIntExit() in pair. In other words, for every call +* to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() at the +* end of the ISR. +* 2) Rescheduling is prevented when the scheduler is locked (see OS_SchedLock()) +********************************************************************************************************* +*/ + +void OSIntExit (void) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSRunning == OS_TRUE) { + OS_ENTER_CRITICAL(); + if (OSIntNesting > 0) { /* Prevent OSIntNesting from wrapping */ + OSIntNesting--; + } + if (OSIntNesting == 0) { /* Reschedule only if all ISRs complete ... */ + if (OSLockNesting == 0) { /* ... and not locked. */ + OS_SchedNew(); + if (OSPrioHighRdy != OSPrioCur) { /* No Ctx Sw if current task is highest rdy */ + OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; +#if OS_TASK_PROFILE_EN > 0 + OSTCBHighRdy->OSTCBCtxSwCtr++; /* Inc. # of context switches to this task */ +#endif + OSCtxSwCtr++; /* Keep track of the number of ctx switches */ + OSIntCtxSw(); /* Perform interrupt level ctx switch */ + } + } + } + OS_EXIT_CRITICAL(); + } +} +/*$PAGE*/ +/* +********************************************************************************************************* +* PREVENT SCHEDULING +* +* Description: This function is used to prevent rescheduling to take place. This allows your application +* to prevent context switches until you are ready to permit context switching. +* +* Arguments : none +* +* Returns : none +* +* Notes : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair. In other words, for every +* call to OSSchedLock() you MUST have a call to OSSchedUnlock(). +********************************************************************************************************* +*/ + +#if OS_SCHED_LOCK_EN > 0 +void OSSchedLock (void) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSRunning == OS_TRUE) { /* Make sure multitasking is running */ + OS_ENTER_CRITICAL(); + if (OSIntNesting == 0) { /* Can't call from an ISR */ + if (OSLockNesting < 255u) { /* Prevent OSLockNesting from wrapping back to 0 */ + OSLockNesting++; /* Increment lock nesting level */ + } + } + OS_EXIT_CRITICAL(); + } +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* ENABLE SCHEDULING +* +* Description: This function is used to re-allow rescheduling. +* +* Arguments : none +* +* Returns : none +* +* Notes : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair. In other words, for every +* call to OSSchedLock() you MUST have a call to OSSchedUnlock(). +********************************************************************************************************* +*/ + +#if OS_SCHED_LOCK_EN > 0 +void OSSchedUnlock (void) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSRunning == OS_TRUE) { /* Make sure multitasking is running */ + OS_ENTER_CRITICAL(); + if (OSLockNesting > 0) { /* Do not decrement if already 0 */ + OSLockNesting--; /* Decrement lock nesting level */ + if (OSLockNesting == 0) { /* See if scheduler is enabled and ... */ + if (OSIntNesting == 0) { /* ... not in an ISR */ + OS_EXIT_CRITICAL(); + OS_Sched(); /* See if a HPT is ready */ + } else { + OS_EXIT_CRITICAL(); + } + } else { + OS_EXIT_CRITICAL(); + } + } else { + OS_EXIT_CRITICAL(); + } + } +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* START MULTITASKING +* +* Description: This function is used to start the multitasking process which lets uC/OS-II manages the +* task that you have created. Before you can call OSStart(), you MUST have called OSInit() +* and you MUST have created at least one task. +* +* Arguments : none +* +* Returns : none +* +* Note : OSStartHighRdy() MUST: +* a) Call OSTaskSwHook() then, +* b) Set OSRunning to OS_TRUE. +* c) Load the context of the task pointed to by OSTCBHighRdy. +* d_ Execute the task. +********************************************************************************************************* +*/ + +void OSStart (void) +{ + if (OSRunning == OS_FALSE) { + OS_SchedNew(); /* Find highest priority's task priority number */ + OSPrioCur = OSPrioHighRdy; + OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run */ + OSTCBCur = OSTCBHighRdy; + OSStartHighRdy(); /* Execute target specific code to start task */ + } +} +/*$PAGE*/ +/* +********************************************************************************************************* +* STATISTICS INITIALIZATION +* +* Description: This function is called by your application to establish CPU usage by first determining +* how high a 32-bit counter would count to in 1 second if no other tasks were to execute +* during that time. CPU usage is then determined by a low priority task which keeps track +* of this 32-bit counter every second but this time, with other tasks running. CPU usage is +* determined by: +* +* OSIdleCtr +* CPU Usage (%) = 100 * (1 - ------------) +* OSIdleCtrMax +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +#if OS_TASK_STAT_EN > 0 +void OSStatInit (void) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + OSTimeDly(2); /* Synchronize with clock tick */ + OS_ENTER_CRITICAL(); + OSIdleCtr = 0L; /* Clear idle counter */ + OS_EXIT_CRITICAL(); + OSTimeDly(OS_TICKS_PER_SEC / 10); /* Determine MAX. idle counter value for 1/10 second */ + OS_ENTER_CRITICAL(); + OSIdleCtrMax = OSIdleCtr; /* Store maximum idle counter count in 1/10 second */ + OSStatRdy = OS_TRUE; + OS_EXIT_CRITICAL(); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* PROCESS SYSTEM TICK +* +* Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known +* as a 'clock tick'). This function should be called by the ticker ISR but, can also be +* called by a high priority task. +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +void OSTimeTick (void) +{ + 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; +#endif + + + +#if OS_TIME_TICK_HOOK_EN > 0 + OSTimeTickHook(); /* Call user definable hook */ +#endif +#if OS_TIME_GET_SET_EN > 0 + OS_ENTER_CRITICAL(); /* Update the 32-bit tick counter */ + OSTime++; + OS_EXIT_CRITICAL(); +#endif + if (OSRunning == OS_TRUE) { +#if OS_TICK_STEP_EN > 0 + switch (OSTickStepState) { /* Determine whether we need to process a tick */ + case OS_TICK_STEP_DIS: /* Yes, stepping is disabled */ + step = OS_TRUE; + break; + + case OS_TICK_STEP_WAIT: /* No, waiting for uC/OS-View to set ... */ + step = OS_FALSE; /* .. OSTickStepState to OS_TICK_STEP_ONCE */ + break; + + case OS_TICK_STEP_ONCE: /* Yes, process tick once and wait for next ... */ + step = OS_TRUE; /* ... step command from uC/OS-View */ + OSTickStepState = OS_TICK_STEP_WAIT; + break; + + default: /* Invalid case, correct situation */ + step = OS_TRUE; + OSTickStepState = OS_TICK_STEP_DIS; + break; + } + if (step == OS_FALSE) { /* Return if waiting for step command */ + return; + } +#endif + ptcb = OSTCBList; /* Point at first TCB in TCB list */ + while (ptcb->OSTCBPrio != OS_TASK_IDLE_PRIO) { /* Go through all TCBs in TCB list */ + OS_ENTER_CRITICAL(); + if (ptcb->OSTCBDly != 0) { /* No, Delayed or waiting for event with TO */ + if (--ptcb->OSTCBDly == 0) { /* Decrement nbr of ticks to end of delay */ + /* Check for timeout */ + if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) { + ptcb->OSTCBStat &= ~(INT8U)OS_STAT_PEND_ANY; /* Yes, Clear status flag */ + ptcb->OSTCBStatPend = OS_STAT_PEND_TO; /* Indicate PEND timeout */ + } else { + ptcb->OSTCBStatPend = OS_STAT_PEND_OK; + } + + if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended? */ + OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make ready */ + OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; + } + } + } + ptcb = ptcb->OSTCBNext; /* Point at next TCB in TCB list */ + OS_EXIT_CRITICAL(); + } + } +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* GET VERSION +* +* Description: This function is used to return the version number of uC/OS-II. The returned value +* corresponds to uC/OS-II's version number multiplied by 100. In other words, version 2.00 +* would be returned as 200. +* +* Arguments : none +* +* Returns : the version number of uC/OS-II multiplied by 100. +********************************************************************************************************* +*/ + +INT16U OSVersion (void) +{ + return (OS_VERSION); +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* DUMMY FUNCTION +* +* Description: This function doesn't do anything. It is called by OSTaskDel(). +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +#if OS_TASK_DEL_EN > 0 +void OS_Dummy (void) +{ +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* MAKE TASK READY TO RUN BASED ON EVENT OCCURING +* +* Description: This function is called by other uC/OS-II services and is used to ready a task that was +* waiting for an event to occur. +* +* Arguments : pevent is a pointer to the event control block corresponding to the event. +* +* pmsg is a pointer to a message. This pointer is used by message oriented services +* such as MAILBOXEs and QUEUEs. The pointer is not used when called by other +* service functions. +* +* msk is a mask that is used to clear the status byte of the TCB. For example, +* OSSemPost() will pass OS_STAT_SEM, OSMboxPost() will pass OS_STAT_MBOX etc. +* +* pend_stat is used to indicate the readied task's pending status: +* +* OS_STAT_PEND_OK Task ready due to a post (or delete), not a timeout or +* an abort. +* OS_STAT_PEND_ABORT Task ready due to an abort. +* +* Returns : none +* +* 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) +{ + OS_TCB *ptcb; + INT8U y; + INT8U x; + INT8U prio; +#if OS_LOWEST_PRIO > 63 + INT16U *ptbl; +#endif + + +#if OS_LOWEST_PRIO <= 63 + y = OSUnMapTbl[pevent->OSEventGrp]; /* Find HPT waiting for message */ + x = OSUnMapTbl[pevent->OSEventTbl[y]]; + prio = (INT8U)((y << 3) + x); /* Find priority of task getting the msg */ +#else + if ((pevent->OSEventGrp & 0xFF) != 0) { /* Find HPT waiting for message */ + y = OSUnMapTbl[ pevent->OSEventGrp & 0xFF]; + } else { + y = OSUnMapTbl[(pevent->OSEventGrp >> 8) & 0xFF] + 8; + } + ptbl = &pevent->OSEventTbl[y]; + if ((*ptbl & 0xFF) != 0) { + x = OSUnMapTbl[*ptbl & 0xFF]; + } else { + 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 */ + ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from readying task */ +#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) + ptcb->OSTCBMsg = pmsg; /* Send message directly to waiting task */ +#else + pmsg = pmsg; /* Prevent compiler warning if not used */ +#endif + ptcb->OSTCBStat &= ~msk; /* Clear bit associated with event type */ + ptcb->OSTCBStatPend = pend_stat; /* Set pend status of post or abort */ + /* See if task is ready (could be susp'd) */ + if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { + OSRdyGrp |= ptcb->OSTCBBitY; /* Put task in the ready to run list */ + OSRdyTbl[y] |= ptcb->OSTCBBitX; + } + + OS_EventTaskRemove(ptcb, pevent); /* Remove this task from event wait list */ +#if (OS_EVENT_MULTI_EN > 0) + if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) { /* Remove this task from events' wait lists */ + OS_EventTaskRemoveMulti(ptcb, ptcb->OSTCBEventMultiPtr); + ptcb->OSTCBEventPtr = (OS_EVENT *)pevent;/* Return event as first multi-pend event ready*/ + } +#endif + + return (prio); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* MAKE TASK WAIT FOR EVENT TO OCCUR +* +* Description: This function is called by other uC/OS-II services to suspend a task because an event has +* not occurred. +* +* Arguments : pevent is a pointer to the event control block for which the task will be waiting for. +* +* Returns : none +* +* 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) +{ + INT8U y; + + + OSTCBCur->OSTCBEventPtr = pevent; /* Store ptr to ECB in TCB */ + + pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting list */ + pevent->OSEventGrp |= OSTCBCur->OSTCBBitY; + + y = OSTCBCur->OSTCBY; /* Task no longer ready */ + OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX; + if (OSRdyTbl[y] == 0) { + OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pending */ + } +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* MAKE TASK WAIT FOR ANY OF MULTIPLE EVENTS TO OCCUR +* +* Description: This function is called by other uC/OS-II services to suspend a task because any one of +* multiple events has not occurred. +* +* Arguments : pevents_wait is a pointer to an array of event control blocks, NULL-terminated, for +* which the task will be waiting for. +* +* Returns : none. +* +* 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) +{ + OS_EVENT **pevents; + OS_EVENT *pevent; + INT8U y; + + + OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; + OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)pevents_wait; /* Store ptr to ECBs in TCB */ + + pevents = pevents_wait; + pevent = *pevents; + while (pevent != (OS_EVENT *)0) { /* Put task in waiting lists */ + pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; + pevent->OSEventGrp |= OSTCBCur->OSTCBBitY; + pevents++; + pevent = *pevents; + } + + y = OSTCBCur->OSTCBY; /* Task no longer ready */ + OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX; + if (OSRdyTbl[y] == 0) { + OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pending */ + } +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* REMOVE TASK FROM EVENT WAIT LIST +* +* Description: Remove a task from an event's wait list. +* +* Arguments : ptcb is a pointer to the task to remove. +* +* pevent is a pointer to the event control block. +* +* Returns : none +* +* Note : This function is INTERNAL to uC/OS-II and your application should not call it. +********************************************************************************************************* +*/ +#if (OS_EVENT_EN) +void OS_EventTaskRemove (OS_TCB *ptcb, + OS_EVENT *pevent) +{ + INT8U y; + + + y = ptcb->OSTCBY; + pevent->OSEventTbl[y] &= ~ptcb->OSTCBBitX; /* Remove task from wait list */ + if (pevent->OSEventTbl[y] == 0) { + pevent->OSEventGrp &= ~ptcb->OSTCBBitY; + } +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* REMOVE TASK FROM MULTIPLE EVENTS WAIT LISTS +* +* Description: Remove a task from multiple events' wait lists. +* +* Arguments : ptcb is a pointer to the task to remove. +* +* pevents_multi is a pointer to the array of event control blocks, NULL-terminated. +* +* Returns : none +* +* 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_EventTaskRemoveMulti (OS_TCB *ptcb, + OS_EVENT **pevents_multi) +{ + OS_EVENT **pevents; + OS_EVENT *pevent; + INT8U y; +#if (OS_LOWEST_PRIO <= 63) + INT8U bity; + INT8U bitx; +#else + INT16U bity; + INT16U bitx; +#endif + + + y = ptcb->OSTCBY; + bity = ptcb->OSTCBBitY; + bitx = ptcb->OSTCBBitX; + pevents = pevents_multi; + pevent = *pevents; + while (pevent != (OS_EVENT *)0) { /* Remove task from all events' wait lists */ + pevent->OSEventTbl[y] &= ~bitx; + if (pevent->OSEventTbl[y] == 0) { + pevent->OSEventGrp &= ~bity; + } + pevents++; + pevent = *pevents; + } +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST +* +* Description: This function is called by other uC/OS-II services to initialize the event wait list. +* +* Arguments : pevent is a pointer to the event control block allocated to the event. +* +* Returns : none +* +* 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) +{ +#if OS_LOWEST_PRIO <= 63 + INT8U *ptbl; +#else + INT16U *ptbl; +#endif + INT8U i; + + + pevent->OSEventGrp = 0; /* No task waiting on event */ + ptbl = &pevent->OSEventTbl[0]; + + for (i = 0; i < OS_EVENT_TBL_SIZE; i++) { + *ptbl++ = 0; + } +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZATION +* INITIALIZE THE FREE LIST OF EVENT CONTROL BLOCKS +* +* Description: This function is called by OSInit() to initialize the free list of event control blocks. +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +static void OS_InitEventList (void) +{ +#if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) +#if (OS_MAX_EVENTS > 1) + INT16U i; + OS_EVENT *pevent1; + OS_EVENT *pevent2; + + + OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl)); /* Clear the event table */ + pevent1 = &OSEventTbl[0]; + pevent2 = &OSEventTbl[1]; + for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */ + pevent1->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent1->OSEventPtr = pevent2; +#if OS_EVENT_NAME_SIZE > 1 + pevent1->OSEventName[0] = '?'; /* Unknown name */ + pevent1->OSEventName[1] = OS_ASCII_NUL; +#endif + pevent1++; + pevent2++; + } + pevent1->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent1->OSEventPtr = (OS_EVENT *)0; +#if OS_EVENT_NAME_SIZE > 1 + pevent1->OSEventName[0] = '?'; + pevent1->OSEventName[1] = OS_ASCII_NUL; +#endif + OSEventFreeList = &OSEventTbl[0]; +#else + OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */ + OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED; + OSEventFreeList->OSEventPtr = (OS_EVENT *)0; +#if OS_EVENT_NAME_SIZE > 1 + OSEventFreeList->OSEventName[0] = '?'; /* Unknown name */ + OSEventFreeList->OSEventName[1] = OS_ASCII_NUL; +#endif +#endif +#endif +} +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZATION +* INITIALIZE MISCELLANEOUS VARIABLES +* +* Description: This function is called by OSInit() to initialize miscellaneous variables. +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +static void OS_InitMisc (void) +{ +#if OS_TIME_GET_SET_EN > 0 + OSTime = 0L; /* Clear the 32-bit system clock */ +#endif + + OSIntNesting = 0; /* Clear the interrupt nesting counter */ + OSLockNesting = 0; /* Clear the scheduling lock counter */ + + OSTaskCtr = 0; /* Clear the number of tasks */ + + OSRunning = OS_FALSE; /* Indicate that multitasking not started */ + + OSCtxSwCtr = 0; /* Clear the context switch counter */ + OSIdleCtr = 0L; /* Clear the 32-bit idle counter */ + +#if OS_TASK_STAT_EN > 0 + OSIdleCtrRun = 0L; + OSIdleCtrMax = 0L; + OSStatRdy = OS_FALSE; /* Statistic task is not ready */ +#endif +} +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZATION +* INITIALIZE THE READY LIST +* +* Description: This function is called by OSInit() to initialize the Ready List. +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +static void OS_InitRdyList (void) +{ + INT8U i; +#if OS_LOWEST_PRIO <= 63 + INT8U *prdytbl; +#else + INT16U *prdytbl; +#endif + + + OSRdyGrp = 0; /* Clear the ready list */ + prdytbl = &OSRdyTbl[0]; + for (i = 0; i < OS_RDY_TBL_SIZE; i++) { + *prdytbl++ = 0; + } + + OSPrioCur = 0; + OSPrioHighRdy = 0; + + OSTCBHighRdy = (OS_TCB *)0; + OSTCBCur = (OS_TCB *)0; +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZATION +* CREATING THE IDLE TASK +* +* Description: This function creates the Idle Task. +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +static void OS_InitTaskIdle (void) +{ +#if OS_TASK_NAME_SIZE > 7 + INT8U err; +#endif + + +#if OS_TASK_CREATE_EXT_EN > 0 + #if OS_STK_GROWTH == 1 + (void)OSTaskCreateExt(OS_TaskIdle, + (void *)0, /* No arguments passed to OS_TaskIdle() */ + &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack */ + OS_TASK_IDLE_PRIO, /* Lowest priority level */ + OS_TASK_IDLE_ID, + &OSTaskIdleStk[0], /* Set Bottom-Of-Stack */ + OS_TASK_IDLE_STK_SIZE, + (void *)0, /* No TCB extension */ + OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */ + #else + (void)OSTaskCreateExt(OS_TaskIdle, + (void *)0, /* No arguments passed to OS_TaskIdle() */ + &OSTaskIdleStk[0], /* Set Top-Of-Stack */ + OS_TASK_IDLE_PRIO, /* Lowest priority level */ + OS_TASK_IDLE_ID, + &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack */ + OS_TASK_IDLE_STK_SIZE, + (void *)0, /* No TCB extension */ + OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */ + #endif +#else + #if OS_STK_GROWTH == 1 + (void)OSTaskCreate(OS_TaskIdle, + (void *)0, + &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], + OS_TASK_IDLE_PRIO); + #else + (void)OSTaskCreate(OS_TaskIdle, + (void *)0, + &OSTaskIdleStk[0], + OS_TASK_IDLE_PRIO); + #endif +#endif + +#if OS_TASK_NAME_SIZE > 14 + OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"uC/OS-II Idle", &err); +#else +#if OS_TASK_NAME_SIZE > 7 + OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"OS-Idle", &err); +#endif +#endif +} +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZATION +* CREATING THE STATISTIC TASK +* +* Description: This function creates the Statistic Task. +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +#if OS_TASK_STAT_EN > 0 +static void OS_InitTaskStat (void) +{ +#if OS_TASK_NAME_SIZE > 7 + INT8U err; +#endif + + +#if OS_TASK_CREATE_EXT_EN > 0 + #if OS_STK_GROWTH == 1 + (void)OSTaskCreateExt(OS_TaskStat, + (void *)0, /* No args passed to OS_TaskStat()*/ + &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */ + OS_TASK_STAT_PRIO, /* One higher than the idle task */ + OS_TASK_STAT_ID, + &OSTaskStatStk[0], /* Set Bottom-Of-Stack */ + OS_TASK_STAT_STK_SIZE, + (void *)0, /* No TCB extension */ + OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear */ + #else + (void)OSTaskCreateExt(OS_TaskStat, + (void *)0, /* No args passed to OS_TaskStat()*/ + &OSTaskStatStk[0], /* Set Top-Of-Stack */ + OS_TASK_STAT_PRIO, /* One higher than the idle task */ + OS_TASK_STAT_ID, + &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Bottom-Of-Stack */ + OS_TASK_STAT_STK_SIZE, + (void *)0, /* No TCB extension */ + OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear */ + #endif +#else + #if OS_STK_GROWTH == 1 + (void)OSTaskCreate(OS_TaskStat, + (void *)0, /* No args passed to OS_TaskStat()*/ + &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */ + OS_TASK_STAT_PRIO); /* One higher than the idle task */ + #else + (void)OSTaskCreate(OS_TaskStat, + (void *)0, /* No args passed to OS_TaskStat()*/ + &OSTaskStatStk[0], /* Set Top-Of-Stack */ + OS_TASK_STAT_PRIO); /* One higher than the idle task */ + #endif +#endif + +#if OS_TASK_NAME_SIZE > 14 + OSTaskNameSet(OS_TASK_STAT_PRIO, (INT8U *)"uC/OS-II Stat", &err); +#else +#if OS_TASK_NAME_SIZE > 7 + OSTaskNameSet(OS_TASK_STAT_PRIO, (INT8U *)"OS-Stat", &err); +#endif +#endif +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZATION +* INITIALIZE THE FREE LIST OF TASK CONTROL BLOCKS +* +* Description: This function is called by OSInit() to initialize the free list of OS_TCBs. +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +static void OS_InitTCBList (void) +{ + INT8U i; + OS_TCB *ptcb1; + OS_TCB *ptcb2; + + + OS_MemClr((INT8U *)&OSTCBTbl[0], sizeof(OSTCBTbl)); /* Clear all the TCBs */ + OS_MemClr((INT8U *)&OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl)); /* Clear the priority table */ + ptcb1 = &OSTCBTbl[0]; + ptcb2 = &OSTCBTbl[1]; + for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */ + ptcb1->OSTCBNext = ptcb2; +#if OS_TASK_NAME_SIZE > 1 + ptcb1->OSTCBTaskName[0] = '?'; /* Unknown name */ + ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL; +#endif + ptcb1++; + ptcb2++; + } + ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */ +#if OS_TASK_NAME_SIZE > 1 + ptcb1->OSTCBTaskName[0] = '?'; /* Unknown name */ + ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL; +#endif + OSTCBList = (OS_TCB *)0; /* TCB lists initializations */ + OSTCBFreeList = &OSTCBTbl[0]; +} +/*$PAGE*/ +/* +********************************************************************************************************* +* CLEAR A SECTION OF MEMORY +* +* Description: This function is called by other uC/OS-II services to clear a contiguous block of RAM. +* +* Arguments : pdest is the start of the RAM to clear (i.e. write 0x00 to) +* +* size is the number of bytes to clear. +* +* Returns : none +* +* Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. +* 2) Note that we can only clear up to 64K bytes of RAM. This is not an issue because none +* of the uses of this function gets close to this limit. +* 3) The clear is done one byte at a time since this will work on any processor irrespective +* of the alignment of the destination. +********************************************************************************************************* +*/ + +void OS_MemClr (INT8U *pdest, INT16U size) +{ + while (size > 0) { + *pdest++ = (INT8U)0; + size--; + } +} +/*$PAGE*/ +/* +********************************************************************************************************* +* COPY A BLOCK OF MEMORY +* +* Description: This function is called by other uC/OS-II services to copy a block of memory from one +* location to another. +* +* Arguments : pdest is a pointer to the 'destination' memory block +* +* psrc is a pointer to the 'source' memory block +* +* size is the number of bytes to copy. +* +* Returns : none +* +* Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. There is +* no provision to handle overlapping memory copy. However, that's not a problem since this +* is not a situation that will happen. +* 2) Note that we can only copy up to 64K bytes of RAM +* 3) The copy is done one byte at a time since this will work on any processor irrespective +* of the alignment of the source and destination. +********************************************************************************************************* +*/ + +void OS_MemCopy (INT8U *pdest, INT8U *psrc, INT16U size) +{ + while (size > 0) { + *pdest++ = *psrc++; + size--; + } +} +/*$PAGE*/ +/* +********************************************************************************************************* +* SCHEDULER +* +* Description: This function is called by other uC/OS-II services to determine whether a new, high +* priority task has been made ready to run. This function is invoked by TASK level code +* and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling). +* +* Arguments : none +* +* Returns : none +* +* Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. +* 2) Rescheduling is prevented when the scheduler is locked (see OS_SchedLock()) +********************************************************************************************************* +*/ + +void OS_Sched (void) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + OS_ENTER_CRITICAL(); + if (OSIntNesting == 0) { /* Schedule only if all ISRs done and ... */ + if (OSLockNesting == 0) { /* ... scheduler is not locked */ + OS_SchedNew(); + if (OSPrioHighRdy != OSPrioCur) { /* No Ctx Sw if current task is highest rdy */ + OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; +#if OS_TASK_PROFILE_EN > 0 + OSTCBHighRdy->OSTCBCtxSwCtr++; /* Inc. # of context switches to this task */ +#endif + OSCtxSwCtr++; /* Increment context switch counter */ + OS_TASK_SW(); /* Perform a context switch */ + } + } + } + OS_EXIT_CRITICAL(); +} + + +/* +********************************************************************************************************* +* FIND HIGHEST PRIORITY TASK READY TO RUN +* +* Description: This function is called by other uC/OS-II services to determine the highest priority task +* that is ready to run. The global variable 'OSPrioHighRdy' is changed accordingly. +* +* Arguments : none +* +* Returns : none +* +* Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. +* 2) Interrupts are assumed to be disabled when this function is called. +********************************************************************************************************* +*/ + +static void OS_SchedNew (void) +{ +#if OS_LOWEST_PRIO <= 63 /* See if we support up to 64 tasks */ + INT8U y; + + + y = OSUnMapTbl[OSRdyGrp]; + OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]); +#else /* We support up to 256 tasks */ + INT8U y; + INT16U *ptbl; + + + if ((OSRdyGrp & 0xFF) != 0) { + y = OSUnMapTbl[OSRdyGrp & 0xFF]; + } else { + y = OSUnMapTbl[(OSRdyGrp >> 8) & 0xFF] + 8; + } + ptbl = &OSRdyTbl[y]; + if ((*ptbl & 0xFF) != 0) { + OSPrioHighRdy = (INT8U)((y << 4) + OSUnMapTbl[(*ptbl & 0xFF)]); + } else { + OSPrioHighRdy = (INT8U)((y << 4) + OSUnMapTbl[(*ptbl >> 8) & 0xFF] + 8); + } +#endif +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* COPY AN ASCII STRING +* +* Description: This function is called by other uC/OS-II services to copy an ASCII string from a 'source' +* string to a 'destination' string. +* +* Arguments : pdest is a pointer to the string that will be receiving the copy. Note that there MUST +* be sufficient space in the destination storage area to receive this string. +* +* psrc is a pointer to the source string. The source string MUST NOT be greater than +* 254 characters. +* +* Returns : The size of the string (excluding the NUL terminating character) +* +* Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. +********************************************************************************************************* +*/ + +#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) +{ + INT8U len; + + + len = 0; + while (*psrc != OS_ASCII_NUL) { + *pdest++ = *psrc++; + len++; + } + *pdest = OS_ASCII_NUL; + return (len); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* DETERMINE THE LENGTH OF AN ASCII STRING +* +* Description: This function is called by other uC/OS-II services to determine the size of an ASCII string +* (excluding the NUL character). +* +* Arguments : psrc is a pointer to the string for which we need to know the size. +* +* Returns : The size of the string (excluding the NUL terminating character) +* +* Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. +* 2) The string to check must be less than 255 characters long. +********************************************************************************************************* +*/ + +#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) +{ + INT8U len; + + + len = 0; + while (*psrc != OS_ASCII_NUL) { + psrc++; + len++; + } + return (len); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* IDLE TASK +* +* Description: This task is internal to uC/OS-II and executes whenever no other higher priority tasks +* executes because they are ALL waiting for event(s) to occur. +* +* Arguments : none +* +* Returns : none +* +* Note(s) : 1) OSTaskIdleHook() is called after the critical section to ensure that interrupts will be +* enabled for at least a few instructions. On some processors (ex. Philips XA), enabling +* and then disabling interrupts didn't allow the processor enough time to have interrupts +* enabled before they were disabled again. uC/OS-II would thus never recognize +* interrupts. +* 2) This hook has been added to allow you to do such things as STOP the CPU to conserve +* power. +********************************************************************************************************* +*/ + +void OS_TaskIdle (void *p_arg) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + (void)p_arg; /* Prevent compiler warning for not using 'p_arg' */ + for (;;) { + OS_ENTER_CRITICAL(); + OSIdleCtr++; + OS_EXIT_CRITICAL(); + OSTaskIdleHook(); /* Call user definable HOOK */ + } +} +/*$PAGE*/ +/* +********************************************************************************************************* +* STATISTICS TASK +* +* Description: This task is internal to uC/OS-II and is used to compute some statistics about the +* multitasking environment. Specifically, OS_TaskStat() computes the CPU usage. +* CPU usage is determined by: +* +* OSIdleCtr +* OSCPUUsage = 100 * (1 - ------------) (units are in %) +* OSIdleCtrMax +* +* Arguments : parg this pointer is not used at this time. +* +* Returns : none +* +* Notes : 1) This task runs at a priority level higher than the idle task. In fact, it runs at the +* next higher priority, OS_TASK_IDLE_PRIO-1. +* 2) You can disable this task by setting the configuration #define OS_TASK_STAT_EN to 0. +* 3) You MUST have at least a delay of 2/10 seconds to allow for the system to establish the +* maximum value for the idle counter. +********************************************************************************************************* +*/ + +#if OS_TASK_STAT_EN > 0 +void OS_TaskStat (void *p_arg) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + (void)p_arg; /* Prevent compiler warning for not using 'p_arg' */ + while (OSStatRdy == OS_FALSE) { + OSTimeDly(2 * OS_TICKS_PER_SEC / 10); /* Wait until statistic task is ready */ + } + OSIdleCtrMax /= 100L; + if (OSIdleCtrMax == 0L) { + OSCPUUsage = 0; + (void)OSTaskSuspend(OS_PRIO_SELF); + } + for (;;) { + OS_ENTER_CRITICAL(); + OSIdleCtrRun = OSIdleCtr; /* Obtain the of the idle counter for the past second */ + OSIdleCtr = 0L; /* Reset the idle counter for the next second */ + OS_EXIT_CRITICAL(); + OSCPUUsage = (INT8U)(100L - OSIdleCtrRun / OSIdleCtrMax); + OSTaskStatHook(); /* Invoke user definable hook */ +#if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) + OS_TaskStatStkChk(); /* Check the stacks for each task */ +#endif + OSTimeDly(OS_TICKS_PER_SEC / 10); /* Accumulate OSIdleCtr for the next 1/10 second */ + } +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* CHECK ALL TASK STACKS +* +* Description: This function is called by OS_TaskStat() to check the stacks of each active task. +* +* Arguments : none +* +* Returns : none +********************************************************************************************************* +*/ + +#if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) +void OS_TaskStatStkChk (void) +{ + OS_TCB *ptcb; + OS_STK_DATA stk_data; + INT8U err; + INT8U prio; + + + for (prio = 0; prio <= OS_TASK_IDLE_PRIO; prio++) { + err = OSTaskStkChk(prio, &stk_data); + if (err == OS_ERR_NONE) { + ptcb = OSTCBPrioTbl[prio]; + if (ptcb != (OS_TCB *)0) { /* Make sure task 'ptcb' is ... */ + if (ptcb != OS_TCB_RESERVED) { /* ... still valid. */ +#if OS_TASK_PROFILE_EN > 0 + #if OS_STK_GROWTH == 1 + ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom + ptcb->OSTCBStkSize; + #else + ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom - ptcb->OSTCBStkSize; + #endif + ptcb->OSTCBStkUsed = stk_data.OSUsed; /* Store the number of bytes used */ +#endif + } + } + } + } +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZE TCB +* +* Description: This function is internal to uC/OS-II and is used to initialize a Task Control Block when +* a task is created (see OSTaskCreate() and OSTaskCreateExt()). +* +* Arguments : prio is the priority of the task being created +* +* ptos is a pointer to the task's top-of-stack assuming that the CPU registers +* have been placed on the stack. Note that the top-of-stack corresponds to a +* 'high' memory location is OS_STK_GROWTH is set to 1 and a 'low' memory +* location if OS_STK_GROWTH is set to 0. Note that stack growth is CPU +* specific. +* +* pbos is a pointer to the bottom of stack. A NULL pointer is passed if called by +* 'OSTaskCreate()'. +* +* id is the task's ID (0..65535) +* +* stk_size is the size of the stack (in 'stack units'). If the stack units are INT8Us +* then, 'stk_size' contains the number of bytes for the stack. If the stack +* units are INT32Us then, the stack contains '4 * stk_size' bytes. The stack +* units are established by the #define constant OS_STK which is CPU +* specific. 'stk_size' is 0 if called by 'OSTaskCreate()'. +* +* pext is a pointer to a user supplied memory area that is used to extend the task +* control block. This allows you to store the contents of floating-point +* registers, MMU registers or anything else you could find useful during a +* context switch. You can even assign a name to each task and store this name +* in this TCB extension. A NULL pointer is passed if called by OSTaskCreate(). +* +* opt options as passed to 'OSTaskCreateExt()' or, +* 0 if called from 'OSTaskCreate()'. +* +* Returns : OS_ERR_NONE if the call was successful +* OS_ERR_TASK_NO_MORE_TCB if there are no more free TCBs to be allocated and thus, the task cannot +* be created. +* +* 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) +{ + OS_TCB *ptcb; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + OS_ENTER_CRITICAL(); + ptcb = OSTCBFreeList; /* Get a free TCB from the free TCB list */ + if (ptcb != (OS_TCB *)0) { + OSTCBFreeList = ptcb->OSTCBNext; /* Update pointer to free TCB list */ + OS_EXIT_CRITICAL(); + ptcb->OSTCBStkPtr = ptos; /* Load Stack pointer in TCB */ + ptcb->OSTCBPrio = prio; /* Load task priority into TCB */ + ptcb->OSTCBStat = OS_STAT_RDY; /* Task is ready to run */ + ptcb->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */ + ptcb->OSTCBDly = 0; /* Task is not delayed */ + +#if OS_TASK_CREATE_EXT_EN > 0 + ptcb->OSTCBExtPtr = pext; /* Store pointer to TCB extension */ + ptcb->OSTCBStkSize = stk_size; /* Store stack size */ + ptcb->OSTCBStkBottom = pbos; /* Store pointer to bottom of stack */ + ptcb->OSTCBOpt = opt; /* Store task options */ + ptcb->OSTCBId = id; /* Store task ID */ +#else + pext = pext; /* Prevent compiler warning if not used */ + stk_size = stk_size; + pbos = pbos; + opt = opt; + id = id; +#endif + +#if OS_TASK_DEL_EN > 0 + ptcb->OSTCBDelReq = OS_ERR_NONE; +#endif + +#if OS_LOWEST_PRIO <= 63 + ptcb->OSTCBY = (INT8U)(prio >> 3); /* Pre-compute X, Y, BitX and BitY */ + ptcb->OSTCBX = (INT8U)(prio & 0x07); + ptcb->OSTCBBitY = (INT8U)(1 << ptcb->OSTCBY); + ptcb->OSTCBBitX = (INT8U)(1 << ptcb->OSTCBX); +#else + ptcb->OSTCBY = (INT8U)((prio >> 4) & 0xFF); /* Pre-compute X, Y, BitX and BitY */ + ptcb->OSTCBX = (INT8U) (prio & 0x0F); + 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 */ +#if (OS_EVENT_MULTI_EN > 0) + ptcb->OSTCBEventMultiPtr = (OS_EVENT **)0; /* Task is not pending on any events */ +#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 */ +#endif + +#if (OS_MBOX_EN > 0) || ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) + ptcb->OSTCBMsg = (void *)0; /* No message received */ +#endif + +#if OS_TASK_PROFILE_EN > 0 + ptcb->OSTCBCtxSwCtr = 0L; /* Initialize profiling variables */ + ptcb->OSTCBCyclesStart = 0L; + ptcb->OSTCBCyclesTot = 0L; + ptcb->OSTCBStkBase = (OS_STK *)0; + ptcb->OSTCBStkUsed = 0L; +#endif + +#if OS_TASK_NAME_SIZE > 1 + ptcb->OSTCBTaskName[0] = '?'; /* Unknown name at task creation */ + ptcb->OSTCBTaskName[1] = OS_ASCII_NUL; +#endif + + OSTCBInitHook(ptcb); + + OSTaskCreateHook(ptcb); /* Call user defined hook */ + + OS_ENTER_CRITICAL(); + OSTCBPrioTbl[prio] = ptcb; + ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */ + ptcb->OSTCBPrev = (OS_TCB *)0; + if (OSTCBList != (OS_TCB *)0) { + OSTCBList->OSTCBPrev = ptcb; + } + OSTCBList = ptcb; + OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready to run */ + OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; + OSTaskCtr++; /* Increment the #tasks counter */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); + } + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NO_MORE_TCB); +} diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_dbg.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_dbg.c new file mode 100644 index 0000000..fb84a6d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_dbg.c @@ -0,0 +1,312 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* DEBUGGER CONSTANTS +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_DBG.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#include + +/* +********************************************************************************************************* +* DEBUG DATA +********************************************************************************************************* +*/ + +INT16U const OSDebugEn = OS_DEBUG_EN; /* Debug constants are defined below */ + +#if OS_DEBUG_EN > 0 + +INT32U const OSEndiannessTest = 0x12345678L; /* Variable to test CPU endianness */ + +INT16U const OSEventEn = OS_EVENT_EN; +INT16U const OSEventMax = OS_MAX_EVENTS; /* Number of event control blocks */ +INT16U const OSEventNameSize = OS_EVENT_NAME_SIZE; /* Size (in bytes) of event names */ +#if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) +INT16U const OSEventSize = sizeof(OS_EVENT); /* Size in Bytes of OS_EVENT */ +INT16U const OSEventTblSize = sizeof(OSEventTbl); /* Size of OSEventTbl[] in bytes */ +#else +INT16U const OSEventSize = 0; +INT16U const OSEventTblSize = 0; +#endif +INT16U const OSEventMultiEn = OS_EVENT_MULTI_EN; + + +INT16U const OSFlagEn = OS_FLAG_EN; +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) +INT16U const OSFlagGrpSize = sizeof(OS_FLAG_GRP); /* Size in Bytes of OS_FLAG_GRP */ +INT16U const OSFlagNodeSize = sizeof(OS_FLAG_NODE); /* Size in Bytes of OS_FLAG_NODE */ +INT16U const OSFlagWidth = sizeof(OS_FLAGS); /* Width (in bytes) of OS_FLAGS */ +#else +INT16U const OSFlagGrpSize = 0; +INT16U const OSFlagNodeSize = 0; +INT16U const OSFlagWidth = 0; +#endif +INT16U const OSFlagMax = OS_MAX_FLAGS; +INT16U const OSFlagNameSize = OS_FLAG_NAME_SIZE; /* Size (in bytes) of flag names */ + +INT16U const OSLowestPrio = OS_LOWEST_PRIO; + +INT16U const OSMboxEn = OS_MBOX_EN; + +INT16U const OSMemEn = OS_MEM_EN; +INT16U const OSMemMax = OS_MAX_MEM_PART; /* Number of memory partitions */ +INT16U const OSMemNameSize = OS_MEM_NAME_SIZE; /* Size (in bytes) of partition names */ +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) +INT16U const OSMemSize = sizeof(OS_MEM); /* Mem. Partition header sine (bytes) */ +INT16U const OSMemTblSize = sizeof(OSMemTbl); +#else +INT16U const OSMemSize = 0; +INT16U const OSMemTblSize = 0; +#endif +INT16U const OSMutexEn = OS_MUTEX_EN; + +INT16U const OSPtrSize = sizeof(void *); /* Size in Bytes of a pointer */ + +INT16U const OSQEn = OS_Q_EN; +INT16U const OSQMax = OS_MAX_QS; /* Number of queues */ +#if (OS_Q_EN > 0) && (OS_MAX_QS > 0) +INT16U const OSQSize = sizeof(OS_Q); /* Size in bytes of OS_Q structure */ +#else +INT16U const OSQSize = 0; +#endif + +INT16U const OSRdyTblSize = OS_RDY_TBL_SIZE; /* Number of bytes in the ready table */ + +INT16U const OSSemEn = OS_SEM_EN; + +INT16U const OSStkWidth = sizeof(OS_STK); /* Size in Bytes of a stack entry */ + +INT16U const OSTaskCreateEn = OS_TASK_CREATE_EN; +INT16U const OSTaskCreateExtEn = OS_TASK_CREATE_EXT_EN; +INT16U const OSTaskDelEn = OS_TASK_DEL_EN; +INT16U const OSTaskIdleStkSize = OS_TASK_IDLE_STK_SIZE; +INT16U const OSTaskProfileEn = OS_TASK_PROFILE_EN; +INT16U const OSTaskMax = OS_MAX_TASKS + OS_N_SYS_TASKS; /* Total max. number of tasks */ +INT16U const OSTaskNameSize = OS_TASK_NAME_SIZE; /* Size (in bytes) of task names */ +INT16U const OSTaskStatEn = OS_TASK_STAT_EN; +INT16U const OSTaskStatStkSize = OS_TASK_STAT_STK_SIZE; +INT16U const OSTaskStatStkChkEn = OS_TASK_STAT_STK_CHK_EN; +INT16U const OSTaskSwHookEn = OS_TASK_SW_HOOK_EN; + +INT16U const OSTCBPrioTblMax = OS_LOWEST_PRIO + 1; /* Number of entries in OSTCBPrioTbl[] */ +INT16U const OSTCBSize = sizeof(OS_TCB); /* Size in Bytes of OS_TCB */ +INT16U const OSTicksPerSec = OS_TICKS_PER_SEC; +INT16U const OSTimeTickHookEn = OS_TIME_TICK_HOOK_EN; +INT16U const OSVersionNbr = OS_VERSION; + +INT16U const OSTmrEn = OS_TMR_EN; +INT16U const OSTmrCfgMax = OS_TMR_CFG_MAX; +INT16U const OSTmrCfgNameSize = OS_TMR_CFG_NAME_SIZE; +INT16U const OSTmrCfgWheelSize = OS_TMR_CFG_WHEEL_SIZE; +INT16U const OSTmrCfgTicksPerSec = OS_TMR_CFG_TICKS_PER_SEC; + +#if (OS_TMR_EN > 0) && (OS_TMR_CFG_MAX > 0) +INT16U const OSTmrSize = sizeof(OS_TMR); +INT16U const OSTmrTblSize = sizeof(OSTmrTbl); +INT16U const OSTmrWheelSize = sizeof(OS_TMR_WHEEL); +INT16U const OSTmrWheelTblSize = sizeof(OSTmrWheelTbl); +#else +INT16U const OSTmrSize = 0; +INT16U const OSTmrTblSize = 0; +INT16U const OSTmrWheelSize = 0; +INT16U const OSTmrWheelTblSize = 0; +#endif + +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* DEBUG DATA +* TOTAL DATA SPACE (i.e. RAM) USED BY uC/OS-II +********************************************************************************************************* +*/ +#if OS_DEBUG_EN > 0 + +INT16U const OSDataSize = sizeof(OSCtxSwCtr) +#if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) + + sizeof(OSEventFreeList) + + sizeof(OSEventTbl) +#endif +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) + + sizeof(OSFlagTbl) + + sizeof(OSFlagFreeList) +#endif +#if OS_TASK_STAT_EN > 0 + + sizeof(OSCPUUsage) + + sizeof(OSIdleCtrMax) + + sizeof(OSIdleCtrRun) + + sizeof(OSStatRdy) + + sizeof(OSTaskStatStk) +#endif +#if OS_TICK_STEP_EN > 0 + + sizeof(OSTickStepState) +#endif +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) + + sizeof(OSMemFreeList) + + sizeof(OSMemTbl) +#endif +#if (OS_Q_EN > 0) && (OS_MAX_QS > 0) + + sizeof(OSQFreeList) + + sizeof(OSQTbl) +#endif +#if OS_TIME_GET_SET_EN > 0 + + sizeof(OSTime) +#endif +#if (OS_TMR_EN > 0) && (OS_TMR_CFG_MAX > 0) + + sizeof(OSTmrFree) + + sizeof(OSTmrUsed) + + sizeof(OSTmrTime) + + sizeof(OSTmrSem) + + sizeof(OSTmrSemSignal) + + sizeof(OSTmrTbl) + + sizeof(OSTmrFreeList) + + sizeof(OSTmrTaskStk) + + sizeof(OSTmrWheelTbl) +#endif + + sizeof(OSIntNesting) + + sizeof(OSLockNesting) + + sizeof(OSPrioCur) + + sizeof(OSPrioHighRdy) + + sizeof(OSRdyGrp) + + sizeof(OSRdyTbl) + + sizeof(OSRunning) + + sizeof(OSTaskCtr) + + sizeof(OSIdleCtr) + + sizeof(OSTaskIdleStk) + + sizeof(OSTCBCur) + + sizeof(OSTCBFreeList) + + sizeof(OSTCBHighRdy) + + sizeof(OSTCBList) + + sizeof(OSTCBPrioTbl) + + sizeof(OSTCBTbl); + +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* OS DEBUG INITIALIZATION +* +* Description: This function is used to make sure that debug variables that are unused in the application +* are not optimized away. This function might not be necessary for all compilers. In this +* case, you should simply DELETE the code in this function while still leaving the declaration +* of the function itself. +* +* Arguments : none +* +* Returns : none +* +* Note(s) : (1) This code doesn't do anything, it simply prevents the compiler from optimizing out +* the 'const' variables which are declared in this file. +* (2) You may decide to 'compile out' the code (by using #if 0/#endif) INSIDE the function +* if your compiler DOES NOT optimize out the 'const' variables above. +********************************************************************************************************* +*/ + +#if OS_DEBUG_EN > 0 +void OSDebugInit (void) +{ + void *ptemp; + + + ptemp = (void *)&OSDebugEn; + + ptemp = (void *)&OSEndiannessTest; + + ptemp = (void *)&OSEventMax; + ptemp = (void *)&OSEventNameSize; + ptemp = (void *)&OSEventEn; + ptemp = (void *)&OSEventSize; + ptemp = (void *)&OSEventTblSize; + ptemp = (void *)&OSEventMultiEn; + + ptemp = (void *)&OSFlagEn; + ptemp = (void *)&OSFlagGrpSize; + ptemp = (void *)&OSFlagNodeSize; + ptemp = (void *)&OSFlagWidth; + ptemp = (void *)&OSFlagMax; + ptemp = (void *)&OSFlagNameSize; + + ptemp = (void *)&OSLowestPrio; + + ptemp = (void *)&OSMboxEn; + + ptemp = (void *)&OSMemEn; + ptemp = (void *)&OSMemMax; + ptemp = (void *)&OSMemNameSize; + ptemp = (void *)&OSMemSize; + ptemp = (void *)&OSMemTblSize; + + ptemp = (void *)&OSMutexEn; + + ptemp = (void *)&OSPtrSize; + + ptemp = (void *)&OSQEn; + ptemp = (void *)&OSQMax; + ptemp = (void *)&OSQSize; + + ptemp = (void *)&OSRdyTblSize; + + ptemp = (void *)&OSSemEn; + + ptemp = (void *)&OSStkWidth; + + ptemp = (void *)&OSTaskCreateEn; + ptemp = (void *)&OSTaskCreateExtEn; + ptemp = (void *)&OSTaskDelEn; + ptemp = (void *)&OSTaskIdleStkSize; + ptemp = (void *)&OSTaskProfileEn; + ptemp = (void *)&OSTaskMax; + ptemp = (void *)&OSTaskNameSize; + ptemp = (void *)&OSTaskStatEn; + ptemp = (void *)&OSTaskStatStkSize; + ptemp = (void *)&OSTaskStatStkChkEn; + ptemp = (void *)&OSTaskSwHookEn; + + ptemp = (void *)&OSTCBPrioTblMax; + ptemp = (void *)&OSTCBSize; + + ptemp = (void *)&OSTicksPerSec; + ptemp = (void *)&OSTimeTickHookEn; + +#if OS_TMR_EN > 0 + ptemp = (void *)&OSTmrTbl[0]; + ptemp = (void *)&OSTmrWheelTbl[0]; + + ptemp = (void *)&OSTmrEn; + ptemp = (void *)&OSTmrCfgMax; + ptemp = (void *)&OSTmrCfgNameSize; + ptemp = (void *)&OSTmrCfgWheelSize; + ptemp = (void *)&OSTmrCfgTicksPerSec; + ptemp = (void *)&OSTmrSize; + ptemp = (void *)&OSTmrTblSize; + + ptemp = (void *)&OSTmrWheelSize; + ptemp = (void *)&OSTmrWheelTblSize; +#endif + + ptemp = (void *)&OSVersionNbr; + + ptemp = (void *)&OSDataSize; + + ptemp = ptemp; /* Prevent compiler warning for 'ptemp' not being used! */ +} +#endif diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_flag.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_flag.c new file mode 100644 index 0000000..b77ef1d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_flag.c @@ -0,0 +1,1174 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* EVENT FLAG MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_FLAG.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#include +#endif + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) +/* +********************************************************************************************************* +* LOCAL PROTOTYPES +********************************************************************************************************* +*/ + +static void OS_FlagBlock(OS_FLAG_GRP *pgrp, OS_FLAG_NODE *pnode, OS_FLAGS flags, INT8U wait_type, INT16U timeout); +static BOOLEAN OS_FlagTaskRdy(OS_FLAG_NODE *pnode, OS_FLAGS flags_rdy); + +/*$PAGE*/ +/* +********************************************************************************************************* +* CHECK THE STATUS OF FLAGS IN AN EVENT FLAG GROUP +* +* Description: This function is called to check the status of a combination of bits to be set or cleared +* in an event flag group. Your application can check for ANY bit to be set/cleared or ALL +* bits to be set/cleared. +* +* This call does not block if the desired flags are not present. +* +* Arguments : pgrp is a pointer to the desired event flag group. +* +* flags Is a bit pattern indicating which bit(s) (i.e. flags) you wish to check. +* The bits you want are specified by setting the corresponding bits in +* 'flags'. e.g. if your application wants to wait for bits 0 and 1 then +* 'flags' would contain 0x03. +* +* wait_type specifies whether you want ALL bits to be set/cleared or ANY of the bits +* to be set/cleared. +* You can specify the following argument: +* +* OS_FLAG_WAIT_CLR_ALL You will check ALL bits in 'flags' to be clear (0) +* OS_FLAG_WAIT_CLR_ANY You will check ANY bit in 'flags' to be clear (0) +* OS_FLAG_WAIT_SET_ALL You will check ALL bits in 'flags' to be set (1) +* OS_FLAG_WAIT_SET_ANY You will check ANY bit in 'flags' to be set (1) +* +* NOTE: Add OS_FLAG_CONSUME if you want the event flag to be 'consumed' by +* the call. Example, to wait for any flag in a group AND then clear +* the flags that are present, set 'wait_type' to: +* +* OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME +* +* perr is a pointer to an error code and can be: +* OS_ERR_NONE No error +* OS_ERR_EVENT_TYPE You are not pointing to an event flag group +* OS_ERR_FLAG_WAIT_TYPE You didn't specify a proper 'wait_type' argument. +* OS_ERR_FLAG_INVALID_PGRP You passed a NULL pointer instead of the event flag +* group handle. +* OS_ERR_FLAG_NOT_RDY The desired flags you are waiting for are not +* available. +* +* Returns : The flags in the event flag group that made the task ready or, 0 if a timeout or an error +* occurred. +* +* Called from: Task or ISR +* +* Note(s) : 1) IMPORTANT, the behavior of this function has changed from PREVIOUS versions. The +* function NOW returns the flags that were ready INSTEAD of the current state of the +* event flags. +********************************************************************************************************* +*/ + +#if OS_FLAG_ACCEPT_EN > 0 +OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *perr) +{ + 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; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((OS_FLAGS)0); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return ((OS_FLAGS)0); + } + result = (INT8U)(wait_type & OS_FLAG_CONSUME); + if (result != (INT8U)0) { /* See if we need to consume the flags */ + wait_type &= ~OS_FLAG_CONSUME; + consume = OS_TRUE; + } else { + consume = OS_FALSE; + } +/*$PAGE*/ + *perr = OS_ERR_NONE; /* Assume NO error until proven otherwise. */ + OS_ENTER_CRITICAL(); + switch (wait_type) { + 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 */ + if (flags_rdy == flags) { /* Must match ALL the bits that we want */ + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */ + } + } else { + *perr = OS_ERR_FLAG_NOT_RDY; + } + OS_EXIT_CRITICAL(); + break; + + case OS_FLAG_WAIT_SET_ANY: + flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */ + if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */ + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */ + } + } else { + *perr = OS_ERR_FLAG_NOT_RDY; + } + OS_EXIT_CRITICAL(); + break; + +#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 */ + if (flags_rdy == flags) { /* Must match ALL the bits that we want */ + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */ + } + } else { + *perr = OS_ERR_FLAG_NOT_RDY; + } + OS_EXIT_CRITICAL(); + break; + + case OS_FLAG_WAIT_CLR_ANY: + flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */ + if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */ + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */ + } + } else { + *perr = OS_ERR_FLAG_NOT_RDY; + } + OS_EXIT_CRITICAL(); + break; +#endif + + default: + OS_EXIT_CRITICAL(); + flags_rdy = (OS_FLAGS)0; + *perr = OS_ERR_FLAG_WAIT_TYPE; + break; + } + return (flags_rdy); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* CREATE AN EVENT FLAG +* +* Description: This function is called to create an event flag group. +* +* Arguments : flags Contains the initial value to store in the event flag group. +* +* perr is a pointer to an error code which will be returned to your application: +* OS_ERR_NONE if the call was successful. +* OS_ERR_CREATE_ISR if you attempted to create an Event Flag from an +* ISR. +* OS_ERR_FLAG_GRP_DEPLETED if there are no more event flag groups +* +* Returns : A pointer to an event flag group or a NULL pointer if no more groups are available. +* +* Called from: Task ONLY +********************************************************************************************************* +*/ + +OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *perr) +{ + OS_FLAG_GRP *pgrp; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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 ... */ + *perr = OS_ERR_CREATE_ISR; /* ... can't CREATE from an ISR */ + return ((OS_FLAG_GRP *)0); + } + OS_ENTER_CRITICAL(); + pgrp = OSFlagFreeList; /* Get next free event flag */ + if (pgrp != (OS_FLAG_GRP *)0) { /* See if we have event flag groups available */ + /* Adjust free list */ + OSFlagFreeList = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList; + pgrp->OSFlagType = OS_EVENT_TYPE_FLAG; /* Set to event flag group type */ + pgrp->OSFlagFlags = flags; /* Set to desired initial value */ + pgrp->OSFlagWaitList = (void *)0; /* Clear list of tasks waiting on flags */ +#if OS_FLAG_NAME_SIZE > 1 + pgrp->OSFlagName[0] = '?'; + pgrp->OSFlagName[1] = OS_ASCII_NUL; +#endif + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + } else { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_FLAG_GRP_DEPLETED; + } + return (pgrp); /* Return pointer to event flag group */ +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* DELETE AN EVENT FLAG GROUP +* +* Description: This function deletes an event flag group and readies all tasks pending on the event flag +* group. +* +* Arguments : pgrp is a pointer to the desired event flag group. +* +* opt determines delete options as follows: +* opt == OS_DEL_NO_PEND Deletes the event flag group ONLY if no task pending +* opt == OS_DEL_ALWAYS Deletes the event flag group even if tasks are +* waiting. In this case, all the tasks pending will be +* readied. +* +* perr is a pointer to an error code that can contain one of the following values: +* OS_ERR_NONE The call was successful and the event flag group was +* deleted +* OS_ERR_DEL_ISR If you attempted to delete the event flag group from +* an ISR +* OS_ERR_FLAG_INVALID_PGRP If 'pgrp' is a NULL pointer. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to an event flag group +* OS_ERR_INVALID_OPT An invalid option was specified +* OS_ERR_TASK_WAITING One or more tasks were waiting on the event flag +* group. +* +* Returns : pgrp upon error +* (OS_EVENT *)0 if the event flag group was successfully deleted. +* +* Note(s) : 1) This function must be used with care. Tasks that would normally expect the presence of +* the event flag group MUST check the return code of OSFlagAccept() and OSFlagPend(). +* 2) This call can potentially disable interrupts for a long time. The interrupt disable +* time is directly proportional to the number of tasks waiting on the event flag group. +********************************************************************************************************* +*/ + +#if OS_FLAG_DEL_EN > 0 +OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, INT8U opt, INT8U *perr) +{ + 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; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (pgrp); + } + 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 ... */ + *perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */ + return (pgrp); + } + if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event group type */ + *perr = OS_ERR_EVENT_TYPE; + return (pgrp); + } + OS_ENTER_CRITICAL(); + if (pgrp->OSFlagWaitList != (void *)0) { /* See if any tasks waiting on event flags */ + tasks_waiting = OS_TRUE; /* Yes */ + } else { + tasks_waiting = OS_FALSE; /* No */ + } + switch (opt) { + case OS_DEL_NO_PEND: /* Delete group if no task waiting */ + if (tasks_waiting == OS_FALSE) { +#if OS_FLAG_NAME_SIZE > 1 + pgrp->OSFlagName[0] = '?'; /* Unknown name */ + pgrp->OSFlagName[1] = OS_ASCII_NUL; +#endif + pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED; + pgrp->OSFlagWaitList = (void *)OSFlagFreeList; /* Return group to free list */ + pgrp->OSFlagFlags = (OS_FLAGS)0; + OSFlagFreeList = pgrp; + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */ + } else { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_TASK_WAITING; + pgrp_return = pgrp; + } + break; + + case OS_DEL_ALWAYS: /* Always delete the event flag group */ + pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList; + while (pnode != (OS_FLAG_NODE *)0) { /* Ready ALL tasks waiting for flags */ + (void)OS_FlagTaskRdy(pnode, (OS_FLAGS)0); + pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext; + } +#if OS_FLAG_NAME_SIZE > 1 + pgrp->OSFlagName[0] = '?'; /* Unknown name */ + pgrp->OSFlagName[1] = OS_ASCII_NUL; +#endif + pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED; + pgrp->OSFlagWaitList = (void *)OSFlagFreeList;/* Return group to free list */ + pgrp->OSFlagFlags = (OS_FLAGS)0; + OSFlagFreeList = pgrp; + OS_EXIT_CRITICAL(); + if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */ + OS_Sched(); /* Find highest priority task ready to run */ + } + *perr = OS_ERR_NONE; + pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */ + break; + + default: + OS_EXIT_CRITICAL(); + *perr = OS_ERR_INVALID_OPT; + pgrp_return = pgrp; + break; + } + return (pgrp_return); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* GET THE NAME OF AN EVENT FLAG GROUP +* +* Description: This function is used to obtain the name assigned to an event flag group +* +* Arguments : pgrp is a pointer to the event flag group. +* +* pname is a pointer to an ASCII string that will receive the name of the event flag +* group. The string must be able to hold at least OS_FLAG_NAME_SIZE characters. +* +* perr is a pointer to an error code that can contain one of the following values: +* +* OS_ERR_NONE if the requested task is resumed +* OS_ERR_EVENT_TYPE if 'pevent' is not pointing to an event flag group +* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname' +* OS_ERR_FLAG_INVALID_PGRP if you passed a NULL pointer for 'pgrp' +* OS_ERR_NAME_GET_ISR if you called this function from an ISR +* +* Returns : The length of the string or 0 if the 'pgrp' is a NULL pointer. +********************************************************************************************************* +*/ + +#if OS_FLAG_NAME_SIZE > 1 +INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *perr) +{ + INT8U len; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (0); + } + if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */ + *perr = OS_ERR_FLAG_INVALID_PGRP; + return (0); + } + 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 */ + *perr = OS_ERR_NAME_GET_ISR; + return (0); + } + OS_ENTER_CRITICAL(); + if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_EVENT_TYPE; + return (0); + } + len = OS_StrCopy(pname, pgrp->OSFlagName); /* Copy name from OS_FLAG_GRP */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (len); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* ASSIGN A NAME TO AN EVENT FLAG GROUP +* +* Description: This function assigns a name to an event flag group. +* +* Arguments : pgrp is a pointer to the event flag group. +* +* pname is a pointer to an ASCII string that will be used as the name of the event flag +* group. The string must be able to hold at least OS_FLAG_NAME_SIZE characters. +* +* perr is a pointer to an error code that can contain one of the following values: +* +* OS_ERR_NONE if the requested task is resumed +* OS_ERR_EVENT_TYPE if 'pevent' is not pointing to an event flag group +* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname' +* OS_ERR_FLAG_INVALID_PGRP if you passed a NULL pointer for 'pgrp' +* OS_ERR_NAME_SET_ISR if you called this function from an ISR +* +* Returns : None +********************************************************************************************************* +*/ + +#if OS_FLAG_NAME_SIZE > 1 +void OSFlagNameSet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *perr) +{ + INT8U len; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return; + } + if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */ + *perr = OS_ERR_FLAG_INVALID_PGRP; + return; + } + 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 */ + *perr = OS_ERR_NAME_SET_ISR; + return; + } + OS_ENTER_CRITICAL(); + if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_EVENT_TYPE; + return; + } + len = OS_StrLen(pname); /* Can we fit the string in the storage area? */ + if (len > (OS_FLAG_NAME_SIZE - 1)) { /* No */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_FLAG_NAME_TOO_LONG; + return; + } + (void)OS_StrCopy(pgrp->OSFlagName, pname); /* Yes, copy name from OS_FLAG_GRP */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return; +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* WAIT ON AN EVENT FLAG GROUP +* +* Description: This function is called to wait for a combination of bits to be set in an event flag +* group. Your application can wait for ANY bit to be set or ALL bits to be set. +* +* Arguments : pgrp is a pointer to the desired event flag group. +* +* flags Is a bit pattern indicating which bit(s) (i.e. flags) you wish to wait for. +* The bits you want are specified by setting the corresponding bits in +* 'flags'. e.g. if your application wants to wait for bits 0 and 1 then +* 'flags' would contain 0x03. +* +* wait_type specifies whether you want ALL bits to be set or ANY of the bits to be set. +* You can specify the following argument: +* +* OS_FLAG_WAIT_CLR_ALL You will wait for ALL bits in 'mask' to be clear (0) +* OS_FLAG_WAIT_SET_ALL You will wait for ALL bits in 'mask' to be set (1) +* OS_FLAG_WAIT_CLR_ANY You will wait for ANY bit in 'mask' to be clear (0) +* OS_FLAG_WAIT_SET_ANY You will wait for ANY bit in 'mask' to be set (1) +* +* NOTE: Add OS_FLAG_CONSUME if you want the event flag to be 'consumed' by +* the call. Example, to wait for any flag in a group AND then clear +* the flags that are present, set 'wait_type' to: +* +* OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME +* +* timeout is an optional timeout (in clock ticks) that your task will wait for the +* desired bit combination. If you specify 0, however, your task will wait +* forever at the specified event flag group or, until a message arrives. +* +* perr is a pointer to an error code and can be: +* OS_ERR_NONE The desired bits have been set within the specified +* 'timeout'. +* OS_ERR_PEND_ISR If you tried to PEND from an ISR +* OS_ERR_FLAG_INVALID_PGRP If 'pgrp' is a NULL pointer. +* OS_ERR_EVENT_TYPE You are not pointing to an event flag group +* OS_ERR_TIMEOUT The bit(s) have not been set in the specified +* 'timeout'. +* OS_ERR_PEND_ABORT The wait on the flag was aborted. +* OS_ERR_FLAG_WAIT_TYPE You didn't specify a proper 'wait_type' argument. +* +* Returns : The flags in the event flag group that made the task ready or, 0 if a timeout or an error +* occurred. +* +* Called from: Task ONLY +* +* Note(s) : 1) IMPORTANT, the behavior of this function has changed from PREVIOUS versions. The +* function NOW returns the flags that were ready INSTEAD of the current state of the +* event flags. +********************************************************************************************************* +*/ + +OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *perr) +{ + OS_FLAG_NODE node; + 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; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((OS_FLAGS)0); + } + 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 ... */ + *perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */ + return ((OS_FLAGS)0); + } + if (OSLockNesting > 0) { /* See if called with scheduler locked ... */ + *perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */ + return ((OS_FLAGS)0); + } + if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */ + *perr = OS_ERR_EVENT_TYPE; + return ((OS_FLAGS)0); + } + result = (INT8U)(wait_type & OS_FLAG_CONSUME); + if (result != (INT8U)0) { /* See if we need to consume the flags */ + wait_type &= ~(INT8U)OS_FLAG_CONSUME; + consume = OS_TRUE; + } else { + consume = OS_FALSE; + } +/*$PAGE*/ + OS_ENTER_CRITICAL(); + switch (wait_type) { + 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 */ + if (flags_rdy == flags) { /* Must match ALL the bits that we want */ + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */ + } + OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */ + OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */ + *perr = OS_ERR_NONE; + return (flags_rdy); + } else { /* Block task until events occur or timeout */ + OS_FlagBlock(pgrp, &node, flags, wait_type, timeout); + OS_EXIT_CRITICAL(); + } + break; + + case OS_FLAG_WAIT_SET_ANY: + flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */ + if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */ + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */ + } + OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */ + OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */ + *perr = OS_ERR_NONE; + return (flags_rdy); + } else { /* Block task until events occur or timeout */ + OS_FlagBlock(pgrp, &node, flags, wait_type, timeout); + OS_EXIT_CRITICAL(); + } + break; + +#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 */ + if (flags_rdy == flags) { /* Must match ALL the bits that we want */ + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */ + } + OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */ + OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */ + *perr = OS_ERR_NONE; + return (flags_rdy); + } else { /* Block task until events occur or timeout */ + OS_FlagBlock(pgrp, &node, flags, wait_type, timeout); + OS_EXIT_CRITICAL(); + } + break; + + case OS_FLAG_WAIT_CLR_ANY: + flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */ + if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */ + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */ + } + OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */ + OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */ + *perr = OS_ERR_NONE; + return (flags_rdy); + } else { /* Block task until events occur or timeout */ + OS_FlagBlock(pgrp, &node, flags, wait_type, timeout); + OS_EXIT_CRITICAL(); + } + break; +#endif + + default: + OS_EXIT_CRITICAL(); + flags_rdy = (OS_FLAGS)0; + *perr = OS_ERR_FLAG_WAIT_TYPE; + return (flags_rdy); + } +/*$PAGE*/ + OS_Sched(); /* Find next HPT ready to run */ + OS_ENTER_CRITICAL(); + if (OSTCBCur->OSTCBStatPend != OS_STAT_PEND_OK) { /* Have we timed-out or aborted? */ + pend_stat = OSTCBCur->OSTCBStatPend; + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; + OS_FlagUnlink(&node); + OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Yes, make task ready-to-run */ + OS_EXIT_CRITICAL(); + flags_rdy = (OS_FLAGS)0; + switch (pend_stat) { + case OS_STAT_PEND_ABORT: + *perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted waiting */ + break; + + case OS_STAT_PEND_TO: + default: + *perr = OS_ERR_TIMEOUT; /* Indicate that we timed-out waiting */ + break; + } + return (flags_rdy); + } + flags_rdy = OSTCBCur->OSTCBFlagsRdy; + if (consume == OS_TRUE) { /* See if we need to consume the flags */ + switch (wait_type) { + case OS_FLAG_WAIT_SET_ALL: + case OS_FLAG_WAIT_SET_ANY: /* Clear ONLY the flags we got */ + pgrp->OSFlagFlags &= ~flags_rdy; + break; + +#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; + break; +#endif + default: + OS_EXIT_CRITICAL(); + *perr = OS_ERR_FLAG_WAIT_TYPE; + return ((OS_FLAGS)0); + } + } + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; /* Event(s) must have occurred */ + return (flags_rdy); +} +/*$PAGE*/ +/* +********************************************************************************************************* +* GET FLAGS WHO CAUSED TASK TO BECOME READY +* +* Description: This function is called to obtain the flags that caused the task to become ready to run. +* In other words, this function allows you to tell "Who done it!". +* +* Arguments : None +* +* Returns : The flags that caused the task to be ready. +* +* Called from: Task ONLY +********************************************************************************************************* +*/ + +OS_FLAGS OSFlagPendGetFlagsRdy (void) +{ + OS_FLAGS flags; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + OS_ENTER_CRITICAL(); + flags = OSTCBCur->OSTCBFlagsRdy; + OS_EXIT_CRITICAL(); + return (flags); +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* POST EVENT FLAG BIT(S) +* +* Description: This function is called to set or clear some bits in an event flag group. The bits to +* set or clear are specified by a 'bit mask'. +* +* Arguments : pgrp is a pointer to the desired event flag group. +* +* flags If 'opt' (see below) is OS_FLAG_SET, each bit that is set in 'flags' will +* set the corresponding bit in the event flag group. e.g. to set bits 0, 4 +* and 5 you would set 'flags' to: +* +* 0x31 (note, bit 0 is least significant bit) +* +* If 'opt' (see below) is OS_FLAG_CLR, each bit that is set in 'flags' will +* CLEAR the corresponding bit in the event flag group. e.g. to clear bits 0, +* 4 and 5 you would specify 'flags' as: +* +* 0x31 (note, bit 0 is least significant bit) +* +* opt indicates whether the flags will be: +* set (OS_FLAG_SET) or +* cleared (OS_FLAG_CLR) +* +* perr is a pointer to an error code and can be: +* OS_ERR_NONE The call was successfull +* OS_ERR_FLAG_INVALID_PGRP You passed a NULL pointer +* OS_ERR_EVENT_TYPE You are not pointing to an event flag group +* OS_ERR_FLAG_INVALID_OPT You specified an invalid option +* +* Returns : the new value of the event flags bits that are still set. +* +* Called From: Task or ISR +* +* WARNING(s) : 1) The execution time of this function depends on the number of tasks waiting on the event +* flag group. +* 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) +{ + OS_FLAG_NODE *pnode; + 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; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((OS_FLAGS)0); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return ((OS_FLAGS)0); + } +/*$PAGE*/ + OS_ENTER_CRITICAL(); + switch (opt) { + case OS_FLAG_CLR: + pgrp->OSFlagFlags &= ~flags; /* Clear the flags specified in the group */ + break; + + case OS_FLAG_SET: + pgrp->OSFlagFlags |= flags; /* Set the flags specified in the group */ + break; + + default: + OS_EXIT_CRITICAL(); /* INVALID option */ + *perr = OS_ERR_FLAG_INVALID_OPT; + return ((OS_FLAGS)0); + } + sched = OS_FALSE; /* Indicate that we don't need rescheduling */ + pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList; + while (pnode != (OS_FLAG_NODE *)0) { /* Go through all tasks waiting on event flag(s) */ + switch (pnode->OSFlagNodeWaitType) { + case OS_FLAG_WAIT_SET_ALL: /* See if all req. flags are set for current node */ + flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & pnode->OSFlagNodeFlags); + if (flags_rdy == pnode->OSFlagNodeFlags) { + rdy = OS_FlagTaskRdy(pnode, flags_rdy); /* Make task RTR, event(s) Rx'd */ + if (rdy == OS_TRUE) { + sched = OS_TRUE; /* When done we will reschedule */ + } + } + break; + + case OS_FLAG_WAIT_SET_ANY: /* See if any flag set */ + flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & pnode->OSFlagNodeFlags); + if (flags_rdy != (OS_FLAGS)0) { + rdy = OS_FlagTaskRdy(pnode, flags_rdy); /* Make task RTR, event(s) Rx'd */ + if (rdy == OS_TRUE) { + sched = OS_TRUE; /* When done we will reschedule */ + } + } + break; + +#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); + if (flags_rdy == pnode->OSFlagNodeFlags) { + rdy = OS_FlagTaskRdy(pnode, flags_rdy); /* Make task RTR, event(s) Rx'd */ + if (rdy == OS_TRUE) { + sched = OS_TRUE; /* When done we will reschedule */ + } + } + break; + + case OS_FLAG_WAIT_CLR_ANY: /* See if any flag set */ + flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & pnode->OSFlagNodeFlags); + if (flags_rdy != (OS_FLAGS)0) { + rdy = OS_FlagTaskRdy(pnode, flags_rdy); /* Make task RTR, event(s) Rx'd */ + if (rdy == OS_TRUE) { + sched = OS_TRUE; /* When done we will reschedule */ + } + } + break; +#endif + default: + OS_EXIT_CRITICAL(); + *perr = OS_ERR_FLAG_WAIT_TYPE; + return ((OS_FLAGS)0); + } + pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext; /* Point to next task waiting for event flag(s) */ + } + OS_EXIT_CRITICAL(); + if (sched == OS_TRUE) { + OS_Sched(); + } + OS_ENTER_CRITICAL(); + flags_cur = pgrp->OSFlagFlags; + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (flags_cur); +} +/*$PAGE*/ +/* +********************************************************************************************************* +* QUERY EVENT FLAG +* +* Description: This function is used to check the value of the event flag group. +* +* Arguments : pgrp is a pointer to the desired event flag group. +* +* perr is a pointer to an error code returned to the called: +* OS_ERR_NONE The call was successfull +* OS_ERR_FLAG_INVALID_PGRP You passed a NULL pointer +* OS_ERR_EVENT_TYPE You are not pointing to an event flag group +* +* Returns : The current value of the event flag group. +* +* Called From: Task or ISR +********************************************************************************************************* +*/ + +#if OS_FLAG_QUERY_EN > 0 +OS_FLAGS OSFlagQuery (OS_FLAG_GRP *pgrp, INT8U *perr) +{ + OS_FLAGS flags; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((OS_FLAGS)0); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return ((OS_FLAGS)0); + } + OS_ENTER_CRITICAL(); + flags = pgrp->OSFlagFlags; + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (flags); /* Return the current value of the event flags */ +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* SUSPEND TASK UNTIL EVENT FLAG(s) RECEIVED OR TIMEOUT OCCURS +* +* Description: This function is internal to uC/OS-II and is used to put a task to sleep until the desired +* event flag bit(s) are set. +* +* Arguments : pgrp is a pointer to the desired event flag group. +* +* pnode is a pointer to a structure which contains data about the task waiting for +* event flag bit(s) to be set. +* +* flags Is a bit pattern indicating which bit(s) (i.e. flags) you wish to check. +* The bits you want are specified by setting the corresponding bits in +* 'flags'. e.g. if your application wants to wait for bits 0 and 1 then +* 'flags' would contain 0x03. +* +* wait_type specifies whether you want ALL bits to be set/cleared or ANY of the bits +* to be set/cleared. +* You can specify the following argument: +* +* OS_FLAG_WAIT_CLR_ALL You will check ALL bits in 'mask' to be clear (0) +* OS_FLAG_WAIT_CLR_ANY You will check ANY bit in 'mask' to be clear (0) +* OS_FLAG_WAIT_SET_ALL You will check ALL bits in 'mask' to be set (1) +* OS_FLAG_WAIT_SET_ANY You will check ANY bit in 'mask' to be set (1) +* +* timeout is the desired amount of time that the task will wait for the event flag +* bit(s) to be set. +* +* Returns : none +* +* Called by : OSFlagPend() OS_FLAG.C +* +* 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) +{ + OS_FLAG_NODE *pnode_next; + INT8U y; + + + OSTCBCur->OSTCBStat |= OS_STAT_FLAG; + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; + OSTCBCur->OSTCBDly = timeout; /* Store timeout in task's TCB */ +#if OS_TASK_DEL_EN > 0 + OSTCBCur->OSTCBFlagNode = pnode; /* TCB to link to node */ +#endif + pnode->OSFlagNodeFlags = flags; /* Save the flags that we need to wait for */ + pnode->OSFlagNodeWaitType = wait_type; /* Save the type of wait we are doing */ + pnode->OSFlagNodeTCB = (void *)OSTCBCur; /* Link to task's TCB */ + pnode->OSFlagNodeNext = pgrp->OSFlagWaitList; /* Add node at beginning of event flag wait list */ + pnode->OSFlagNodePrev = (void *)0; + pnode->OSFlagNodeFlagGrp = (void *)pgrp; /* Link to Event Flag Group */ + pnode_next = (OS_FLAG_NODE *)pgrp->OSFlagWaitList; + if (pnode_next != (void *)0) { /* Is this the first NODE to insert? */ + pnode_next->OSFlagNodePrev = pnode; /* No, link in doubly linked list */ + } + pgrp->OSFlagWaitList = (void *)pnode; + + y = OSTCBCur->OSTCBY; /* Suspend current task until flag(s) received */ + OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX; + if (OSRdyTbl[y] == 0x00) { + OSRdyGrp &= ~OSTCBCur->OSTCBBitY; + } +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZE THE EVENT FLAG MODULE +* +* Description: This function is called by uC/OS-II to initialize the event flag module. Your application +* MUST NOT call this function. In other words, this function is internal to uC/OS-II. +* +* Arguments : none +* +* Returns : none +* +* WARNING : You MUST NOT call this function from your code. This is an INTERNAL function to uC/OS-II. +********************************************************************************************************* +*/ + +void OS_FlagInit (void) +{ +#if OS_MAX_FLAGS == 1 + OSFlagFreeList = (OS_FLAG_GRP *)&OSFlagTbl[0]; /* Only ONE event flag group! */ + OSFlagFreeList->OSFlagType = OS_EVENT_TYPE_UNUSED; + OSFlagFreeList->OSFlagWaitList = (void *)0; + OSFlagFreeList->OSFlagFlags = (OS_FLAGS)0; +#if OS_FLAG_NAME_SIZE > 1 + OSFlagFreeList->OSFlagName[0] = '?'; + OSFlagFreeList->OSFlagName[1] = OS_ASCII_NUL; +#endif +#endif + +#if OS_MAX_FLAGS >= 2 + INT16U i; + OS_FLAG_GRP *pgrp1; + OS_FLAG_GRP *pgrp2; + + + OS_MemClr((INT8U *)&OSFlagTbl[0], sizeof(OSFlagTbl)); /* Clear the flag group table */ + pgrp1 = &OSFlagTbl[0]; + pgrp2 = &OSFlagTbl[1]; + for (i = 0; i < (OS_MAX_FLAGS - 1); i++) { /* Init. list of free EVENT FLAGS */ + pgrp1->OSFlagType = OS_EVENT_TYPE_UNUSED; + pgrp1->OSFlagWaitList = (void *)pgrp2; +#if OS_FLAG_NAME_SIZE > 1 + pgrp1->OSFlagName[0] = '?'; /* Unknown name */ + pgrp1->OSFlagName[1] = OS_ASCII_NUL; +#endif + pgrp1++; + pgrp2++; + } + pgrp1->OSFlagType = OS_EVENT_TYPE_UNUSED; + pgrp1->OSFlagWaitList = (void *)0; +#if OS_FLAG_NAME_SIZE > 1 + pgrp1->OSFlagName[0] = '?'; /* Unknown name */ + pgrp1->OSFlagName[1] = OS_ASCII_NUL; +#endif + OSFlagFreeList = &OSFlagTbl[0]; +#endif +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* MAKE TASK READY-TO-RUN, EVENT(s) OCCURRED +* +* Description: This function is internal to uC/OS-II and is used to make a task ready-to-run because the +* desired event flag bits have been set. +* +* Arguments : pnode is a pointer to a structure which contains data about the task waiting for +* event flag bit(s) to be set. +* +* flags_rdy contains the bit pattern of the event flags that cause the task to become +* ready-to-run. +* +* Returns : OS_TRUE If the task has been placed in the ready list and thus needs scheduling +* OS_FALSE The task is still not ready to run and thus scheduling is not necessary +* +* Called by : OSFlagsPost() OS_FLAG.C +* +* Note(s) : 1) This function assumes that interrupts are disabled. +* 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) +{ + OS_TCB *ptcb; + BOOLEAN sched; + + + ptcb = (OS_TCB *)pnode->OSFlagNodeTCB; /* Point to TCB of waiting task */ + ptcb->OSTCBDly = 0; + ptcb->OSTCBFlagsRdy = flags_rdy; + ptcb->OSTCBStat &= ~(INT8U)OS_STAT_FLAG; + ptcb->OSTCBStatPend = OS_STAT_PEND_OK; + if (ptcb->OSTCBStat == OS_STAT_RDY) { /* Task now ready? */ + OSRdyGrp |= ptcb->OSTCBBitY; /* Put task into ready list */ + OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; + sched = OS_TRUE; + } else { + sched = OS_FALSE; + } + OS_FlagUnlink(pnode); + return (sched); +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* UNLINK EVENT FLAG NODE FROM WAITING LIST +* +* Description: This function is internal to uC/OS-II and is used to unlink an event flag node from a +* list of tasks waiting for the event flag. +* +* Arguments : pnode is a pointer to a structure which contains data about the task waiting for +* event flag bit(s) to be set. +* +* Returns : none +* +* Called by : OS_FlagTaskRdy() OS_FLAG.C +* OSFlagPend() OS_FLAG.C +* OSTaskDel() OS_TASK.C +* +* Note(s) : 1) This function assumes that interrupts are disabled. +* 2) This function is INTERNAL to uC/OS-II and your application should not call it. +********************************************************************************************************* +*/ + +void OS_FlagUnlink (OS_FLAG_NODE *pnode) +{ +#if OS_TASK_DEL_EN > 0 + OS_TCB *ptcb; +#endif + OS_FLAG_GRP *pgrp; + OS_FLAG_NODE *pnode_prev; + OS_FLAG_NODE *pnode_next; + + + pnode_prev = (OS_FLAG_NODE *)pnode->OSFlagNodePrev; + pnode_next = (OS_FLAG_NODE *)pnode->OSFlagNodeNext; + if (pnode_prev == (OS_FLAG_NODE *)0) { /* Is it first node in wait list? */ + pgrp = (OS_FLAG_GRP *)pnode->OSFlagNodeFlagGrp; + pgrp->OSFlagWaitList = (void *)pnode_next; /* Update list for new 1st node */ + if (pnode_next != (OS_FLAG_NODE *)0) { + pnode_next->OSFlagNodePrev = (OS_FLAG_NODE *)0; /* Link new 1st node PREV to NULL */ + } + } else { /* No, A node somewhere in the list */ + pnode_prev->OSFlagNodeNext = pnode_next; /* Link around the node to unlink */ + if (pnode_next != (OS_FLAG_NODE *)0) { /* Was this the LAST node? */ + pnode_next->OSFlagNodePrev = pnode_prev; /* No, Link around current node */ + } + } +#if OS_TASK_DEL_EN > 0 + ptcb = (OS_TCB *)pnode->OSFlagNodeTCB; + ptcb->OSTCBFlagNode = (OS_FLAG_NODE *)0; +#endif +} +#endif diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mbox.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mbox.c new file mode 100644 index 0000000..0ee0c51 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mbox.c @@ -0,0 +1,629 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* MESSAGE MAILBOX MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_MBOX.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#include +#endif + +#if OS_MBOX_EN > 0 +/* +********************************************************************************************************* +* ACCEPT MESSAGE FROM MAILBOX +* +* Description: This function checks the mailbox to see if a message is available. Unlike OSMboxPend(), +* OSMboxAccept() does not suspend the calling task if a message is not available. +* +* Arguments : pevent is a pointer to the event control block +* +* Returns : != (void *)0 is the message in the mailbox if one is available. The mailbox is cleared +* so the next time OSMboxAccept() is called, the mailbox will be empty. +* == (void *)0 if the mailbox is empty or, +* if 'pevent' is a NULL pointer or, +* if you didn't pass the proper event pointer. +********************************************************************************************************* +*/ + +#if OS_MBOX_ACCEPT_EN > 0 +void *OSMboxAccept (OS_EVENT *pevent) +{ + void *pmsg; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + return ((void *)0); + } +#endif + if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */ + return ((void *)0); + } + OS_ENTER_CRITICAL(); + pmsg = pevent->OSEventPtr; + pevent->OSEventPtr = (void *)0; /* Clear the mailbox */ + OS_EXIT_CRITICAL(); + return (pmsg); /* Return the message received (or NULL) */ +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* CREATE A MESSAGE MAILBOX +* +* Description: This function creates a message mailbox if free event control blocks are available. +* +* Arguments : pmsg is a pointer to a message that you wish to deposit in the mailbox. If +* you set this value to the NULL pointer (i.e. (void *)0) then the mailbox +* will be considered empty. +* +* Returns : != (OS_EVENT *)0 is a pointer to the event control clock (OS_EVENT) associated with the +* created mailbox +* == (OS_EVENT *)0 if no event control blocks were available +********************************************************************************************************* +*/ + +OS_EVENT *OSMboxCreate (void *pmsg) +{ + OS_EVENT *pevent; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSIntNesting > 0) { /* See if called from ISR ... */ + return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */ + } + OS_ENTER_CRITICAL(); + pevent = OSEventFreeList; /* Get next free event control block */ + if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */ + OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr; + } + OS_EXIT_CRITICAL(); + if (pevent != (OS_EVENT *)0) { + pevent->OSEventType = OS_EVENT_TYPE_MBOX; + pevent->OSEventCnt = 0; + pevent->OSEventPtr = pmsg; /* Deposit message in event control block */ +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + OS_EventWaitListInit(pevent); + } + return (pevent); /* Return pointer to event control block */ +} +/*$PAGE*/ +/* +********************************************************************************************************* +* DELETE A MAIBOX +* +* Description: This function deletes a mailbox and readies all tasks pending on the mailbox. +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* mailbox. +* +* opt determines delete options as follows: +* opt == OS_DEL_NO_PEND Delete the mailbox ONLY if no task pending +* opt == OS_DEL_ALWAYS Deletes the mailbox even if tasks are waiting. +* In this case, all the tasks pending will be readied. +* +* perr is a pointer to an error code that can contain one of the following values: +* OS_ERR_NONE The call was successful and the mailbox was deleted +* OS_ERR_DEL_ISR If you attempted to delete the mailbox from an ISR +* OS_ERR_INVALID_OPT An invalid option was specified +* OS_ERR_TASK_WAITING One or more tasks were waiting on the mailbox +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a mailbox +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* +* Returns : pevent upon error +* (OS_EVENT *)0 if the mailbox was successfully deleted. +* +* Note(s) : 1) This function must be used with care. Tasks that would normally expect the presence of +* the mailbox MUST check the return code of OSMboxPend(). +* 2) OSMboxAccept() callers will not know that the intended mailbox has been deleted! +* 3) This call can potentially disable interrupts for a long time. The interrupt disable +* time is directly proportional to the number of tasks waiting on the mailbox. +* 4) Because ALL tasks pending on the mailbox will be readied, you MUST be careful in +* applications where the mailbox is used for mutual exclusion because the resource(s) +* will no longer be guarded by the mailbox. +********************************************************************************************************* +*/ + +#if OS_MBOX_DEL_EN > 0 +OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *perr) +{ + BOOLEAN tasks_waiting; + OS_EVENT *pevent_return; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (pevent); + } + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + *perr = OS_ERR_PEVENT_NULL; + return (pevent); + } +#endif + if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */ + *perr = OS_ERR_EVENT_TYPE; + return (pevent); + } + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */ + return (pevent); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on mailbox */ + tasks_waiting = OS_TRUE; /* Yes */ + } else { + tasks_waiting = OS_FALSE; /* No */ + } + switch (opt) { + case OS_DEL_NO_PEND: /* Delete mailbox only if no task waiting */ + if (tasks_waiting == OS_FALSE) { +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + pevent->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */ + pevent->OSEventCnt = 0; + OSEventFreeList = pevent; /* Get next free event control block */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + pevent_return = (OS_EVENT *)0; /* Mailbox has been deleted */ + } else { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_TASK_WAITING; + pevent_return = pevent; + } + break; + + case OS_DEL_ALWAYS: /* Always delete the mailbox */ + while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for mailbox */ + (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX, OS_STAT_PEND_OK); + } +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + pevent->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */ + pevent->OSEventCnt = 0; + OSEventFreeList = pevent; /* Get next free event control block */ + OS_EXIT_CRITICAL(); + if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */ + OS_Sched(); /* Find highest priority task ready to run */ + } + *perr = OS_ERR_NONE; + pevent_return = (OS_EVENT *)0; /* Mailbox has been deleted */ + break; + + default: + OS_EXIT_CRITICAL(); + *perr = OS_ERR_INVALID_OPT; + pevent_return = pevent; + break; + } + return (pevent_return); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* PEND ON MAILBOX FOR A MESSAGE +* +* Description: This function waits for a message to be sent to a mailbox +* +* Arguments : pevent is a pointer to the event control block associated with the desired mailbox +* +* timeout is an optional timeout period (in clock ticks). If non-zero, your task will +* wait for a message to arrive at the mailbox up to the amount of time +* specified by this argument. If you specify 0, however, your task will wait +* forever at the specified mailbox or, until a message arrives. +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* +* OS_ERR_NONE The call was successful and your task received a +* message. +* OS_ERR_TIMEOUT A message was not received within the specified 'timeout'. +* OS_ERR_PEND_ABORT The wait on the mailbox was aborted. +* OS_ERR_EVENT_TYPE Invalid event type +* OS_ERR_PEND_ISR If you called this function from an ISR and the result +* would lead to a suspension. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* OS_ERR_PEND_LOCKED If you called this function when the scheduler is locked +* +* Returns : != (void *)0 is a pointer to the message received +* == (void *)0 if no message was received or, +* if 'pevent' is a NULL pointer or, +* if you didn't pass the proper pointer to the event control block. +********************************************************************************************************* +*/ +/*$PAGE*/ +void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr) +{ + void *pmsg; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((void *)0); + } + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + *perr = OS_ERR_PEVENT_NULL; + return ((void *)0); + } +#endif + if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */ + *perr = OS_ERR_EVENT_TYPE; + return ((void *)0); + } + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */ + return ((void *)0); + } + if (OSLockNesting > 0) { /* See if called with scheduler locked ... */ + *perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */ + return ((void *)0); + } + OS_ENTER_CRITICAL(); + pmsg = pevent->OSEventPtr; + if (pmsg != (void *)0) { /* See if there is already a message */ + pevent->OSEventPtr = (void *)0; /* Clear the mailbox */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (pmsg); /* Return the message received (or NULL) */ + } + OSTCBCur->OSTCBStat |= OS_STAT_MBOX; /* Message not available, task will pend */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; + OSTCBCur->OSTCBDly = timeout; /* Load timeout in TCB */ + OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */ + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find next highest priority task ready to run */ + OS_ENTER_CRITICAL(); + switch (OSTCBCur->OSTCBStatPend) { /* See if we timed-out or aborted */ + case OS_STAT_PEND_OK: + pmsg = OSTCBCur->OSTCBMsg; + *perr = OS_ERR_NONE; + break; + + case OS_STAT_PEND_ABORT: + pmsg = (void *)0; + *perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted */ + break; + + case OS_STAT_PEND_TO: + default: + OS_EventTaskRemove(OSTCBCur, pevent); + pmsg = (void *)0; + *perr = OS_ERR_TIMEOUT; /* Indicate that we didn't get event within TO */ + break; + } + OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */ + OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */ +#if (OS_EVENT_MULTI_EN > 0) + OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0; +#endif + OSTCBCur->OSTCBMsg = (void *)0; /* Clear received message */ + OS_EXIT_CRITICAL(); + return (pmsg); /* Return received message */ +} +/*$PAGE*/ +/* +********************************************************************************************************* +* ABORT WAITING ON A MESSAGE MAILBOX +* +* Description: This function aborts & readies any tasks currently waiting on a mailbox. This function +* should be used to fault-abort the wait on the mailbox, rather than to normally signal +* the mailbox via OSMboxPost() or OSMboxPostOpt(). +* +* Arguments : pevent is a pointer to the event control block associated with the desired mailbox. +* +* opt determines the type of ABORT performed: +* OS_PEND_OPT_NONE ABORT wait for a single task (HPT) waiting on the +* mailbox +* OS_PEND_OPT_BROADCAST ABORT wait for ALL tasks that are waiting on the +* mailbox +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* +* OS_ERR_NONE No tasks were waiting on the mailbox. +* OS_ERR_PEND_ABORT At least one task waiting on the mailbox was readied +* and informed of the aborted wait; check return value +* for the number of tasks whose wait on the mailbox +* was aborted. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a mailbox. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* +* Returns : == 0 if no tasks were waiting on the mailbox, or upon error. +* > 0 if one or more tasks waiting on the mailbox are now readied and informed. +********************************************************************************************************* +*/ + +#if OS_MBOX_PEND_ABORT_EN > 0 +INT8U OSMboxPendAbort (OS_EVENT *pevent, INT8U opt, INT8U *perr) +{ + INT8U nbr_tasks; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (0); + } + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + *perr = OS_ERR_PEVENT_NULL; + return (0); + } +#endif + if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */ + *perr = OS_ERR_EVENT_TYPE; + return (0); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any task waiting on mailbox? */ + nbr_tasks = 0; + switch (opt) { + case OS_PEND_OPT_BROADCAST: /* Do we need to abort ALL waiting tasks? */ + while (pevent->OSEventGrp != 0) { /* Yes, ready ALL tasks waiting on mailbox */ + (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX, OS_STAT_PEND_ABORT); + nbr_tasks++; + } + break; + + case OS_PEND_OPT_NONE: + default: /* No, ready HPT waiting on mailbox */ + (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX, OS_STAT_PEND_ABORT); + nbr_tasks++; + break; + } + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find HPT ready to run */ + *perr = OS_ERR_PEND_ABORT; + return (nbr_tasks); + } + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (0); /* No tasks waiting on mailbox */ +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* POST MESSAGE TO A MAILBOX +* +* Description: This function sends a message to a mailbox +* +* Arguments : pevent is a pointer to the event control block associated with the desired mailbox +* +* pmsg is a pointer to the message to send. You MUST NOT send a NULL pointer. +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_MBOX_FULL If the mailbox already contains a message. You can can only send one +* message at a time and thus, the message MUST be consumed before you +* are allowed to send another one. +* OS_ERR_EVENT_TYPE If you are attempting to post to a non mailbox. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* OS_ERR_POST_NULL_PTR If you are attempting to post a NULL pointer +* +* Note(s) : 1) HPT means Highest Priority Task +********************************************************************************************************* +*/ + +#if OS_MBOX_POST_EN > 0 +INT8U OSMboxPost (OS_EVENT *pevent, void *pmsg) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + return (OS_ERR_PEVENT_NULL); + } + if (pmsg == (void *)0) { /* Make sure we are not posting a NULL pointer */ + return (OS_ERR_POST_NULL_PTR); + } +#endif + if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any task pending on mailbox */ + /* Ready HPT waiting on event */ + (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK); + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find highest priority task ready to run */ + return (OS_ERR_NONE); + } + if (pevent->OSEventPtr != (void *)0) { /* Make sure mailbox doesn't already have a msg */ + OS_EXIT_CRITICAL(); + return (OS_ERR_MBOX_FULL); + } + pevent->OSEventPtr = pmsg; /* Place message in mailbox */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* POST MESSAGE TO A MAILBOX +* +* Description: This function sends a message to a mailbox +* +* Arguments : pevent is a pointer to the event control block associated with the desired mailbox +* +* pmsg is a pointer to the message to send. You MUST NOT send a NULL pointer. +* +* opt determines the type of POST performed: +* OS_POST_OPT_NONE POST to a single waiting task +* (Identical to OSMboxPost()) +* OS_POST_OPT_BROADCAST POST to ALL tasks that are waiting on the mailbox +* +* OS_POST_OPT_NO_SCHED Indicates that the scheduler will NOT be invoked +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_MBOX_FULL If the mailbox already contains a message. You can can only send one +* message at a time and thus, the message MUST be consumed before you +* are allowed to send another one. +* OS_ERR_EVENT_TYPE If you are attempting to post to a non mailbox. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* OS_ERR_POST_NULL_PTR If you are attempting to post a NULL pointer +* +* Note(s) : 1) HPT means Highest Priority Task +* +* Warning : Interrupts can be disabled for a long time if you do a 'broadcast'. In fact, the +* interrupt disable time is proportional to the number of tasks waiting on the mailbox. +********************************************************************************************************* +*/ + +#if OS_MBOX_POST_OPT_EN > 0 +INT8U OSMboxPostOpt (OS_EVENT *pevent, void *pmsg, INT8U opt) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + return (OS_ERR_PEVENT_NULL); + } + if (pmsg == (void *)0) { /* Make sure we are not posting a NULL pointer */ + return (OS_ERR_POST_NULL_PTR); + } +#endif + if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any task pending on mailbox */ + if ((opt & OS_POST_OPT_BROADCAST) != 0x00) { /* Do we need to post msg to ALL waiting tasks ? */ + while (pevent->OSEventGrp != 0) { /* Yes, Post to ALL tasks waiting on mailbox */ + (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK); + } + } else { /* No, Post to HPT waiting on mbox */ + (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_MBOX, OS_STAT_PEND_OK); + } + OS_EXIT_CRITICAL(); + if ((opt & OS_POST_OPT_NO_SCHED) == 0) { /* See if scheduler needs to be invoked */ + OS_Sched(); /* Find HPT ready to run */ + } + return (OS_ERR_NONE); + } + if (pevent->OSEventPtr != (void *)0) { /* Make sure mailbox doesn't already have a msg */ + OS_EXIT_CRITICAL(); + return (OS_ERR_MBOX_FULL); + } + pevent->OSEventPtr = pmsg; /* Place message in mailbox */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* QUERY A MESSAGE MAILBOX +* +* Description: This function obtains information about a message mailbox. +* +* Arguments : pevent is a pointer to the event control block associated with the desired mailbox +* +* p_mbox_data is a pointer to a structure that will contain information about the message +* mailbox. +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non mailbox. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* OS_ERR_PDATA_NULL If 'p_mbox_data' is a NULL pointer +********************************************************************************************************* +*/ + +#if OS_MBOX_QUERY_EN > 0 +INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data) +{ + INT8U i; +#if OS_LOWEST_PRIO <= 63 + INT8U *psrc; + INT8U *pdest; +#else + INT16U *psrc; + INT16U *pdest; +#endif +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + return (OS_ERR_PEVENT_NULL); + } + if (p_mbox_data == (OS_MBOX_DATA *)0) { /* Validate 'p_mbox_data' */ + return (OS_ERR_PDATA_NULL); + } +#endif + if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + p_mbox_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */ + psrc = &pevent->OSEventTbl[0]; + pdest = &p_mbox_data->OSEventTbl[0]; + for (i = 0; i < OS_EVENT_TBL_SIZE; i++) { + *pdest++ = *psrc++; + } + p_mbox_data->OSMsg = pevent->OSEventPtr; /* Get message from mailbox */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif /* OS_MBOX_QUERY_EN */ +#endif /* OS_MBOX_EN */ diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mem.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mem.c new file mode 100644 index 0000000..72c8b84 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mem.c @@ -0,0 +1,434 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* MEMORY MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_MEM.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#include +#endif + +#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0) +/* +********************************************************************************************************* +* CREATE A MEMORY PARTITION +* +* Description : Create a fixed-sized memory partition that will be managed by uC/OS-II. +* +* Arguments : addr is the starting address of the memory partition +* +* nblks is the number of memory blocks to create from the partition. +* +* blksize is the size (in bytes) of each block in the memory partition. +* +* perr is a pointer to a variable containing an error message which will be set by +* this function to either: +* +* OS_ERR_NONE if the memory partition has been created correctly. +* OS_ERR_MEM_INVALID_ADDR if you are specifying an invalid address for the memory +* storage of the partition or, the block does not align +* on a pointer boundary +* OS_ERR_MEM_INVALID_PART no free partitions available +* OS_ERR_MEM_INVALID_BLKS user specified an invalid number of blocks (must be >= 2) +* OS_ERR_MEM_INVALID_SIZE user specified an invalid block size +* - must be greater than the size of a pointer +* - must be able to hold an integral number of pointers +* Returns : != (OS_MEM *)0 is the partition was created +* == (OS_MEM *)0 if the partition was not created because of invalid arguments or, no +* free partition is available. +********************************************************************************************************* +*/ + +OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *perr) +{ + 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; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((OS_MEM *)0); + } + if (addr == (void *)0) { /* Must pass a valid address for the memory part.*/ + *perr = OS_ERR_MEM_INVALID_ADDR; + return ((OS_MEM *)0); + } + if (((INT32U)addr & (sizeof(void *) - 1)) != 0){ /* Must be pointer size aligned */ + *perr = OS_ERR_MEM_INVALID_ADDR; + return ((OS_MEM *)0); + } + if (nblks < 2) { /* Must have at least 2 blocks per partition */ + *perr = OS_ERR_MEM_INVALID_BLKS; + return ((OS_MEM *)0); + } + 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(); + pmem = OSMemFreeList; /* Get next free memory partition */ + if (OSMemFreeList != (OS_MEM *)0) { /* See if pool of free partitions was empty */ + OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList; + } + OS_EXIT_CRITICAL(); + if (pmem == (OS_MEM *)0) { /* See if we have a memory partition */ + *perr = OS_ERR_MEM_INVALID_PART; + return ((OS_MEM *)0); + } + plink = (void **)addr; /* Create linked list of free memory blocks */ + pblk = (INT8U *)((INT32U)addr + blksize); + for (i = 0; i < (nblks - 1); i++) { + *plink = (void *)pblk; /* Save pointer to NEXT block in CURRENT block */ + plink = (void **)pblk; /* Position to NEXT block */ + pblk = (INT8U *)((INT32U)pblk + blksize); /* Point to the FOLLOWING block */ + } + *plink = (void *)0; /* Last memory block points to NULL */ + pmem->OSMemAddr = addr; /* Store start address of memory partition */ + pmem->OSMemFreeList = addr; /* Initialize pointer to pool of free blocks */ + pmem->OSMemNFree = nblks; /* Store number of free blocks in MCB */ + pmem->OSMemNBlks = nblks; + pmem->OSMemBlkSize = blksize; /* Store block size of each memory blocks */ + *perr = OS_ERR_NONE; + return (pmem); +} +/*$PAGE*/ +/* +********************************************************************************************************* +* GET A MEMORY BLOCK +* +* Description : Get a memory block from a partition +* +* Arguments : pmem is a pointer to the memory partition control block +* +* perr is a pointer to a variable containing an error message which will be set by this +* function to either: +* +* OS_ERR_NONE if the memory partition has been created correctly. +* OS_ERR_MEM_NO_FREE_BLKS if there are no more free memory blocks to allocate to caller +* OS_ERR_MEM_INVALID_PMEM if you passed a NULL pointer for 'pmem' +* +* Returns : A pointer to a memory block if no error is detected +* A pointer to NULL if an error is detected +********************************************************************************************************* +*/ + +void *OSMemGet (OS_MEM *pmem, INT8U *perr) +{ + void *pblk; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((void *)0); + } + 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(); + if (pmem->OSMemNFree > 0) { /* See if there are any free memory blocks */ + pblk = pmem->OSMemFreeList; /* Yes, point to next free memory block */ + pmem->OSMemFreeList = *(void **)pblk; /* Adjust pointer to new free list */ + pmem->OSMemNFree--; /* One less memory block in this partition */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; /* No error */ + return (pblk); /* Return memory block to caller */ + } + OS_EXIT_CRITICAL(); + *perr = OS_ERR_MEM_NO_FREE_BLKS; /* No, Notify caller of empty memory partition */ + return ((void *)0); /* Return NULL pointer to caller */ +} +/*$PAGE*/ +/* +********************************************************************************************************* +* GET THE NAME OF A MEMORY PARTITION +* +* Description: This function is used to obtain the name assigned to a memory partition. +* +* Arguments : pmem is a pointer to the memory partition +* +* pname is a pointer to an ASCII string that will receive the name of the memory partition. +* +* perr is a pointer to an error code that can contain one of the following values: +* +* OS_ERR_NONE if the name was copied to 'pname' +* OS_ERR_MEM_INVALID_PMEM if you passed a NULL pointer for 'pmem' +* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname' +* OS_ERR_NAME_GET_ISR You called this function from an ISR +* +* Returns : The length of the string or 0 if 'pmem' is a NULL pointer. +********************************************************************************************************* +*/ + +#if OS_MEM_NAME_SIZE > 1 +INT8U OSMemNameGet (OS_MEM *pmem, INT8U *pname, INT8U *perr) +{ + INT8U len; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (0); + } + if (pmem == (OS_MEM *)0) { /* Is 'pmem' a NULL pointer? */ + *perr = OS_ERR_MEM_INVALID_PMEM; + return (0); + } + 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 */ + *perr = OS_ERR_NAME_GET_ISR; + return (0); + } + OS_ENTER_CRITICAL(); + len = OS_StrCopy(pname, pmem->OSMemName); /* Copy name from OS_MEM */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (len); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* ASSIGN A NAME TO A MEMORY PARTITION +* +* Description: This function assigns a name to a memory partition. +* +* Arguments : pmem is a pointer to the memory partition +* +* pname is a pointer to an ASCII string that contains the name of the memory partition. +* +* perr is a pointer to an error code that can contain one of the following values: +* +* OS_ERR_NONE if the name was copied to 'pname' +* OS_ERR_MEM_INVALID_PMEM if you passed a NULL pointer for 'pmem' +* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname' +* OS_ERR_MEM_NAME_TOO_LONG if the name doesn't fit in the storage area +* OS_ERR_NAME_SET_ISR if you called this function from an ISR +* +* Returns : None +********************************************************************************************************* +*/ + +#if OS_MEM_NAME_SIZE > 1 +void OSMemNameSet (OS_MEM *pmem, INT8U *pname, INT8U *perr) +{ + INT8U len; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return; + } + if (pmem == (OS_MEM *)0) { /* Is 'pmem' a NULL pointer? */ + *perr = OS_ERR_MEM_INVALID_PMEM; + return; + } + 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 */ + *perr = OS_ERR_NAME_SET_ISR; + return; + } + OS_ENTER_CRITICAL(); + len = OS_StrLen(pname); /* Can we fit the string in the storage area? */ + if (len > (OS_MEM_NAME_SIZE - 1)) { /* No */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_MEM_NAME_TOO_LONG; + return; + } + (void)OS_StrCopy(pmem->OSMemName, pname); /* Yes, copy name to the memory partition header */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* RELEASE A MEMORY BLOCK +* +* Description : Returns a memory block to a partition +* +* Arguments : pmem is a pointer to the memory partition control block +* +* pblk is a pointer to the memory block being released. +* +* Returns : OS_ERR_NONE if the memory block was inserted into the partition +* OS_ERR_MEM_FULL if you are returning a memory block to an already FULL memory +* partition (You freed more blocks than you allocated!) +* OS_ERR_MEM_INVALID_PMEM if you passed a NULL pointer for 'pmem' +* OS_ERR_MEM_INVALID_PBLK if you passed a NULL pointer for the block to release. +********************************************************************************************************* +*/ + +INT8U OSMemPut (OS_MEM *pmem, void *pblk) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pmem == (OS_MEM *)0) { /* Must point to a valid memory partition */ + return (OS_ERR_MEM_INVALID_PMEM); + } + if (pblk == (void *)0) { /* Must release a valid block */ + return (OS_ERR_MEM_INVALID_PBLK); + } +#endif + OS_ENTER_CRITICAL(); + if (pmem->OSMemNFree >= pmem->OSMemNBlks) { /* Make sure all blocks not already returned */ + OS_EXIT_CRITICAL(); + return (OS_ERR_MEM_FULL); + } + *(void **)pblk = pmem->OSMemFreeList; /* Insert released block into free block list */ + pmem->OSMemFreeList = pblk; + pmem->OSMemNFree++; /* One more memory block in this partition */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); /* Notify caller that memory block was released */ +} +/*$PAGE*/ +/* +********************************************************************************************************* +* QUERY MEMORY PARTITION +* +* Description : This function is used to determine the number of free memory blocks and the number of +* used memory blocks from a memory partition. +* +* Arguments : pmem is a pointer to the memory partition control block +* +* p_mem_data is a pointer to a structure that will contain information about the memory +* partition. +* +* Returns : OS_ERR_NONE if no errors were found. +* OS_ERR_MEM_INVALID_PMEM if you passed a NULL pointer for 'pmem' +* OS_ERR_MEM_INVALID_PDATA if you passed a NULL pointer to the data recipient. +********************************************************************************************************* +*/ + +#if OS_MEM_QUERY_EN > 0 +INT8U OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *p_mem_data) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pmem == (OS_MEM *)0) { /* Must point to a valid memory partition */ + return (OS_ERR_MEM_INVALID_PMEM); + } + 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(); + p_mem_data->OSAddr = pmem->OSMemAddr; + p_mem_data->OSFreeList = pmem->OSMemFreeList; + p_mem_data->OSBlkSize = pmem->OSMemBlkSize; + p_mem_data->OSNBlks = pmem->OSMemNBlks; + p_mem_data->OSNFree = pmem->OSMemNFree; + OS_EXIT_CRITICAL(); + p_mem_data->OSNUsed = p_mem_data->OSNBlks - p_mem_data->OSNFree; + return (OS_ERR_NONE); +} +#endif /* OS_MEM_QUERY_EN */ +/*$PAGE*/ +/* +********************************************************************************************************* +* INITIALIZE MEMORY PARTITION MANAGER +* +* Description : This function is called by uC/OS-II to initialize the memory partition manager. Your +* application MUST NOT call this function. +* +* Arguments : none +* +* Returns : none +* +* Note(s) : This function is INTERNAL to uC/OS-II and your application should not call it. +********************************************************************************************************* +*/ + +void OS_MemInit (void) +{ +#if OS_MAX_MEM_PART == 1 + OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table */ + OSMemFreeList = (OS_MEM *)&OSMemTbl[0]; /* Point to beginning of free list */ +#if OS_MEM_NAME_SIZE > 1 + OSMemFreeList->OSMemName[0] = '?'; /* Unknown name */ + OSMemFreeList->OSMemName[1] = OS_ASCII_NUL; +#endif +#endif + +#if OS_MAX_MEM_PART >= 2 + OS_MEM *pmem; + INT16U i; + + + OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table */ + pmem = &OSMemTbl[0]; /* Point to memory control block (MCB) */ + for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) { /* Init. list of free memory partitions */ + pmem->OSMemFreeList = (void *)&OSMemTbl[i+1]; /* Chain list of free partitions */ +#if OS_MEM_NAME_SIZE > 1 + pmem->OSMemName[0] = '?'; /* Unknown name */ + pmem->OSMemName[1] = OS_ASCII_NUL; +#endif + pmem++; + } + pmem->OSMemFreeList = (void *)0; /* Initialize last node */ +#if OS_MEM_NAME_SIZE > 1 + pmem->OSMemName[0] = '?'; /* Unknown name */ + pmem->OSMemName[1] = OS_ASCII_NUL; +#endif + + OSMemFreeList = &OSMemTbl[0]; /* Point to beginning of free list */ +#endif +} +#endif /* OS_MEM_EN */ diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mutex.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mutex.c new file mode 100644 index 0000000..c33d589 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_mutex.c @@ -0,0 +1,715 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* MUTUAL EXCLUSION SEMAPHORE MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_MUTEX.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#include +#endif + + +#if OS_MUTEX_EN > 0 +/* +********************************************************************************************************* +* LOCAL CONSTANTS +********************************************************************************************************* +*/ + +#define OS_MUTEX_KEEP_LOWER_8 ((INT16U)0x00FFu) +#define OS_MUTEX_KEEP_UPPER_8 ((INT16U)0xFF00u) + +#define OS_MUTEX_AVAILABLE ((INT16U)0x00FFu) + +/* +********************************************************************************************************* +* LOCAL CONSTANTS +********************************************************************************************************* +*/ + +static void OSMutex_RdyAtPrio(OS_TCB *ptcb, INT8U prio); + +/*$PAGE*/ +/* +********************************************************************************************************* +* ACCEPT MUTUAL EXCLUSION SEMAPHORE +* +* Description: This function checks the mutual exclusion semaphore to see if a resource is available. +* Unlike OSMutexPend(), OSMutexAccept() does not suspend the calling task if the resource is +* not available or the event did not occur. +* +* Arguments : pevent is a pointer to the event control block +* +* perr is a pointer to an error code which will be returned to your application: +* OS_ERR_NONE if the call was successful. +* OS_ERR_EVENT_TYPE if 'pevent' is not a pointer to a mutex +* OS_ERR_PEVENT_NULL 'pevent' is a NULL pointer +* OS_ERR_PEND_ISR if you called this function from an ISR +* OS_ERR_PIP_LOWER If the priority of the task that owns the Mutex is +* HIGHER (i.e. a lower number) than the PIP. This error +* indicates that you did not set the PIP higher (lower +* number) than ALL the tasks that compete for the Mutex. +* Unfortunately, this is something that could not be +* detected when the Mutex is created because we don't know +* what tasks will be using the Mutex. +* +* Returns : == OS_TRUE if the resource is available, the mutual exclusion semaphore is acquired +* == OS_FALSE a) if the resource is not available +* b) you didn't pass a pointer to a mutual exclusion semaphore +* c) you called this function from an ISR +* +* Warning(s) : This function CANNOT be called from an ISR because mutual exclusion semaphores are +* intended to be used by tasks only. +********************************************************************************************************* +*/ + +#if OS_MUTEX_ACCEPT_EN > 0 +BOOLEAN OSMutexAccept (OS_EVENT *pevent, INT8U *perr) +{ + INT8U pip; /* Priority Inheritance Priority (PIP) */ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (OS_FALSE); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return (OS_FALSE); + } + if (OSIntNesting > 0) { /* Make sure it's not called from an ISR */ + *perr = OS_ERR_PEND_ISR; + return (OS_FALSE); + } + OS_ENTER_CRITICAL(); /* Get value (0 or 1) of Mutex */ + pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get PIP from mutex */ + if ((pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8) == OS_MUTEX_AVAILABLE) { + pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Mask off LSByte (Acquire Mutex) */ + pevent->OSEventCnt |= OSTCBCur->OSTCBPrio; /* Save current task priority in LSByte */ + pevent->OSEventPtr = (void *)OSTCBCur; /* Link TCB of task owning Mutex */ + if (OSTCBCur->OSTCBPrio <= pip) { /* PIP 'must' have a SMALLER prio ... */ + OS_EXIT_CRITICAL(); /* ... than current task! */ + *perr = OS_ERR_PIP_LOWER; + } else { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + } + return (OS_TRUE); + } + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (OS_FALSE); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* CREATE A MUTUAL EXCLUSION SEMAPHORE +* +* Description: This function creates a mutual exclusion semaphore. +* +* Arguments : prio is the priority to use when accessing the mutual exclusion semaphore. In +* other words, when the semaphore is acquired and a higher priority task +* attempts to obtain the semaphore then the priority of the task owning the +* semaphore is raised to this priority. It is assumed that you will specify +* a priority that is LOWER in value than ANY of the tasks competing for the +* mutex. +* +* perr is a pointer to an error code which will be returned to your application: +* OS_ERR_NONE if the call was successful. +* OS_ERR_CREATE_ISR if you attempted to create a MUTEX from an ISR +* OS_ERR_PRIO_EXIST if a task at the priority inheritance priority +* already exist. +* OS_ERR_PEVENT_NULL No more event control blocks available. +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the +* maximum allowed (i.e. > OS_LOWEST_PRIO) +* +* Returns : != (void *)0 is a pointer to the event control clock (OS_EVENT) associated with the +* created mutex. +* == (void *)0 if an error is detected. +* +* Note(s) : 1) The LEAST significant 8 bits of '.OSEventCnt' are used to hold the priority number +* of the task owning the mutex or 0xFF if no task owns the mutex. +* +* 2) The MOST significant 8 bits of '.OSEventCnt' are used to hold the priority number +* to use to reduce priority inversion. +********************************************************************************************************* +*/ + +OS_EVENT *OSMutexCreate (INT8U prio, INT8U *perr) +{ + OS_EVENT *pevent; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((OS_EVENT *)0); + } + 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 ... */ + *perr = OS_ERR_CREATE_ISR; /* ... can't CREATE mutex from an ISR */ + return ((OS_EVENT *)0); + } + OS_ENTER_CRITICAL(); + if (OSTCBPrioTbl[prio] != (OS_TCB *)0) { /* Mutex priority must not already exist */ + OS_EXIT_CRITICAL(); /* Task already exist at priority ... */ + *perr = OS_ERR_PRIO_EXIST; /* ... inheritance priority */ + return ((OS_EVENT *)0); + } + OSTCBPrioTbl[prio] = OS_TCB_RESERVED; /* Reserve the table entry */ + pevent = OSEventFreeList; /* Get next free event control block */ + if (pevent == (OS_EVENT *)0) { /* See if an ECB was available */ + OSTCBPrioTbl[prio] = (OS_TCB *)0; /* No, Release the table entry */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_PEVENT_NULL; /* No more event control blocks */ + return (pevent); + } + OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr; /* Adjust the free list */ + OS_EXIT_CRITICAL(); + pevent->OSEventType = OS_EVENT_TYPE_MUTEX; + pevent->OSEventCnt = (INT16U)((INT16U)prio << 8) | OS_MUTEX_AVAILABLE; /* Resource is avail. */ + pevent->OSEventPtr = (void *)0; /* No task owning the mutex */ +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + OS_EventWaitListInit(pevent); + *perr = OS_ERR_NONE; + return (pevent); +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* DELETE A MUTEX +* +* Description: This function deletes a mutual exclusion semaphore and readies all tasks pending on the it. +* +* Arguments : pevent is a pointer to the event control block associated with the desired mutex. +* +* opt determines delete options as follows: +* opt == OS_DEL_NO_PEND Delete mutex ONLY if no task pending +* opt == OS_DEL_ALWAYS Deletes the mutex even if tasks are waiting. +* In this case, all the tasks pending will be readied. +* +* perr is a pointer to an error code that can contain one of the following values: +* OS_ERR_NONE The call was successful and the mutex was deleted +* OS_ERR_DEL_ISR If you attempted to delete the MUTEX from an ISR +* OS_ERR_INVALID_OPT An invalid option was specified +* OS_ERR_TASK_WAITING One or more tasks were waiting on the mutex +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a mutex +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* +* Returns : pevent upon error +* (OS_EVENT *)0 if the mutex was successfully deleted. +* +* Note(s) : 1) This function must be used with care. Tasks that would normally expect the presence of +* the mutex MUST check the return code of OSMutexPend(). +* +* 2) This call can potentially disable interrupts for a long time. The interrupt disable +* time is directly proportional to the number of tasks waiting on the mutex. +* +* 3) Because ALL tasks pending on the mutex will be readied, you MUST be careful because the +* resource(s) will no longer be guarded by the mutex. +* +* 4) IMPORTANT: In the 'OS_DEL_ALWAYS' case, we assume that the owner of the Mutex (if there +* is one) is ready-to-run and is thus NOT pending on another kernel object or +* has delayed itself. In other words, if a task owns the mutex being deleted, +* that task will be made ready-to-run at its original priority. +********************************************************************************************************* +*/ + +#if OS_MUTEX_DEL_EN +OS_EVENT *OSMutexDel (OS_EVENT *pevent, INT8U opt, INT8U *perr) +{ + BOOLEAN tasks_waiting; + 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; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (pevent); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return (pevent); + } + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */ + return (pevent); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on mutex */ + tasks_waiting = OS_TRUE; /* Yes */ + } else { + tasks_waiting = OS_FALSE; /* No */ + } + switch (opt) { + case OS_DEL_NO_PEND: /* DELETE MUTEX ONLY IF NO TASK WAITING --- */ + if (tasks_waiting == OS_FALSE) { +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + pip = (INT8U)(pevent->OSEventCnt >> 8); + OSTCBPrioTbl[pip] = (OS_TCB *)0; /* Free up the PIP */ + pevent->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */ + pevent->OSEventCnt = 0; + OSEventFreeList = pevent; + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + pevent_return = (OS_EVENT *)0; /* Mutex has been deleted */ + } else { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_TASK_WAITING; + pevent_return = pevent; + } + break; + + case OS_DEL_ALWAYS: /* ALWAYS DELETE THE MUTEX ---------------- */ + pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get PIP of mutex */ + prio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8); /* Get owner's original prio */ + ptcb = (OS_TCB *)pevent->OSEventPtr; + if (ptcb != (OS_TCB *)0) { /* See if any task owns the mutex */ + if (ptcb->OSTCBPrio == pip) { /* See if original prio was changed */ + OSMutex_RdyAtPrio(ptcb, prio); /* Yes, Restore the task's original prio */ + } + } + while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for mutex */ + (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MUTEX, OS_STAT_PEND_OK); + } +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + pip = (INT8U)(pevent->OSEventCnt >> 8); + OSTCBPrioTbl[pip] = (OS_TCB *)0; /* Free up the PIP */ + pevent->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */ + pevent->OSEventCnt = 0; + OSEventFreeList = pevent; /* Get next free event control block */ + OS_EXIT_CRITICAL(); + if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */ + OS_Sched(); /* Find highest priority task ready to run */ + } + *perr = OS_ERR_NONE; + pevent_return = (OS_EVENT *)0; /* Mutex has been deleted */ + break; + + default: + OS_EXIT_CRITICAL(); + *perr = OS_ERR_INVALID_OPT; + pevent_return = pevent; + break; + } + return (pevent_return); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* PEND ON MUTUAL EXCLUSION SEMAPHORE +* +* Description: This function waits for a mutual exclusion semaphore. +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* mutex. +* +* timeout is an optional timeout period (in clock ticks). If non-zero, your task will +* wait for the resource up to the amount of time specified by this argument. +* If you specify 0, however, your task will wait forever at the specified +* mutex or, until the resource becomes available. +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* OS_ERR_NONE The call was successful and your task owns the mutex +* OS_ERR_TIMEOUT The mutex was not available within the specified 'timeout'. +* OS_ERR_PEND_ABORT The wait on the mutex was aborted. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a mutex +* OS_ERR_PEVENT_NULL 'pevent' is a NULL pointer +* OS_ERR_PEND_ISR If you called this function from an ISR and the result +* would lead to a suspension. +* OS_ERR_PIP_LOWER If the priority of the task that owns the Mutex is +* HIGHER (i.e. a lower number) than the PIP. This error +* indicates that you did not set the PIP higher (lower +* number) than ALL the tasks that compete for the Mutex. +* Unfortunately, this is something that could not be +* detected when the Mutex is created because we don't know +* what tasks will be using the Mutex. +* OS_ERR_PEND_LOCKED If you called this function when the scheduler is locked +* +* Returns : none +* +* Note(s) : 1) The task that owns the Mutex MUST NOT pend on any other event while it owns the mutex. +* +* 2) You MUST NOT change the priority of the task that owns the mutex +********************************************************************************************************* +*/ + +void OSMutexPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr) +{ + INT8U pip; /* Priority Inheritance Priority (PIP) */ + INT8U mprio; /* Mutex owner priority */ + 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; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return; + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return; + } + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */ + return; + } + if (OSLockNesting > 0) { /* See if called with scheduler locked ... */ + *perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */ + return; + } +/*$PAGE*/ + OS_ENTER_CRITICAL(); + pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get PIP from mutex */ + /* Is Mutex available? */ + if ((INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8) == OS_MUTEX_AVAILABLE) { + pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Yes, Acquire the resource */ + pevent->OSEventCnt |= OSTCBCur->OSTCBPrio; /* Save priority of owning task */ + pevent->OSEventPtr = (void *)OSTCBCur; /* Point to owning task's OS_TCB */ + if (OSTCBCur->OSTCBPrio <= pip) { /* PIP 'must' have a SMALLER prio ... */ + OS_EXIT_CRITICAL(); /* ... than current task! */ + *perr = OS_ERR_PIP_LOWER; + } else { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + } + return; + } + mprio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8); /* No, Get priority of mutex owner */ + ptcb = (OS_TCB *)(pevent->OSEventPtr); /* Point to TCB of mutex owner */ + if (ptcb->OSTCBPrio > pip) { /* Need to promote prio of owner?*/ + if (mprio > OSTCBCur->OSTCBPrio) { + y = ptcb->OSTCBY; + if ((OSRdyTbl[y] & ptcb->OSTCBBitX) != 0) { /* See if mutex owner is ready */ + OSRdyTbl[y] &= ~ptcb->OSTCBBitX; /* Yes, Remove owner from Rdy ...*/ + if (OSRdyTbl[y] == 0) { /* ... list at current prio */ + OSRdyGrp &= ~ptcb->OSTCBBitY; + } + rdy = OS_TRUE; + } else { + pevent2 = ptcb->OSTCBEventPtr; + if (pevent2 != (OS_EVENT *)0) { /* Remove from event wait list */ + if ((pevent2->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) { + pevent2->OSEventGrp &= ~ptcb->OSTCBBitY; + } + } + rdy = OS_FALSE; /* No */ + } + ptcb->OSTCBPrio = pip; /* Change owner task prio to PIP */ +#if OS_LOWEST_PRIO <= 63 + ptcb->OSTCBY = (INT8U)( ptcb->OSTCBPrio >> 3); + ptcb->OSTCBX = (INT8U)( ptcb->OSTCBPrio & 0x07); + ptcb->OSTCBBitY = (INT8U)(1 << ptcb->OSTCBY); + ptcb->OSTCBBitX = (INT8U)(1 << ptcb->OSTCBX); +#else + 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 ...*/ + OSRdyGrp |= ptcb->OSTCBBitY; /* ... make it ready at new priority. */ + OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; + } else { + pevent2 = ptcb->OSTCBEventPtr; + if (pevent2 != (OS_EVENT *)0) { /* Add to event wait list */ + pevent2->OSEventGrp |= ptcb->OSTCBBitY; + pevent2->OSEventTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; + } + } + OSTCBPrioTbl[pip] = ptcb; + } + } + OSTCBCur->OSTCBStat |= OS_STAT_MUTEX; /* Mutex not available, pend current task */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; + OSTCBCur->OSTCBDly = timeout; /* Store timeout in current task's TCB */ + OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */ + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find next highest priority task ready */ + OS_ENTER_CRITICAL(); + switch (OSTCBCur->OSTCBStatPend) { /* See if we timed-out or aborted */ + case OS_STAT_PEND_OK: + *perr = OS_ERR_NONE; + break; + + case OS_STAT_PEND_ABORT: + *perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted getting mutex */ + break; + + case OS_STAT_PEND_TO: + default: + OS_EventTaskRemove(OSTCBCur, pevent); + *perr = OS_ERR_TIMEOUT; /* Indicate that we didn't get mutex within TO */ + break; + } + OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */ + OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */ +#if (OS_EVENT_MULTI_EN > 0) + OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0; +#endif + OS_EXIT_CRITICAL(); +} +/*$PAGE*/ +/* +********************************************************************************************************* +* POST TO A MUTUAL EXCLUSION SEMAPHORE +* +* Description: This function signals a mutual exclusion semaphore +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* mutex. +* +* Returns : OS_ERR_NONE The call was successful and the mutex was signaled. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a mutex +* OS_ERR_PEVENT_NULL 'pevent' is a NULL pointer +* OS_ERR_POST_ISR Attempted to post from an ISR (not valid for MUTEXes) +* OS_ERR_NOT_MUTEX_OWNER The task that did the post is NOT the owner of the MUTEX. +* OS_ERR_PIP_LOWER If the priority of the new task that owns the Mutex is +* HIGHER (i.e. a lower number) than the PIP. This error +* indicates that you did not set the PIP higher (lower +* number) than ALL the tasks that compete for the Mutex. +* Unfortunately, this is something that could not be +* detected when the Mutex is created because we don't know +* what tasks will be using the Mutex. +********************************************************************************************************* +*/ + +INT8U OSMutexPost (OS_EVENT *pevent) +{ + INT8U pip; /* Priority inheritance priority */ + INT8U prio; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSIntNesting > 0) { /* See if called from ISR ... */ + return (OS_ERR_POST_ISR); /* ... can't POST mutex from an ISR */ + } +#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 */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + pip = (INT8U)(pevent->OSEventCnt >> 8); /* Get priority inheritance priority of mutex */ + prio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8); /* Get owner's original priority */ + if (OSTCBCur != (OS_TCB *)pevent->OSEventPtr) { /* See if posting task owns the MUTEX */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NOT_MUTEX_OWNER); + } + if (OSTCBCur->OSTCBPrio == pip) { /* Did we have to raise current task's priority? */ + OSMutex_RdyAtPrio(OSTCBCur, prio); /* Restore the task's original priority */ + } + OSTCBPrioTbl[pip] = OS_TCB_RESERVED; /* Reserve table entry */ + if (pevent->OSEventGrp != 0) { /* Any task waiting for the mutex? */ + /* Yes, Make HPT waiting for mutex ready */ + prio = OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MUTEX, OS_STAT_PEND_OK); + pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Save priority of mutex's new owner */ + pevent->OSEventCnt |= prio; + pevent->OSEventPtr = OSTCBPrioTbl[prio]; /* Link to new mutex owner's OS_TCB */ + if (prio <= pip) { /* PIP 'must' have a SMALLER prio ... */ + OS_EXIT_CRITICAL(); /* ... than current task! */ + OS_Sched(); /* Find highest priority task ready to run */ + return (OS_ERR_PIP_LOWER); + } else { + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find highest priority task ready to run */ + return (OS_ERR_NONE); + } + } + pevent->OSEventCnt |= OS_MUTEX_AVAILABLE; /* No, Mutex is now available */ + pevent->OSEventPtr = (void *)0; + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +/*$PAGE*/ +/* +********************************************************************************************************* +* QUERY A MUTUAL EXCLUSION SEMAPHORE +* +* Description: This function obtains information about a mutex +* +* Arguments : pevent is a pointer to the event control block associated with the desired mutex +* +* p_mutex_data is a pointer to a structure that will contain information about the mutex +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_QUERY_ISR If you called this function from an ISR +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* OS_ERR_PDATA_NULL If 'p_mutex_data' is a NULL pointer +* OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non mutex. +********************************************************************************************************* +*/ + +#if OS_MUTEX_QUERY_EN > 0 +INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *p_mutex_data) +{ + INT8U i; +#if OS_LOWEST_PRIO <= 63 + INT8U *psrc; + INT8U *pdest; +#else + INT16U *psrc; + INT16U *pdest; +#endif +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSIntNesting > 0) { /* See if called from ISR ... */ + return (OS_ERR_QUERY_ISR); /* ... can't QUERY mutex from an ISR */ + } +#if OS_ARG_CHK_EN > 0 + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + return (OS_ERR_PEVENT_NULL); + } + 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 */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + p_mutex_data->OSMutexPIP = (INT8U)(pevent->OSEventCnt >> 8); + p_mutex_data->OSOwnerPrio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8); + if (p_mutex_data->OSOwnerPrio == 0xFF) { + p_mutex_data->OSValue = OS_TRUE; + } else { + p_mutex_data->OSValue = OS_FALSE; + } + p_mutex_data->OSEventGrp = pevent->OSEventGrp; /* Copy wait list */ + psrc = &pevent->OSEventTbl[0]; + pdest = &p_mutex_data->OSEventTbl[0]; + for (i = 0; i < OS_EVENT_TBL_SIZE; i++) { + *pdest++ = *psrc++; + } + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif /* OS_MUTEX_QUERY_EN */ + +/*$PAGE*/ +/* +********************************************************************************************************* +* RESTORE A TASK BACK TO ITS ORIGINAL PRIORITY +* +* Description: This function makes a task ready at the specified priority +* +* Arguments : ptcb is a pointer to OS_TCB of the task to make ready +* +* prio is the desired priority +* +* Returns : none +********************************************************************************************************* +*/ + +static void OSMutex_RdyAtPrio (OS_TCB *ptcb, INT8U prio) +{ + INT8U y; + + + y = ptcb->OSTCBY; /* Remove owner from ready list at 'pip' */ + OSRdyTbl[y] &= ~ptcb->OSTCBBitX; + if (OSRdyTbl[y] == 0) { + OSRdyGrp &= ~ptcb->OSTCBBitY; + } + ptcb->OSTCBPrio = prio; +#if OS_LOWEST_PRIO <= 63 + ptcb->OSTCBY = (INT8U)((prio >> (INT8U)3) & (INT8U)0x07); + ptcb->OSTCBX = (INT8U) (prio & (INT8U)0x07); + ptcb->OSTCBBitY = (INT8U)(1 << ptcb->OSTCBY); + ptcb->OSTCBBitX = (INT8U)(1 << ptcb->OSTCBX); +#else + 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 */ + OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; + OSTCBPrioTbl[prio] = ptcb; +} + + +#endif /* OS_MUTEX_EN */ diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_q.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_q.c new file mode 100644 index 0000000..4d3c8a7 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_q.c @@ -0,0 +1,868 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* MESSAGE QUEUE MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_Q.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#include +#endif + +#if (OS_Q_EN > 0) && (OS_MAX_QS > 0) +/* +********************************************************************************************************* +* ACCEPT MESSAGE FROM QUEUE +* +* Description: This function checks the queue to see if a message is available. Unlike OSQPend(), +* OSQAccept() does not suspend the calling task if a message is not available. +* +* Arguments : pevent is a pointer to the event control block +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* +* OS_ERR_NONE The call was successful and your task received a +* message. +* OS_ERR_EVENT_TYPE You didn't pass a pointer to a queue +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* OS_ERR_Q_EMPTY The queue did not contain any messages +* +* Returns : != (void *)0 is the message in the queue if one is available. The message is removed +* from the so the next time OSQAccept() is called, the queue will contain +* one less entry. +* == (void *)0 if you received a NULL pointer message +* if the queue is empty or, +* if 'pevent' is a NULL pointer or, +* if you passed an invalid event type +* +* Note(s) : As of V2.60, you can now pass NULL pointers through queues. Because of this, the argument +* 'perr' has been added to the API to tell you about the outcome of the call. +********************************************************************************************************* +*/ + +#if OS_Q_ACCEPT_EN > 0 +void *OSQAccept (OS_EVENT *pevent, INT8U *perr) +{ + void *pmsg; + OS_Q *pq; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((void *)0); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return ((void *)0); + } + OS_ENTER_CRITICAL(); + pq = (OS_Q *)pevent->OSEventPtr; /* Point at queue control block */ + if (pq->OSQEntries > 0) { /* See if any messages in the queue */ + pmsg = *pq->OSQOut++; /* Yes, extract oldest message from the queue */ + pq->OSQEntries--; /* Update the number of entries in the queue */ + if (pq->OSQOut == pq->OSQEnd) { /* Wrap OUT pointer if we are at the end of the queue */ + pq->OSQOut = pq->OSQStart; + } + *perr = OS_ERR_NONE; + } else { + *perr = OS_ERR_Q_EMPTY; + pmsg = (void *)0; /* Queue is empty */ + } + OS_EXIT_CRITICAL(); + return (pmsg); /* Return message received (or NULL) */ +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* CREATE A MESSAGE QUEUE +* +* Description: This function creates a message queue if free event control blocks are available. +* +* Arguments : start is a pointer to the base address of the message queue storage area. The +* storage area MUST be declared as an array of pointers to 'void' as follows +* +* void *MessageStorage[size] +* +* size is the number of elements in the storage area +* +* Returns : != (OS_EVENT *)0 is a pointer to the event control clock (OS_EVENT) associated with the +* created queue +* == (OS_EVENT *)0 if no event control blocks were available or an error was detected +********************************************************************************************************* +*/ + +OS_EVENT *OSQCreate (void **start, INT16U size) +{ + OS_EVENT *pevent; + OS_Q *pq; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSIntNesting > 0) { /* See if called from ISR ... */ + return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */ + } + OS_ENTER_CRITICAL(); + pevent = OSEventFreeList; /* Get next free event control block */ + if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */ + OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr; + } + OS_EXIT_CRITICAL(); + if (pevent != (OS_EVENT *)0) { /* See if we have an event control block */ + OS_ENTER_CRITICAL(); + pq = OSQFreeList; /* Get a free queue control block */ + if (pq != (OS_Q *)0) { /* Were we able to get a queue control block ? */ + OSQFreeList = OSQFreeList->OSQPtr; /* Yes, Adjust free list pointer to next free*/ + OS_EXIT_CRITICAL(); + pq->OSQStart = start; /* Initialize the queue */ + pq->OSQEnd = &start[size]; + pq->OSQIn = start; + pq->OSQOut = start; + pq->OSQSize = size; + pq->OSQEntries = 0; + pevent->OSEventType = OS_EVENT_TYPE_Q; + pevent->OSEventCnt = 0; + pevent->OSEventPtr = pq; +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + OS_EventWaitListInit(pevent); /* Initalize the wait list */ + } else { + pevent->OSEventPtr = (void *)OSEventFreeList; /* No, Return event control block on error */ + OSEventFreeList = pevent; + OS_EXIT_CRITICAL(); + pevent = (OS_EVENT *)0; + } + } + return (pevent); +} +/*$PAGE*/ +/* +********************************************************************************************************* +* DELETE A MESSAGE QUEUE +* +* Description: This function deletes a message queue and readies all tasks pending on the queue. +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* queue. +* +* opt determines delete options as follows: +* opt == OS_DEL_NO_PEND Delete the queue ONLY if no task pending +* opt == OS_DEL_ALWAYS Deletes the queue even if tasks are waiting. +* In this case, all the tasks pending will be readied. +* +* perr is a pointer to an error code that can contain one of the following values: +* OS_ERR_NONE The call was successful and the queue was deleted +* OS_ERR_DEL_ISR If you tried to delete the queue from an ISR +* OS_ERR_INVALID_OPT An invalid option was specified +* OS_ERR_TASK_WAITING One or more tasks were waiting on the queue +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* +* Returns : pevent upon error +* (OS_EVENT *)0 if the queue was successfully deleted. +* +* Note(s) : 1) This function must be used with care. Tasks that would normally expect the presence of +* the queue MUST check the return code of OSQPend(). +* 2) OSQAccept() callers will not know that the intended queue has been deleted unless +* they check 'pevent' to see that it's a NULL pointer. +* 3) This call can potentially disable interrupts for a long time. The interrupt disable +* time is directly proportional to the number of tasks waiting on the queue. +* 4) Because ALL tasks pending on the queue will be readied, you MUST be careful in +* applications where the queue is used for mutual exclusion because the resource(s) +* will no longer be guarded by the queue. +* 5) If the storage for the message queue was allocated dynamically (i.e. using a malloc() +* type call) then your application MUST release the memory storage by call the counterpart +* call of the dynamic allocation scheme used. If the queue storage was created statically +* then, the storage can be reused. +********************************************************************************************************* +*/ + +#if OS_Q_DEL_EN > 0 +OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *perr) +{ + 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; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (pevent); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return (pevent); + } + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */ + return (pevent); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on queue */ + tasks_waiting = OS_TRUE; /* Yes */ + } else { + tasks_waiting = OS_FALSE; /* No */ + } + switch (opt) { + case OS_DEL_NO_PEND: /* Delete queue only if no task waiting */ + if (tasks_waiting == OS_FALSE) { +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + pq = (OS_Q *)pevent->OSEventPtr; /* Return OS_Q to free list */ + pq->OSQPtr = OSQFreeList; + OSQFreeList = pq; + pevent->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */ + pevent->OSEventCnt = 0; + OSEventFreeList = pevent; /* Get next free event control block */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + pevent_return = (OS_EVENT *)0; /* Queue has been deleted */ + } else { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_TASK_WAITING; + pevent_return = pevent; + } + break; + + 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); + } +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + pq = (OS_Q *)pevent->OSEventPtr; /* Return OS_Q to free list */ + pq->OSQPtr = OSQFreeList; + OSQFreeList = pq; + pevent->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */ + pevent->OSEventCnt = 0; + OSEventFreeList = pevent; /* Get next free event control block */ + OS_EXIT_CRITICAL(); + if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */ + OS_Sched(); /* Find highest priority task ready to run */ + } + *perr = OS_ERR_NONE; + pevent_return = (OS_EVENT *)0; /* Queue has been deleted */ + break; + + default: + OS_EXIT_CRITICAL(); + *perr = OS_ERR_INVALID_OPT; + pevent_return = pevent; + break; + } + return (pevent_return); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* FLUSH QUEUE +* +* Description : This function is used to flush the contents of the message queue. +* +* Arguments : none +* +* Returns : OS_ERR_NONE upon success +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* +* WARNING : You should use this function with great care because, when to flush the queue, you LOOSE +* the references to what the queue entries are pointing to and thus, you could cause +* 'memory leaks'. In other words, the data you are pointing to that's being referenced +* by the queue entries should, most likely, need to be de-allocated (i.e. freed). +********************************************************************************************************* +*/ + +#if OS_Q_FLUSH_EN > 0 +INT8U OSQFlush (OS_EVENT *pevent) +{ + OS_Q *pq; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + return (OS_ERR_PEVENT_NULL); + } + if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */ + return (OS_ERR_EVENT_TYPE); + } +#endif + OS_ENTER_CRITICAL(); + pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue storage structure */ + pq->OSQIn = pq->OSQStart; + pq->OSQOut = pq->OSQStart; + pq->OSQEntries = 0; + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* PEND ON A QUEUE FOR A MESSAGE +* +* Description: This function waits for a message to be sent to a queue +* +* Arguments : pevent is a pointer to the event control block associated with the desired queue +* +* timeout is an optional timeout period (in clock ticks). If non-zero, your task will +* wait for a message to arrive at the queue up to the amount of time +* specified by this argument. If you specify 0, however, your task will wait +* forever at the specified queue or, until a message arrives. +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* +* OS_ERR_NONE The call was successful and your task received a +* message. +* OS_ERR_TIMEOUT A message was not received within the specified 'timeout'. +* OS_ERR_PEND_ABORT The wait on the queue was aborted. +* OS_ERR_EVENT_TYPE You didn't pass a pointer to a queue +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* OS_ERR_PEND_ISR If you called this function from an ISR and the result +* would lead to a suspension. +* OS_ERR_PEND_LOCKED If you called this function with the scheduler is locked +* +* Returns : != (void *)0 is a pointer to the message received +* == (void *)0 if you received a NULL pointer message or, +* if no message was received or, +* if 'pevent' is a NULL pointer or, +* if you didn't pass a pointer to a queue. +* +* Note(s) : As of V2.60, this function allows you to receive NULL pointer messages. +********************************************************************************************************* +*/ + +void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr) +{ + void *pmsg; + OS_Q *pq; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return ((void *)0); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return ((void *)0); + } + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */ + return ((void *)0); + } + if (OSLockNesting > 0) { /* See if called with scheduler locked ... */ + *perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */ + return ((void *)0); + } + OS_ENTER_CRITICAL(); + pq = (OS_Q *)pevent->OSEventPtr; /* Point at queue control block */ + if (pq->OSQEntries > 0) { /* See if any messages in the queue */ + pmsg = *pq->OSQOut++; /* Yes, extract oldest message from the queue */ + pq->OSQEntries--; /* Update the number of entries in the queue */ + if (pq->OSQOut == pq->OSQEnd) { /* Wrap OUT pointer if we are at the end of the queue */ + pq->OSQOut = pq->OSQStart; + } + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (pmsg); /* Return message received */ + } + OSTCBCur->OSTCBStat |= OS_STAT_Q; /* Task will have to pend for a message to be posted */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; + OSTCBCur->OSTCBDly = timeout; /* Load timeout into TCB */ + OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */ + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find next highest priority task ready to run */ + OS_ENTER_CRITICAL(); + switch (OSTCBCur->OSTCBStatPend) { /* See if we timed-out or aborted */ + case OS_STAT_PEND_OK: /* Extract message from TCB (Put there by QPost) */ + pmsg = OSTCBCur->OSTCBMsg; + *perr = OS_ERR_NONE; + break; + + case OS_STAT_PEND_ABORT: + pmsg = (void *)0; + *perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted */ + break; + + case OS_STAT_PEND_TO: + default: + OS_EventTaskRemove(OSTCBCur, pevent); + pmsg = (void *)0; + *perr = OS_ERR_TIMEOUT; /* Indicate that we didn't get event within TO */ + break; + } + OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */ + OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */ +#if (OS_EVENT_MULTI_EN > 0) + OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0; +#endif + OSTCBCur->OSTCBMsg = (void *)0; /* Clear received message */ + OS_EXIT_CRITICAL(); + return (pmsg); /* Return received message */ +} +/*$PAGE*/ +/* +********************************************************************************************************* +* ABORT WAITING ON A MESSAGE QUEUE +* +* Description: This function aborts & readies any tasks currently waiting on a queue. This function +* should be used to fault-abort the wait on the queue, rather than to normally signal +* the queue via OSQPost(), OSQPostFront() or OSQPostOpt(). +* +* Arguments : pevent is a pointer to the event control block associated with the desired queue. +* +* opt determines the type of ABORT performed: +* OS_PEND_OPT_NONE ABORT wait for a single task (HPT) waiting on the +* queue +* OS_PEND_OPT_BROADCAST ABORT wait for ALL tasks that are waiting on the +* queue +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* +* OS_ERR_NONE No tasks were waiting on the queue. +* OS_ERR_PEND_ABORT At least one task waiting on the queue was readied +* and informed of the aborted wait; check return value +* for the number of tasks whose wait on the queue +* was aborted. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* +* Returns : == 0 if no tasks were waiting on the queue, or upon error. +* > 0 if one or more tasks waiting on the queue are now readied and informed. +********************************************************************************************************* +*/ + +#if OS_Q_PEND_ABORT_EN > 0 +INT8U OSQPendAbort (OS_EVENT *pevent, INT8U opt, INT8U *perr) +{ + INT8U nbr_tasks; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (0); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return (0); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any task waiting on queue? */ + nbr_tasks = 0; + switch (opt) { + case OS_PEND_OPT_BROADCAST: /* Do we need to abort ALL waiting tasks? */ + while (pevent->OSEventGrp != 0) { /* Yes, ready ALL tasks waiting on queue */ + (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_ABORT); + nbr_tasks++; + } + break; + + 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); + nbr_tasks++; + break; + } + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find HPT ready to run */ + *perr = OS_ERR_PEND_ABORT; + return (nbr_tasks); + } + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (0); /* No tasks waiting on queue */ +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* POST MESSAGE TO A QUEUE +* +* Description: This function sends a message to a queue +* +* Arguments : pevent is a pointer to the event control block associated with the desired queue +* +* pmsg is a pointer to the message to send. +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_Q_FULL If the queue cannot accept any more messages because it is full. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* +* Note(s) : As of V2.60, this function allows you to send NULL pointer messages. +********************************************************************************************************* +*/ + +#if OS_Q_POST_EN > 0 +INT8U OSQPost (OS_EVENT *pevent, void *pmsg) +{ + OS_Q *pq; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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 */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any task pending on queue */ + /* Ready highest priority task waiting on event */ + (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK); + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find highest priority task ready to run */ + return (OS_ERR_NONE); + } + pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue control block */ + if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full */ + OS_EXIT_CRITICAL(); + return (OS_ERR_Q_FULL); + } + *pq->OSQIn++ = pmsg; /* Insert message into queue */ + pq->OSQEntries++; /* Update the nbr of entries in the queue */ + if (pq->OSQIn == pq->OSQEnd) { /* Wrap IN ptr if we are at end of queue */ + pq->OSQIn = pq->OSQStart; + } + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* POST MESSAGE TO THE FRONT OF A QUEUE +* +* Description: This function sends a message to a queue but unlike OSQPost(), the message is posted at +* the front instead of the end of the queue. Using OSQPostFront() allows you to send +* 'priority' messages. +* +* Arguments : pevent is a pointer to the event control block associated with the desired queue +* +* pmsg is a pointer to the message to send. +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_Q_FULL If the queue cannot accept any more messages because it is full. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* +* Note(s) : As of V2.60, this function allows you to send NULL pointer messages. +********************************************************************************************************* +*/ + +#if OS_Q_POST_FRONT_EN > 0 +INT8U OSQPostFront (OS_EVENT *pevent, void *pmsg) +{ + OS_Q *pq; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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 */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any task pending on queue */ + /* Ready highest priority task waiting on event */ + (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK); + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find highest priority task ready to run */ + return (OS_ERR_NONE); + } + pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue control block */ + if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full */ + OS_EXIT_CRITICAL(); + return (OS_ERR_Q_FULL); + } + if (pq->OSQOut == pq->OSQStart) { /* Wrap OUT ptr if we are at the 1st queue entry */ + pq->OSQOut = pq->OSQEnd; + } + pq->OSQOut--; + *pq->OSQOut = pmsg; /* Insert message into queue */ + pq->OSQEntries++; /* Update the nbr of entries in the queue */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* POST MESSAGE TO A QUEUE +* +* Description: This function sends a message to a queue. This call has been added to reduce code size +* since it can replace both OSQPost() and OSQPostFront(). Also, this function adds the +* capability to broadcast a message to ALL tasks waiting on the message queue. +* +* Arguments : pevent is a pointer to the event control block associated with the desired queue +* +* pmsg is a pointer to the message to send. +* +* opt determines the type of POST performed: +* OS_POST_OPT_NONE POST to a single waiting task +* (Identical to OSQPost()) +* OS_POST_OPT_BROADCAST POST to ALL tasks that are waiting on the queue +* OS_POST_OPT_FRONT POST as LIFO (Simulates OSQPostFront()) +* OS_POST_OPT_NO_SCHED Indicates that the scheduler will NOT be invoked +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_Q_FULL If the queue cannot accept any more messages because it is full. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* +* Warning : Interrupts can be disabled for a long time if you do a 'broadcast'. In fact, the +* interrupt disable time is proportional to the number of tasks waiting on the queue. +********************************************************************************************************* +*/ + +#if OS_Q_POST_OPT_EN > 0 +INT8U OSQPostOpt (OS_EVENT *pevent, void *pmsg, INT8U opt) +{ + OS_Q *pq; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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 */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0x00) { /* See if any task pending on queue */ + if ((opt & OS_POST_OPT_BROADCAST) != 0x00) { /* Do we need to post msg to ALL waiting tasks ? */ + while (pevent->OSEventGrp != 0) { /* Yes, Post to ALL tasks waiting on queue */ + (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK); + } + } else { /* No, Post to HPT waiting on queue */ + (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK); + } + OS_EXIT_CRITICAL(); + if ((opt & OS_POST_OPT_NO_SCHED) == 0) { /* See if scheduler needs to be invoked */ + OS_Sched(); /* Find highest priority task ready to run */ + } + return (OS_ERR_NONE); + } + pq = (OS_Q *)pevent->OSEventPtr; /* Point to queue control block */ + if (pq->OSQEntries >= pq->OSQSize) { /* Make sure queue is not full */ + OS_EXIT_CRITICAL(); + return (OS_ERR_Q_FULL); + } + if ((opt & OS_POST_OPT_FRONT) != 0x00) { /* Do we post to the FRONT of the queue? */ + if (pq->OSQOut == pq->OSQStart) { /* Yes, Post as LIFO, Wrap OUT pointer if we ... */ + pq->OSQOut = pq->OSQEnd; /* ... are at the 1st queue entry */ + } + pq->OSQOut--; + *pq->OSQOut = pmsg; /* Insert message into queue */ + } else { /* No, Post as FIFO */ + *pq->OSQIn++ = pmsg; /* Insert message into queue */ + if (pq->OSQIn == pq->OSQEnd) { /* Wrap IN ptr if we are at end of queue */ + pq->OSQIn = pq->OSQStart; + } + } + pq->OSQEntries++; /* Update the nbr of entries in the queue */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* QUERY A MESSAGE QUEUE +* +* Description: This function obtains information about a message queue. +* +* Arguments : pevent is a pointer to the event control block associated with the desired queue +* +* p_q_data is a pointer to a structure that will contain information about the message +* queue. +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non queue. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer +* OS_ERR_PDATA_NULL If 'p_q_data' is a NULL pointer +********************************************************************************************************* +*/ + +#if OS_Q_QUERY_EN > 0 +INT8U OSQQuery (OS_EVENT *pevent, OS_Q_DATA *p_q_data) +{ + OS_Q *pq; + INT8U i; +#if OS_LOWEST_PRIO <= 63 + INT8U *psrc; + INT8U *pdest; +#else + INT16U *psrc; + INT16U *pdest; +#endif +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + return (OS_ERR_PEVENT_NULL); + } + 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 */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + p_q_data->OSEventGrp = pevent->OSEventGrp; /* Copy message queue wait list */ + psrc = &pevent->OSEventTbl[0]; + pdest = &p_q_data->OSEventTbl[0]; + for (i = 0; i < OS_EVENT_TBL_SIZE; i++) { + *pdest++ = *psrc++; + } + pq = (OS_Q *)pevent->OSEventPtr; + if (pq->OSQEntries > 0) { + p_q_data->OSMsg = *pq->OSQOut; /* Get next message to return if available */ + } else { + p_q_data->OSMsg = (void *)0; + } + p_q_data->OSNMsgs = pq->OSQEntries; + p_q_data->OSQSize = pq->OSQSize; + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif /* OS_Q_QUERY_EN */ + +/*$PAGE*/ +/* +********************************************************************************************************* +* QUEUE MODULE INITIALIZATION +* +* Description : This function is called by uC/OS-II to initialize the message queue module. Your +* application MUST NOT call this function. +* +* Arguments : none +* +* Returns : none +* +* Note(s) : This function is INTERNAL to uC/OS-II and your application should not call it. +********************************************************************************************************* +*/ + +void OS_QInit (void) +{ +#if OS_MAX_QS == 1 + OSQFreeList = &OSQTbl[0]; /* Only ONE queue! */ + OSQFreeList->OSQPtr = (OS_Q *)0; +#endif + +#if OS_MAX_QS >= 2 + INT16U i; + OS_Q *pq1; + OS_Q *pq2; + + + + OS_MemClr((INT8U *)&OSQTbl[0], sizeof(OSQTbl)); /* Clear the queue table */ + pq1 = &OSQTbl[0]; + pq2 = &OSQTbl[1]; + for (i = 0; i < (OS_MAX_QS - 1); i++) { /* Init. list of free QUEUE control blocks */ + pq1->OSQPtr = pq2; + pq1++; + pq2++; + } + pq1->OSQPtr = (OS_Q *)0; + OSQFreeList = &OSQTbl[0]; +#endif +} +#endif /* OS_Q_EN */ diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_sem.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_sem.c new file mode 100644 index 0000000..b8e159b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_sem.c @@ -0,0 +1,609 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* SEMAPHORE MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_SEM.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#include +#endif + +#if OS_SEM_EN > 0 +/*$PAGE*/ +/* +********************************************************************************************************* +* ACCEPT SEMAPHORE +* +* Description: This function checks the semaphore to see if a resource is available or, if an event +* occurred. Unlike OSSemPend(), OSSemAccept() does not suspend the calling task if the +* resource is not available or the event did not occur. +* +* Arguments : pevent is a pointer to the event control block +* +* Returns : > 0 if the resource is available or the event did not occur the semaphore is +* decremented to obtain the resource. +* == 0 if the resource is not available or the event did not occur or, +* if 'pevent' is a NULL pointer or, +* if you didn't pass a pointer to a semaphore +********************************************************************************************************* +*/ + +#if OS_SEM_ACCEPT_EN > 0 +INT16U OSSemAccept (OS_EVENT *pevent) +{ + INT16U cnt; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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 */ + return (0); + } + OS_ENTER_CRITICAL(); + cnt = pevent->OSEventCnt; + if (cnt > 0) { /* See if resource is available */ + pevent->OSEventCnt--; /* Yes, decrement semaphore and notify caller */ + } + OS_EXIT_CRITICAL(); + return (cnt); /* Return semaphore count */ +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* CREATE A SEMAPHORE +* +* Description: This function creates a semaphore. +* +* Arguments : cnt is the initial value for the semaphore. If the value is 0, no resource is +* available (or no event has occurred). You initialize the semaphore to a +* non-zero value to specify how many resources are available (e.g. if you have +* 10 resources, you would initialize the semaphore to 10). +* +* Returns : != (void *)0 is a pointer to the event control block (OS_EVENT) associated with the +* created semaphore +* == (void *)0 if no event control blocks were available +********************************************************************************************************* +*/ + +OS_EVENT *OSSemCreate (INT16U cnt) +{ + OS_EVENT *pevent; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSIntNesting > 0) { /* See if called from ISR ... */ + return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */ + } + OS_ENTER_CRITICAL(); + pevent = OSEventFreeList; /* Get next free event control block */ + if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */ + OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr; + } + OS_EXIT_CRITICAL(); + if (pevent != (OS_EVENT *)0) { /* Get an event control block */ + pevent->OSEventType = OS_EVENT_TYPE_SEM; + pevent->OSEventCnt = cnt; /* Set semaphore value */ + pevent->OSEventPtr = (void *)0; /* Unlink from ECB free list */ +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + OS_EventWaitListInit(pevent); /* Initialize to 'nobody waiting' on sem. */ + } + return (pevent); +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* DELETE A SEMAPHORE +* +* Description: This function deletes a semaphore and readies all tasks pending on the semaphore. +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* semaphore. +* +* opt determines delete options as follows: +* opt == OS_DEL_NO_PEND Delete semaphore ONLY if no task pending +* opt == OS_DEL_ALWAYS Deletes the semaphore even if tasks are waiting. +* In this case, all the tasks pending will be readied. +* +* perr is a pointer to an error code that can contain one of the following values: +* OS_ERR_NONE The call was successful and the semaphore was deleted +* OS_ERR_DEL_ISR If you attempted to delete the semaphore from an ISR +* OS_ERR_INVALID_OPT An invalid option was specified +* OS_ERR_TASK_WAITING One or more tasks were waiting on the semaphore +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* +* Returns : pevent upon error +* (OS_EVENT *)0 if the semaphore was successfully deleted. +* +* Note(s) : 1) This function must be used with care. Tasks that would normally expect the presence of +* the semaphore MUST check the return code of OSSemPend(). +* 2) OSSemAccept() callers will not know that the intended semaphore has been deleted unless +* they check 'pevent' to see that it's a NULL pointer. +* 3) This call can potentially disable interrupts for a long time. The interrupt disable +* time is directly proportional to the number of tasks waiting on the semaphore. +* 4) Because ALL tasks pending on the semaphore will be readied, you MUST be careful in +* applications where the semaphore is used for mutual exclusion because the resource(s) +* will no longer be guarded by the semaphore. +********************************************************************************************************* +*/ + +#if OS_SEM_DEL_EN > 0 +OS_EVENT *OSSemDel (OS_EVENT *pevent, INT8U opt, INT8U *perr) +{ + BOOLEAN tasks_waiting; + OS_EVENT *pevent_return; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (pevent); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return (pevent); + } + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */ + return (pevent); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on semaphore */ + tasks_waiting = OS_TRUE; /* Yes */ + } else { + tasks_waiting = OS_FALSE; /* No */ + } + switch (opt) { + case OS_DEL_NO_PEND: /* Delete semaphore only if no task waiting */ + if (tasks_waiting == OS_FALSE) { +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + pevent->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */ + pevent->OSEventCnt = 0; + OSEventFreeList = pevent; /* Get next free event control block */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + pevent_return = (OS_EVENT *)0; /* Semaphore has been deleted */ + } else { + OS_EXIT_CRITICAL(); + *perr = OS_ERR_TASK_WAITING; + pevent_return = pevent; + } + break; + + 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); + } +#if OS_EVENT_NAME_SIZE > 1 + pevent->OSEventName[0] = '?'; /* Unknown name */ + pevent->OSEventName[1] = OS_ASCII_NUL; +#endif + pevent->OSEventType = OS_EVENT_TYPE_UNUSED; + pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */ + pevent->OSEventCnt = 0; + OSEventFreeList = pevent; /* Get next free event control block */ + OS_EXIT_CRITICAL(); + if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */ + OS_Sched(); /* Find highest priority task ready to run */ + } + *perr = OS_ERR_NONE; + pevent_return = (OS_EVENT *)0; /* Semaphore has been deleted */ + break; + + default: + OS_EXIT_CRITICAL(); + *perr = OS_ERR_INVALID_OPT; + pevent_return = pevent; + break; + } + return (pevent_return); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* PEND ON SEMAPHORE +* +* Description: This function waits for a semaphore. +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* semaphore. +* +* timeout is an optional timeout period (in clock ticks). If non-zero, your task will +* wait for the resource up to the amount of time specified by this argument. +* If you specify 0, however, your task will wait forever at the specified +* semaphore or, until the resource becomes available (or the event occurs). +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* +* OS_ERR_NONE The call was successful and your task owns the resource +* or, the event you are waiting for occurred. +* OS_ERR_TIMEOUT The semaphore was not received within the specified +* 'timeout'. +* OS_ERR_PEND_ABORT The wait on the semaphore was aborted. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore. +* OS_ERR_PEND_ISR If you called this function from an ISR and the result +* would lead to a suspension. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* OS_ERR_PEND_LOCKED If you called this function when the scheduler is locked +* +* Returns : none +********************************************************************************************************* +*/ +/*$PAGE*/ +void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return; + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return; + } + if (OSIntNesting > 0) { /* See if called from ISR ... */ + *perr = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR */ + return; + } + if (OSLockNesting > 0) { /* See if called with scheduler locked ... */ + *perr = OS_ERR_PEND_LOCKED; /* ... can't PEND when locked */ + return; + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventCnt > 0) { /* If sem. is positive, resource available ... */ + pevent->OSEventCnt--; /* ... decrement semaphore only if positive. */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return; + } + /* Otherwise, must wait until event occurs */ + OSTCBCur->OSTCBStat |= OS_STAT_SEM; /* Resource not available, pend on semaphore */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; + OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB */ + OS_EventTaskWait(pevent); /* Suspend task until event or timeout occurs */ + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find next highest priority task ready */ + OS_ENTER_CRITICAL(); + switch (OSTCBCur->OSTCBStatPend) { /* See if we timed-out or aborted */ + case OS_STAT_PEND_OK: + *perr = OS_ERR_NONE; + break; + + case OS_STAT_PEND_ABORT: + *perr = OS_ERR_PEND_ABORT; /* Indicate that we aborted */ + break; + + case OS_STAT_PEND_TO: + default: + OS_EventTaskRemove(OSTCBCur, pevent); + *perr = OS_ERR_TIMEOUT; /* Indicate that we didn't get event within TO */ + break; + } + OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set task status to ready */ + OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status */ + OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* Clear event pointers */ +#if (OS_EVENT_MULTI_EN > 0) + OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0; +#endif + OS_EXIT_CRITICAL(); +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* ABORT WAITING ON A SEMAPHORE +* +* Description: This function aborts & readies any tasks currently waiting on a semaphore. This function +* should be used to fault-abort the wait on the semaphore, rather than to normally signal +* the semaphore via OSSemPost(). +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* semaphore. +* +* opt determines the type of ABORT performed: +* OS_PEND_OPT_NONE ABORT wait for a single task (HPT) waiting on the +* semaphore +* OS_PEND_OPT_BROADCAST ABORT wait for ALL tasks that are waiting on the +* semaphore +* +* perr is a pointer to where an error message will be deposited. Possible error +* messages are: +* +* OS_ERR_NONE No tasks were waiting on the semaphore. +* OS_ERR_PEND_ABORT At least one task waiting on the semaphore was readied +* and informed of the aborted wait; check return value +* for the number of tasks whose wait on the semaphore +* was aborted. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* +* Returns : == 0 if no tasks were waiting on the semaphore, or upon error. +* > 0 if one or more tasks waiting on the semaphore are now readied and informed. +********************************************************************************************************* +*/ + +#if OS_SEM_PEND_ABORT_EN > 0 +INT8U OSSemPendAbort (OS_EVENT *pevent, INT8U opt, INT8U *perr) +{ + INT8U nbr_tasks; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (0); + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return (0); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any task waiting on semaphore? */ + nbr_tasks = 0; + switch (opt) { + case OS_PEND_OPT_BROADCAST: /* Do we need to abort ALL waiting tasks? */ + while (pevent->OSEventGrp != 0) { /* Yes, ready ALL tasks waiting on semaphore */ + (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_ABORT); + nbr_tasks++; + } + break; + + 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); + nbr_tasks++; + break; + } + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find HPT ready to run */ + *perr = OS_ERR_PEND_ABORT; + return (nbr_tasks); + } + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (0); /* No tasks waiting on semaphore */ +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* POST TO A SEMAPHORE +* +* Description: This function signals a semaphore +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* semaphore. +* +* Returns : OS_ERR_NONE The call was successful and the semaphore was signaled. +* OS_ERR_SEM_OVF If the semaphore count exceeded its limit. In other words, you have +* signalled the semaphore more often than you waited on it with either +* OSSemAccept() or OSSemPend(). +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +********************************************************************************************************* +*/ + +INT8U OSSemPost (OS_EVENT *pevent) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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 */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + if (pevent->OSEventGrp != 0) { /* See if any task waiting for semaphore */ + /* Ready HPT waiting on event */ + (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK); + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find HPT ready to run */ + return (OS_ERR_NONE); + } + if (pevent->OSEventCnt < 65535u) { /* Make sure semaphore will not overflow */ + pevent->OSEventCnt++; /* Increment semaphore count to register event */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); + } + OS_EXIT_CRITICAL(); /* Semaphore value has reached its maximum */ + return (OS_ERR_SEM_OVF); +} + +/*$PAGE*/ +/* +********************************************************************************************************* +* QUERY A SEMAPHORE +* +* Description: This function obtains information about a semaphore +* +* Arguments : pevent is a pointer to the event control block associated with the desired +* semaphore +* +* p_sem_data is a pointer to a structure that will contain information about the +* semaphore. +* +* Returns : OS_ERR_NONE The call was successful and the message was sent +* OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non semaphore. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* OS_ERR_PDATA_NULL If 'p_sem_data' is a NULL pointer +********************************************************************************************************* +*/ + +#if OS_SEM_QUERY_EN > 0 +INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data) +{ +#if OS_LOWEST_PRIO <= 63 + INT8U *psrc; + INT8U *pdest; +#else + INT16U *psrc; + INT16U *pdest; +#endif + INT8U i; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */ + return (OS_ERR_PEVENT_NULL); + } + 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 */ + return (OS_ERR_EVENT_TYPE); + } + OS_ENTER_CRITICAL(); + p_sem_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */ + psrc = &pevent->OSEventTbl[0]; + pdest = &p_sem_data->OSEventTbl[0]; + for (i = 0; i < OS_EVENT_TBL_SIZE; i++) { + *pdest++ = *psrc++; + } + p_sem_data->OSCnt = pevent->OSEventCnt; /* Get semaphore count */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif /* OS_SEM_QUERY_EN */ + +/*$PAGE*/ +/* +********************************************************************************************************* +* SET SEMAPHORE +* +* Description: This function sets the semaphore count to the value specified as an argument. Typically, +* this value would be 0. +* +* You would typically use this function when a semaphore is used as a signaling mechanism +* and, you want to reset the count value. +* +* Arguments : pevent is a pointer to the event control block +* +* cnt is the new value for the semaphore count. You would pass 0 to reset the +* semaphore count. +* +* perr is a pointer to an error code returned by the function as follows: +* +* OS_ERR_NONE The call was successful and the semaphore value was set. +* OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore. +* OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. +* OS_ERR_TASK_WAITING If tasks are waiting on the semaphore. +********************************************************************************************************* +*/ + +#if OS_SEM_SET_EN > 0 +void OSSemSet (OS_EVENT *pevent, INT16U cnt, INT8U *perr) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return; + } + 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 */ + *perr = OS_ERR_EVENT_TYPE; + return; + } + OS_ENTER_CRITICAL(); + *perr = OS_ERR_NONE; + if (pevent->OSEventCnt > 0) { /* See if semaphore already has a count */ + pevent->OSEventCnt = cnt; /* Yes, set it to the new value specified. */ + } else { /* No */ + if (pevent->OSEventGrp == 0) { /* See if task(s) waiting? */ + pevent->OSEventCnt = cnt; /* No, OK to set the value */ + } else { + *perr = OS_ERR_TASK_WAITING; + } + } + OS_EXIT_CRITICAL(); +} +#endif + +#endif /* OS_SEM_EN */ diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_task.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_task.c new file mode 100644 index 0000000..72bac53 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_task.c @@ -0,0 +1,1095 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* TASK MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_TASK.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#include +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* CHANGE PRIORITY OF A TASK +* +* Description: This function allows you to change the priority of a task dynamically. Note that the new +* priority MUST be available. +* +* Arguments : oldp is the old priority +* +* newp is the new priority +* +* Returns : OS_ERR_NONE is the call was successful +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. >= OS_LOWEST_PRIO) +* OS_ERR_PRIO_EXIST if the new priority already exist. +* OS_ERR_PRIO there is no task with the specified OLD priority (i.e. the OLD task does +* not exist. +* OS_ERR_TASK_NOT_EXIST if the task is assigned to a Mutex PIP. +********************************************************************************************************* +*/ + +#if OS_TASK_CHANGE_PRIO_EN > 0 +INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio) +{ +#if (OS_EVENT_EN) + OS_EVENT *pevent; +#if (OS_EVENT_MULTI_EN > 0) + OS_EVENT **pevents; +#endif +#endif + OS_TCB *ptcb; + INT8U y_new; + INT8U x_new; + INT8U y_old; +#if OS_LOWEST_PRIO <= 63 + INT8U bity_new; + INT8U bitx_new; + INT8U bity_old; + INT8U bitx_old; +#else + INT16U bity_new; + 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 */ +#endif + + +/*$PAGE*/ +#if OS_ARG_CHK_EN > 0 + if (oldprio >= OS_LOWEST_PRIO) { + if (oldprio != OS_PRIO_SELF) { + return (OS_ERR_PRIO_INVALID); + } + } + if (newprio >= OS_LOWEST_PRIO) { + return (OS_ERR_PRIO_INVALID); + } +#endif + OS_ENTER_CRITICAL(); + if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) { /* New priority must not already exist */ + OS_EXIT_CRITICAL(); + return (OS_ERR_PRIO_EXIST); + } + if (oldprio == OS_PRIO_SELF) { /* See if changing self */ + oldprio = OSTCBCur->OSTCBPrio; /* Yes, get priority */ + } + ptcb = OSTCBPrioTbl[oldprio]; + if (ptcb == (OS_TCB *)0) { /* Does task to change exist? */ + OS_EXIT_CRITICAL(); /* No, can't change its priority! */ + return (OS_ERR_PRIO); + } + if (ptcb == OS_TCB_RESERVED) { /* Is task assigned to Mutex */ + OS_EXIT_CRITICAL(); /* No, can't change its priority! */ + return (OS_ERR_TASK_NOT_EXIST); + } +#if OS_LOWEST_PRIO <= 63 + y_new = (INT8U)(newprio >> 3); /* Yes, compute new TCB fields */ + x_new = (INT8U)(newprio & 0x07); + bity_new = (INT8U)(1 << y_new); + bitx_new = (INT8U)(1 << x_new); +#else + y_new = (INT8U)((newprio >> 4) & 0x0F); + 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 */ + OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new priority */ + y_old = ptcb->OSTCBY; + bity_old = ptcb->OSTCBBitY; + bitx_old = ptcb->OSTCBBitX; + if ((OSRdyTbl[y_old] & bitx_old) != 0) { /* If task is ready make it not */ + OSRdyTbl[y_old] &= ~bitx_old; + if (OSRdyTbl[y_old] == 0) { + OSRdyGrp &= ~bity_old; + } + OSRdyGrp |= bity_new; /* Make new priority ready to run */ + OSRdyTbl[y_new] |= bitx_new; + } + +#if (OS_EVENT_EN) + pevent = ptcb->OSTCBEventPtr; + if (pevent != (OS_EVENT *)0) { + pevent->OSEventTbl[y_old] &= ~bitx_old; /* Remove old task prio from wait list */ + if (pevent->OSEventTbl[y_old] == 0) { + pevent->OSEventGrp &= ~bity_old; + } + pevent->OSEventGrp |= bity_new; /* Add new task prio to wait list */ + pevent->OSEventTbl[y_new] |= bitx_new; + } +#if (OS_EVENT_MULTI_EN > 0) + if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) { + pevents = ptcb->OSTCBEventMultiPtr; + pevent = *pevents; + while (pevent != (OS_EVENT *)0) { + pevent->OSEventTbl[y_old] &= ~bitx_old; /* Remove old task prio from wait lists */ + if (pevent->OSEventTbl[y_old] == 0) { + pevent->OSEventGrp &= ~bity_old; + } + pevent->OSEventGrp |= bity_new; /* Add new task prio to wait lists */ + pevent->OSEventTbl[y_new] |= bitx_new; + pevents++; + pevent = *pevents; + } + } +#endif +#endif + + ptcb->OSTCBPrio = newprio; /* Set new task priority */ + ptcb->OSTCBY = y_new; + ptcb->OSTCBX = x_new; + ptcb->OSTCBBitY = bity_new; + ptcb->OSTCBBitX = bitx_new; + OS_EXIT_CRITICAL(); + if (OSRunning == OS_TRUE) { + OS_Sched(); /* Find new highest priority task */ + } + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* CREATE A TASK +* +* Description: This function is used to have uC/OS-II manage the execution of a task. Tasks can either +* be created prior to the start of multitasking or by a running task. A task cannot be +* created by an ISR. +* +* Arguments : task is a pointer to the task's code +* +* p_arg is a pointer to an optional data area which can be used to pass parameters to +* the task when the task first executes. Where the task is concerned it thinks +* it was invoked and passed the argument 'p_arg' as follows: +* +* void Task (void *p_arg) +* { +* for (;;) { +* Task code; +* } +* } +* +* ptos is a pointer to the task's top of stack. If the configuration constant +* OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high +* memory to low memory). 'pstk' will thus point to the highest (valid) memory +* location of the stack. If OS_STK_GROWTH is set to 0, 'pstk' will point to the +* lowest memory location of the stack and the stack will grow with increasing +* memory locations. +* +* prio is the task's priority. A unique priority MUST be assigned to each task and the +* lower the number, the higher the priority. +* +* Returns : OS_ERR_NONE if the function was successful. +* OS_PRIO_EXIT if the task priority already exist +* (each task MUST have a unique priority). +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. >= OS_LOWEST_PRIO) +* OS_ERR_TASK_CREATE_ISR if you tried to create a task from an ISR. +********************************************************************************************************* +*/ + +#if OS_TASK_CREATE_EN > 0 +INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio) +{ + OS_STK *psp; + INT8U err; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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(); + if (OSIntNesting > 0) { /* Make sure we don't create the task from within an ISR */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_CREATE_ISR); + } + if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */ + OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ... */ + /* ... the same thing until task is created. */ + OS_EXIT_CRITICAL(); + psp = OSTaskStkInit(task, p_arg, ptos, 0); /* Initialize the task's stack */ + err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0); + if (err == OS_ERR_NONE) { + if (OSRunning == OS_TRUE) { /* Find highest priority task if multitasking has started */ + OS_Sched(); + } + } else { + OS_ENTER_CRITICAL(); + OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others */ + OS_EXIT_CRITICAL(); + } + return (err); + } + OS_EXIT_CRITICAL(); + return (OS_ERR_PRIO_EXIST); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* CREATE A TASK (Extended Version) +* +* Description: This function is used to have uC/OS-II manage the execution of a task. Tasks can either +* be created prior to the start of multitasking or by a running task. A task cannot be +* created by an ISR. This function is similar to OSTaskCreate() except that it allows +* additional information about a task to be specified. +* +* Arguments : task is a pointer to the task's code +* +* p_arg is a pointer to an optional data area which can be used to pass parameters to +* the task when the task first executes. Where the task is concerned it thinks +* it was invoked and passed the argument 'p_arg' as follows: +* +* void Task (void *p_arg) +* { +* for (;;) { +* Task code; +* } +* } +* +* ptos is a pointer to the task's top of stack. If the configuration constant +* OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high +* memory to low memory). 'ptos' will thus point to the highest (valid) memory +* location of the stack. If OS_STK_GROWTH is set to 0, 'ptos' will point to the +* lowest memory location of the stack and the stack will grow with increasing +* memory locations. 'ptos' MUST point to a valid 'free' data item. +* +* prio is the task's priority. A unique priority MUST be assigned to each task and the +* lower the number, the higher the priority. +* +* id is the task's ID (0..65535) +* +* pbos is a pointer to the task's bottom of stack. If the configuration constant +* OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high +* memory to low memory). 'pbos' will thus point to the LOWEST (valid) memory +* location of the stack. If OS_STK_GROWTH is set to 0, 'pbos' will point to the +* HIGHEST memory location of the stack and the stack will grow with increasing +* memory locations. 'pbos' MUST point to a valid 'free' data item. +* +* stk_size is the size of the stack in number of elements. If OS_STK is set to INT8U, +* 'stk_size' corresponds to the number of bytes available. If OS_STK is set to +* INT16U, 'stk_size' contains the number of 16-bit entries available. Finally, if +* OS_STK is set to INT32U, 'stk_size' contains the number of 32-bit entries +* available on the stack. +* +* pext is a pointer to a user supplied memory location which is used as a TCB extension. +* For example, this user memory can hold the contents of floating-point registers +* during a context switch, the time each task takes to execute, the number of times +* the task has been switched-in, etc. +* +* opt contains additional information (or options) about the behavior of the task. The +* LOWER 8-bits are reserved by uC/OS-II while the upper 8 bits can be application +* specific. See OS_TASK_OPT_??? in uCOS-II.H. Current choices are: +* +* OS_TASK_OPT_STK_CHK Stack checking to be allowed for the task +* OS_TASK_OPT_STK_CLR Clear the stack when the task is created +* OS_TASK_OPT_SAVE_FP If the CPU has floating-point registers, save them +* during a context switch. +* +* Returns : OS_ERR_NONE if the function was successful. +* OS_PRIO_EXIT if the task priority already exist +* (each task MUST have a unique priority). +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. > OS_LOWEST_PRIO) +* OS_ERR_TASK_CREATE_ISR if you tried to create a task from an ISR. +********************************************************************************************************* +*/ +/*$PAGE*/ +#if OS_TASK_CREATE_EXT_EN > 0 +INT8U OSTaskCreateExt (void (*task)(void *p_arg), + void *p_arg, + OS_STK *ptos, + INT8U prio, + INT16U id, + OS_STK *pbos, + INT32U stk_size, + void *pext, + INT16U opt) +{ + OS_STK *psp; + INT8U err; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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(); + if (OSIntNesting > 0) { /* Make sure we don't create the task from within an ISR */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_CREATE_ISR); + } + if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */ + OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ... */ + /* ... the same thing until task is created. */ + OS_EXIT_CRITICAL(); + +#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 */ + err = OS_TCBInit(prio, psp, pbos, id, stk_size, pext, opt); + if (err == OS_ERR_NONE) { + if (OSRunning == OS_TRUE) { /* Find HPT if multitasking has started */ + OS_Sched(); + } + } else { + OS_ENTER_CRITICAL(); + OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Make this priority avail. to others */ + OS_EXIT_CRITICAL(); + } + return (err); + } + OS_EXIT_CRITICAL(); + return (OS_ERR_PRIO_EXIST); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* DELETE A TASK +* +* Description: This function allows you to delete a task. The calling task can delete itself by +* its own priority number. The deleted task is returned to the dormant state and can be +* re-activated by creating the deleted task again. +* +* Arguments : prio is the priority of the task to delete. Note that you can explicitely delete +* the current task without knowing its priority level by setting 'prio' to +* OS_PRIO_SELF. +* +* Returns : OS_ERR_NONE if the call is successful +* OS_ERR_TASK_DEL_IDLE if you attempted to delete uC/OS-II's idle task +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. >= OS_LOWEST_PRIO) or, you have not specified OS_PRIO_SELF. +* OS_ERR_TASK_DEL if the task is assigned to a Mutex PIP. +* OS_ERR_TASK_NOT_EXIST if the task you want to delete does not exist. +* OS_ERR_TASK_DEL_ISR if you tried to delete a task from an ISR +* +* Notes : 1) To reduce interrupt latency, OSTaskDel() 'disables' the task: +* a) by making it not ready +* b) by removing it from any wait lists +* c) by preventing OSTimeTick() from making the task ready to run. +* The task can then be 'unlinked' from the miscellaneous structures in uC/OS-II. +* 2) The function OS_Dummy() is called after OS_EXIT_CRITICAL() because, on most processors, +* the next instruction following the enable interrupt instruction is ignored. +* 3) An ISR cannot delete a task. +* 4) The lock nesting counter is incremented because, for a brief instant, if the current +* task is being deleted, the current task would not be able to be rescheduled because it +* is removed from the ready list. Incrementing the nesting counter prevents another task +* from being schedule. This means that an ISR would return to the current task which is +* being deleted. The rest of the deletion would thus be able to be completed. +********************************************************************************************************* +*/ + +#if OS_TASK_DEL_EN > 0 +INT8U OSTaskDel (INT8U prio) +{ +#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; +#endif + + + + if (OSIntNesting > 0) { /* See if trying to delete from ISR */ + return (OS_ERR_TASK_DEL_ISR); + } + if (prio == OS_TASK_IDLE_PRIO) { /* Not allowed to delete idle task */ + return (OS_ERR_TASK_DEL_IDLE); + } +#if OS_ARG_CHK_EN > 0 + if (prio >= OS_LOWEST_PRIO) { /* Task priority valid ? */ + if (prio != OS_PRIO_SELF) { + return (OS_ERR_PRIO_INVALID); + } + } +#endif + +/*$PAGE*/ + OS_ENTER_CRITICAL(); + if (prio == OS_PRIO_SELF) { /* See if requesting to delete self */ + prio = OSTCBCur->OSTCBPrio; /* Set priority to delete to current */ + } + ptcb = OSTCBPrioTbl[prio]; + if (ptcb == (OS_TCB *)0) { /* Task to delete must exist */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); + } + if (ptcb == OS_TCB_RESERVED) { /* Must not be assigned to Mutex */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_DEL); + } + + OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX; + if (OSRdyTbl[ptcb->OSTCBY] == 0) { /* Make task not ready */ + OSRdyGrp &= ~ptcb->OSTCBBitY; + } + +#if (OS_EVENT_EN) + if (ptcb->OSTCBEventPtr != (OS_EVENT *)0) { + OS_EventTaskRemove(ptcb, ptcb->OSTCBEventPtr); /* Remove this task from any event wait list */ + } +#if (OS_EVENT_MULTI_EN > 0) + if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) { /* Remove this task from any events' wait lists*/ + OS_EventTaskRemoveMulti(ptcb, ptcb->OSTCBEventMultiPtr); + } +#endif +#endif + +#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) + pnode = ptcb->OSTCBFlagNode; + if (pnode != (OS_FLAG_NODE *)0) { /* If task is waiting on event flag */ + OS_FlagUnlink(pnode); /* Remove from wait list */ + } +#endif + + ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from updating */ + ptcb->OSTCBStat = OS_STAT_RDY; /* Prevent task from being resumed */ + ptcb->OSTCBStatPend = OS_STAT_PEND_OK; + if (OSLockNesting < 255u) { /* Make sure we don't context switch */ + OSLockNesting++; + } + OS_EXIT_CRITICAL(); /* Enabling INT. ignores next instruc. */ + OS_Dummy(); /* ... Dummy ensures that INTs will be */ + OS_ENTER_CRITICAL(); /* ... disabled HERE! */ + if (OSLockNesting > 0) { /* Remove context switch lock */ + OSLockNesting--; + } + OSTaskDelHook(ptcb); /* Call user defined hook */ + OSTaskCtr--; /* One less task being managed */ + OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Clear old priority entry */ + if (ptcb->OSTCBPrev == (OS_TCB *)0) { /* Remove from TCB chain */ + ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0; + OSTCBList = ptcb->OSTCBNext; + } else { + ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext; + ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev; + } + ptcb->OSTCBNext = OSTCBFreeList; /* Return TCB to free TCB list */ + OSTCBFreeList = ptcb; +#if OS_TASK_NAME_SIZE > 1 + ptcb->OSTCBTaskName[0] = '?'; /* Unknown name */ + ptcb->OSTCBTaskName[1] = OS_ASCII_NUL; +#endif + OS_EXIT_CRITICAL(); + if (OSRunning == OS_TRUE) { + OS_Sched(); /* Find new highest priority task */ + } + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* REQUEST THAT A TASK DELETE ITSELF +* +* Description: This function is used to: +* a) notify a task to delete itself. +* b) to see if a task requested that the current task delete itself. +* This function is a little tricky to understand. Basically, you have a task that needs +* to be deleted however, this task has resources that it has allocated (memory buffers, +* semaphores, mailboxes, queues etc.). The task cannot be deleted otherwise these +* resources would not be freed. The requesting task calls OSTaskDelReq() to indicate that +* the task needs to be deleted. Deleting of the task is however, deferred to the task to +* be deleted. For example, suppose that task #10 needs to be deleted. The requesting task +* example, task #5, would call OSTaskDelReq(10). When task #10 gets to execute, it calls +* this function by specifying OS_PRIO_SELF and monitors the returned value. If the return +* value is OS_ERR_TASK_DEL_REQ, another task requested a task delete. Task #10 would look like +* this: +* +* void Task(void *p_arg) +* { +* . +* . +* while (1) { +* OSTimeDly(1); +* if (OSTaskDelReq(OS_PRIO_SELF) == OS_ERR_TASK_DEL_REQ) { +* Release any owned resources; +* De-allocate any dynamic memory; +* OSTaskDel(OS_PRIO_SELF); +* } +* } +* } +* +* Arguments : prio is the priority of the task to request the delete from +* +* Returns : OS_ERR_NONE if the task exist and the request has been registered +* OS_ERR_TASK_NOT_EXIST if the task has been deleted. This allows the caller to know whether +* the request has been executed. +* OS_ERR_TASK_DEL if the task is assigned to a Mutex. +* OS_ERR_TASK_DEL_IDLE if you requested to delete uC/OS-II's idle task +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. >= OS_LOWEST_PRIO) or, you have not specified OS_PRIO_SELF. +* OS_ERR_TASK_DEL_REQ if a task (possibly another task) requested that the running task be +* deleted. +********************************************************************************************************* +*/ +/*$PAGE*/ +#if OS_TASK_DEL_EN > 0 +INT8U OSTaskDelReq (INT8U prio) +{ + INT8U stat; + OS_TCB *ptcb; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (prio == OS_TASK_IDLE_PRIO) { /* Not allowed to delete idle task */ + return (OS_ERR_TASK_DEL_IDLE); + } +#if OS_ARG_CHK_EN > 0 + if (prio >= OS_LOWEST_PRIO) { /* Task priority valid ? */ + if (prio != OS_PRIO_SELF) { + return (OS_ERR_PRIO_INVALID); + } + } +#endif + if (prio == OS_PRIO_SELF) { /* See if a task is requesting to ... */ + OS_ENTER_CRITICAL(); /* ... this task to delete itself */ + stat = OSTCBCur->OSTCBDelReq; /* Return request status to caller */ + OS_EXIT_CRITICAL(); + return (stat); + } + OS_ENTER_CRITICAL(); + ptcb = OSTCBPrioTbl[prio]; + if (ptcb == (OS_TCB *)0) { /* Task to delete must exist */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); /* Task must already be deleted */ + } + if (ptcb == OS_TCB_RESERVED) { /* Must NOT be assigned to a Mutex */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_DEL); + } + ptcb->OSTCBDelReq = OS_ERR_TASK_DEL_REQ; /* Set flag indicating task to be DEL. */ + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* GET THE NAME OF A TASK +* +* Description: This function is called to obtain the name of a task. +* +* Arguments : prio is the priority of the task that you want to obtain the name from. +* +* pname is a pointer to an ASCII string that will receive the name of the task. The +* string must be able to hold at least OS_TASK_NAME_SIZE characters. +* +* perr is a pointer to an error code that can contain one of the following values: +* +* OS_ERR_NONE if the requested task is resumed +* OS_ERR_TASK_NOT_EXIST if the task has not been created or is assigned to a Mutex +* OS_ERR_PRIO_INVALID if you specified an invalid priority: +* A higher value than the idle task or not OS_PRIO_SELF. +* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname' +* OS_ERR_NAME_GET_ISR You called this function from an ISR +* +* +* Returns : The length of the string or 0 if the task does not exist. +********************************************************************************************************* +*/ + +#if OS_TASK_NAME_SIZE > 1 +INT8U OSTaskNameGet (INT8U prio, INT8U *pname, INT8U *perr) +{ + OS_TCB *ptcb; + INT8U len; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return (0); + } + if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */ + if (prio != OS_PRIO_SELF) { + *perr = OS_ERR_PRIO_INVALID; /* No */ + return (0); + } + } + 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 */ + *perr = OS_ERR_NAME_GET_ISR; + return (0); + } + OS_ENTER_CRITICAL(); + if (prio == OS_PRIO_SELF) { /* See if caller desires it's own name */ + prio = OSTCBCur->OSTCBPrio; + } + ptcb = OSTCBPrioTbl[prio]; + if (ptcb == (OS_TCB *)0) { /* Does task exist? */ + OS_EXIT_CRITICAL(); /* No */ + *perr = OS_ERR_TASK_NOT_EXIST; + return (0); + } + if (ptcb == OS_TCB_RESERVED) { /* Task assigned to a Mutex? */ + OS_EXIT_CRITICAL(); /* Yes */ + *perr = OS_ERR_TASK_NOT_EXIST; + return (0); + } + len = OS_StrCopy(pname, ptcb->OSTCBTaskName); /* Yes, copy name from TCB */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; + return (len); +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* ASSIGN A NAME TO A TASK +* +* Description: This function is used to set the name of a task. +* +* Arguments : prio is the priority of the task that you want the assign a name to. +* +* pname is a pointer to an ASCII string that contains the name of the task. The ASCII +* string must be NUL terminated. +* +* perr is a pointer to an error code that can contain one of the following values: +* +* OS_ERR_NONE if the requested task is resumed +* OS_ERR_TASK_NOT_EXIST if the task has not been created or is assigned to a Mutex +* OS_ERR_TASK_NAME_TOO_LONG if the name you are giving to the task exceeds the +* storage capacity of a task name as specified by +* OS_TASK_NAME_SIZE. +* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname' +* OS_ERR_PRIO_INVALID if you specified an invalid priority: +* A higher value than the idle task or not OS_PRIO_SELF. +* OS_ERR_NAME_SET_ISR if you called this function from an ISR +* +* Returns : None +********************************************************************************************************* +*/ +#if OS_TASK_NAME_SIZE > 1 +void OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *perr) +{ + INT8U len; + OS_TCB *ptcb; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate 'perr' */ + return; + } + if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */ + if (prio != OS_PRIO_SELF) { + *perr = OS_ERR_PRIO_INVALID; /* No */ + return; + } + } + 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 */ + *perr = OS_ERR_NAME_SET_ISR; + return; + } + OS_ENTER_CRITICAL(); + if (prio == OS_PRIO_SELF) { /* See if caller desires to set it's own name */ + prio = OSTCBCur->OSTCBPrio; + } + ptcb = OSTCBPrioTbl[prio]; + if (ptcb == (OS_TCB *)0) { /* Does task exist? */ + OS_EXIT_CRITICAL(); /* No */ + *perr = OS_ERR_TASK_NOT_EXIST; + return; + } + if (ptcb == OS_TCB_RESERVED) { /* Task assigned to a Mutex? */ + OS_EXIT_CRITICAL(); /* Yes */ + *perr = OS_ERR_TASK_NOT_EXIST; + return; + } + len = OS_StrLen(pname); /* Yes, Can we fit the string in the TCB? */ + if (len > (OS_TASK_NAME_SIZE - 1)) { /* No */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_TASK_NAME_TOO_LONG; + return; + } + (void)OS_StrCopy(ptcb->OSTCBTaskName, pname); /* Yes, copy to TCB */ + OS_EXIT_CRITICAL(); + *perr = OS_ERR_NONE; +} +#endif + +/*$PAGE*/ +/* +********************************************************************************************************* +* RESUME A SUSPENDED TASK +* +* Description: This function is called to resume a previously suspended task. This is the only call that +* will remove an explicit task suspension. +* +* Arguments : prio is the priority of the task to resume. +* +* Returns : OS_ERR_NONE if the requested task is resumed +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. >= OS_LOWEST_PRIO) +* OS_ERR_TASK_RESUME_PRIO if the task to resume does not exist +* OS_ERR_TASK_NOT_EXIST if the task is assigned to a Mutex PIP +* OS_ERR_TASK_NOT_SUSPENDED if the task to resume has not been suspended +********************************************************************************************************* +*/ + +#if OS_TASK_SUSPEND_EN > 0 +INT8U OSTaskResume (INT8U prio) +{ + OS_TCB *ptcb; +#if OS_CRITICAL_METHOD == 3 /* Storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#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(); + ptcb = OSTCBPrioTbl[prio]; + if (ptcb == (OS_TCB *)0) { /* Task to suspend must exist */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_RESUME_PRIO); + } + if (ptcb == OS_TCB_RESERVED) { /* See if assigned to Mutex */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); + } + if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended */ + ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND; /* Remove suspension */ + if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is now ready */ + if (ptcb->OSTCBDly == 0) { + OSRdyGrp |= ptcb->OSTCBBitY; /* Yes, Make task ready to run */ + OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; + OS_EXIT_CRITICAL(); + if (OSRunning == OS_TRUE) { + OS_Sched(); /* Find new highest priority task */ + } + } else { + OS_EXIT_CRITICAL(); + } + } else { /* Must be pending on event */ + OS_EXIT_CRITICAL(); + } + return (OS_ERR_NONE); + } + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_SUSPENDED); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* STACK CHECKING +* +* Description: This function is called to check the amount of free memory left on the specified task's +* stack. +* +* Arguments : prio is the task priority +* +* p_stk_data is a pointer to a data structure of type OS_STK_DATA. +* +* Returns : OS_ERR_NONE upon success +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. > OS_LOWEST_PRIO) or, you have not specified OS_PRIO_SELF. +* OS_ERR_TASK_NOT_EXIST if the desired task has not been created or is assigned to a Mutex PIP +* OS_ERR_TASK_OPT if you did NOT specified OS_TASK_OPT_STK_CHK when the task was created +* OS_ERR_PDATA_NULL if 'p_stk_data' is a NULL pointer +********************************************************************************************************* +*/ +#if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) +INT8U OSTaskStkChk (INT8U prio, OS_STK_DATA *p_stk_data) +{ + OS_TCB *ptcb; + OS_STK *pchk; + INT32U nfree; + INT32U size; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (prio > OS_LOWEST_PRIO) { /* Make sure task priority is valid */ + if (prio != OS_PRIO_SELF) { + return (OS_ERR_PRIO_INVALID); + } + } + if (p_stk_data == (OS_STK_DATA *)0) { /* Validate 'p_stk_data' */ + return (OS_ERR_PDATA_NULL); + } +#endif + p_stk_data->OSFree = 0; /* Assume failure, set to 0 size */ + p_stk_data->OSUsed = 0; + OS_ENTER_CRITICAL(); + if (prio == OS_PRIO_SELF) { /* See if check for SELF */ + prio = OSTCBCur->OSTCBPrio; + } + ptcb = OSTCBPrioTbl[prio]; + if (ptcb == (OS_TCB *)0) { /* Make sure task exist */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); + } + if (ptcb == OS_TCB_RESERVED) { + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); + } + if ((ptcb->OSTCBOpt & OS_TASK_OPT_STK_CHK) == 0) { /* Make sure stack checking option is set */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_OPT); + } + nfree = 0; + size = ptcb->OSTCBStkSize; + pchk = ptcb->OSTCBStkBottom; + OS_EXIT_CRITICAL(); +#if OS_STK_GROWTH == 1 + while (*pchk++ == (OS_STK)0) { /* Compute the number of zero entries on the stk */ + nfree++; + } +#else + while (*pchk-- == (OS_STK)0) { + nfree++; + } +#endif + p_stk_data->OSFree = nfree * sizeof(OS_STK); /* Compute number of free bytes on the stack */ + p_stk_data->OSUsed = (size - nfree) * sizeof(OS_STK); /* Compute number of bytes used on the stack */ + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* SUSPEND A TASK +* +* Description: This function is called to suspend a task. The task can be the calling task if the +* priority passed to OSTaskSuspend() is the priority of the calling task or OS_PRIO_SELF. +* +* Arguments : prio is the priority of the task to suspend. If you specify OS_PRIO_SELF, the +* calling task will suspend itself and rescheduling will occur. +* +* Returns : OS_ERR_NONE if the requested task is suspended +* OS_ERR_TASK_SUSPEND_IDLE if you attempted to suspend the idle task which is not allowed. +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. >= OS_LOWEST_PRIO) or, you have not specified OS_PRIO_SELF. +* OS_ERR_TASK_SUSPEND_PRIO if the task to suspend does not exist +* OS_ERR_TASK_NOT_EXITS if the task is assigned to a Mutex PIP +* +* Note : You should use this function with great care. If you suspend a task that is waiting for +* an event (i.e. a message, a semaphore, a queue ...) you will prevent this task from +* running when the event arrives. +********************************************************************************************************* +*/ + +#if OS_TASK_SUSPEND_EN > 0 +INT8U OSTaskSuspend (INT8U prio) +{ + BOOLEAN self; + OS_TCB *ptcb; + INT8U y; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (prio == OS_TASK_IDLE_PRIO) { /* Not allowed to suspend idle task */ + return (OS_ERR_TASK_SUSPEND_IDLE); + } + if (prio >= OS_LOWEST_PRIO) { /* Task priority valid ? */ + if (prio != OS_PRIO_SELF) { + return (OS_ERR_PRIO_INVALID); + } + } +#endif + OS_ENTER_CRITICAL(); + if (prio == OS_PRIO_SELF) { /* See if suspend SELF */ + prio = OSTCBCur->OSTCBPrio; + self = OS_TRUE; + } else if (prio == OSTCBCur->OSTCBPrio) { /* See if suspending self */ + self = OS_TRUE; + } else { + self = OS_FALSE; /* No suspending another task */ + } + ptcb = OSTCBPrioTbl[prio]; + if (ptcb == (OS_TCB *)0) { /* Task to suspend must exist */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_SUSPEND_PRIO); + } + if (ptcb == OS_TCB_RESERVED) { /* See if assigned to Mutex */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); + } + y = ptcb->OSTCBY; + OSRdyTbl[y] &= ~ptcb->OSTCBBitX; /* Make task not ready */ + if (OSRdyTbl[y] == 0) { + OSRdyGrp &= ~ptcb->OSTCBBitY; + } + ptcb->OSTCBStat |= OS_STAT_SUSPEND; /* Status of task is 'SUSPENDED' */ + OS_EXIT_CRITICAL(); + if (self == OS_TRUE) { /* Context switch only if SELF */ + OS_Sched(); /* Find new highest priority task */ + } + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* QUERY A TASK +* +* Description: This function is called to obtain a copy of the desired task's TCB. +* +* Arguments : prio is the priority of the task to obtain information from. +* +* p_task_data is a pointer to where the desired task's OS_TCB will be stored. +* +* Returns : OS_ERR_NONE if the requested task is suspended +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. > OS_LOWEST_PRIO) or, you have not specified OS_PRIO_SELF. +* OS_ERR_PRIO if the desired task has not been created +* OS_ERR_TASK_NOT_EXIST if the task is assigned to a Mutex PIP +* OS_ERR_PDATA_NULL if 'p_task_data' is a NULL pointer +********************************************************************************************************* +*/ + +#if OS_TASK_QUERY_EN > 0 +INT8U OSTaskQuery (INT8U prio, OS_TCB *p_task_data) +{ + OS_TCB *ptcb; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + +#if OS_ARG_CHK_EN > 0 + if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */ + if (prio != OS_PRIO_SELF) { + return (OS_ERR_PRIO_INVALID); + } + } + if (p_task_data == (OS_TCB *)0) { /* Validate 'p_task_data' */ + return (OS_ERR_PDATA_NULL); + } +#endif + OS_ENTER_CRITICAL(); + if (prio == OS_PRIO_SELF) { /* See if suspend SELF */ + prio = OSTCBCur->OSTCBPrio; + } + ptcb = OSTCBPrioTbl[prio]; + if (ptcb == (OS_TCB *)0) { /* Task to query must exist */ + OS_EXIT_CRITICAL(); + return (OS_ERR_PRIO); + } + if (ptcb == OS_TCB_RESERVED) { /* Task to query must not be assigned to a Mutex */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); + } + /* Copy TCB into user storage area */ + OS_MemCopy((INT8U *)p_task_data, (INT8U *)ptcb, sizeof(OS_TCB)); + OS_EXIT_CRITICAL(); + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* CLEAR TASK STACK +* +* Description: This function is used to clear the stack of a task (i.e. write all zeros) +* +* Arguments : pbos is a pointer to the task's bottom of stack. If the configuration constant +* OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high +* memory to low memory). 'pbos' will thus point to the lowest (valid) memory +* location of the stack. If OS_STK_GROWTH is set to 0, 'pbos' will point to the +* highest memory location of the stack and the stack will grow with increasing +* memory locations. 'pbos' MUST point to a valid 'free' data item. +* +* size is the number of 'stack elements' to clear. +* +* opt contains additional information (or options) about the behavior of the task. The +* LOWER 8-bits are reserved by uC/OS-II while the upper 8 bits can be application +* specific. See OS_TASK_OPT_??? in uCOS-II.H. +* +* Returns : none +********************************************************************************************************* +*/ +#if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) +void OS_TaskStkClr (OS_STK *pbos, INT32U size, INT16U opt) +{ + if ((opt & OS_TASK_OPT_STK_CHK) != 0x0000) { /* See if stack checking has been enabled */ + if ((opt & OS_TASK_OPT_STK_CLR) != 0x0000) { /* See if stack needs to be cleared */ +#if OS_STK_GROWTH == 1 + while (size > 0) { /* Stack grows from HIGH to LOW memory */ + size--; + *pbos++ = (OS_STK)0; /* Clear from bottom of stack and up! */ + } +#else + while (size > 0) { /* Stack grows from LOW to HIGH memory */ + size--; + *pbos-- = (OS_STK)0; /* Clear from bottom of stack and down */ + } +#endif + } + } +} + +#endif diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_time.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_time.c new file mode 100644 index 0000000..540384e --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_time.c @@ -0,0 +1,268 @@ +/* +********************************************************************************************************* +* uC/OS-II +* The Real-Time Kernel +* TIME MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* File : OS_TIME.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +********************************************************************************************************* +*/ + +#ifndef OS_MASTER_FILE +#include +#endif + +/* +********************************************************************************************************* +* DELAY TASK 'n' TICKS (n from 0 to 65535) +* +* Description: This function is called to delay execution of the currently running task until the +* specified number of system ticks expires. This, of course, directly equates to delaying +* the current task for some time to expire. No delay will result If the specified delay is +* 0. If the specified delay is greater than 0 then, a context switch will result. +* +* Arguments : ticks is the time delay that the task will be suspended in number of clock 'ticks'. +* Note that by specifying 0, the task will not be delayed. +* +* Returns : none +********************************************************************************************************* +*/ + +void OSTimeDly (INT16U ticks) +{ + INT8U y; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + return; + } + if (ticks > 0) { /* 0 means no delay! */ + OS_ENTER_CRITICAL(); + y = OSTCBCur->OSTCBY; /* Delay current task */ + OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX; + if (OSRdyTbl[y] == 0) { + OSRdyGrp &= ~OSTCBCur->OSTCBBitY; + } + OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB */ + OS_EXIT_CRITICAL(); + OS_Sched(); /* Find next task to run! */ + } +} +/*$PAGE*/ +/* +********************************************************************************************************* +* DELAY TASK FOR SPECIFIED TIME +* +* Description: This function is called to delay execution of the currently running task until some time +* expires. This call allows you to specify the delay time in HOURS, MINUTES, SECONDS and +* MILLISECONDS instead of ticks. +* +* Arguments : hours specifies the number of hours that the task will be delayed (max. is 255) +* minutes specifies the number of minutes (max. 59) +* seconds specifies the number of seconds (max. 59) +* milli specifies the number of milliseconds (max. 999) +* +* Returns : OS_ERR_NONE +* OS_ERR_TIME_INVALID_MINUTES +* OS_ERR_TIME_INVALID_SECONDS +* OS_ERR_TIME_INVALID_MS +* OS_ERR_TIME_ZERO_DLY +* OS_ERR_TIME_DLY_ISR +* +* Note(s) : The resolution on the milliseconds depends on the tick rate. For example, you can't do +* a 10 mS delay if the ticker interrupts every 100 mS. In this case, the delay would be +* set to 0. The actual delay is rounded to the nearest tick. +********************************************************************************************************* +*/ + +#if OS_TIME_DLY_HMSM_EN > 0 +INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U ms) +{ + INT32U ticks; + INT16U loops; + + + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + return (OS_ERR_TIME_DLY_ISR); + } +#if OS_ARG_CHK_EN > 0 + if (hours == 0) { + if (minutes == 0) { + if (seconds == 0) { + if (ms == 0) { + return (OS_ERR_TIME_ZERO_DLY); + } + } + } + } + if (minutes > 59) { + return (OS_ERR_TIME_INVALID_MINUTES); /* Validate arguments to be within range */ + } + if (seconds > 59) { + return (OS_ERR_TIME_INVALID_SECONDS); + } + if (ms > 999) { + 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 + + OS_TICKS_PER_SEC * ((INT32U)ms + 500L / OS_TICKS_PER_SEC) / 1000L; + loops = (INT16U)(ticks >> 16); /* Compute the integral number of 65536 tick delays */ + ticks = ticks & 0xFFFFL; /* Obtain the fractional number of ticks */ + OSTimeDly((INT16U)ticks); + while (loops > 0) { + OSTimeDly((INT16U)32768u); + OSTimeDly((INT16U)32768u); + loops--; + } + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* RESUME A DELAYED TASK +* +* Description: This function is used resume a task that has been delayed through a call to either +* OSTimeDly() or OSTimeDlyHMSM(). Note that you can call this function to resume a +* task that is waiting for an event with timeout. This would make the task look +* like a timeout occurred. +* +* Also, you cannot resume a task that has called OSTimeDlyHMSM() with a combined time that +* exceeds 65535 clock ticks. In other words, if the clock tick runs at 100 Hz then, you will +* not be able to resume a delayed task that called OSTimeDlyHMSM(0, 10, 55, 350) or higher: +* +* (10 Minutes * 60 + 55 Seconds + 0.35) * 100 ticks/second. +* +* Arguments : prio specifies the priority of the task to resume +* +* Returns : OS_ERR_NONE Task has been resumed +* OS_ERR_PRIO_INVALID if the priority you specify is higher that the maximum allowed +* (i.e. >= OS_LOWEST_PRIO) +* OS_ERR_TIME_NOT_DLY Task is not waiting for time to expire +* OS_ERR_TASK_NOT_EXIST The desired task has not been created or has been assigned to a Mutex. +********************************************************************************************************* +*/ + +#if OS_TIME_DLY_RESUME_EN > 0 +INT8U OSTimeDlyResume (INT8U prio) +{ + OS_TCB *ptcb; +#if OS_CRITICAL_METHOD == 3 /* Storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + if (prio >= OS_LOWEST_PRIO) { + return (OS_ERR_PRIO_INVALID); + } + OS_ENTER_CRITICAL(); + ptcb = OSTCBPrioTbl[prio]; /* Make sure that task exist */ + if (ptcb == (OS_TCB *)0) { + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); /* The task does not exist */ + } + if (ptcb == OS_TCB_RESERVED) { + OS_EXIT_CRITICAL(); + return (OS_ERR_TASK_NOT_EXIST); /* The task does not exist */ + } + if (ptcb->OSTCBDly == 0) { /* See if task is delayed */ + OS_EXIT_CRITICAL(); + return (OS_ERR_TIME_NOT_DLY); /* Indicate that task was not delayed */ + } + + ptcb->OSTCBDly = 0; /* Clear the time delay */ + if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) { + ptcb->OSTCBStat &= ~OS_STAT_PEND_ANY; /* Yes, Clear status flag */ + ptcb->OSTCBStatPend = OS_STAT_PEND_TO; /* Indicate PEND timeout */ + } else { + ptcb->OSTCBStatPend = OS_STAT_PEND_OK; + } + if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended? */ + OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make ready */ + OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; + OS_EXIT_CRITICAL(); + OS_Sched(); /* See if this is new highest priority */ + } else { + OS_EXIT_CRITICAL(); /* Task may be suspended */ + } + return (OS_ERR_NONE); +} +#endif +/*$PAGE*/ +/* +********************************************************************************************************* +* GET CURRENT SYSTEM TIME +* +* Description: This function is used by your application to obtain the current value of the 32-bit +* counter which keeps track of the number of clock ticks. +* +* Arguments : none +* +* Returns : The current value of OSTime +********************************************************************************************************* +*/ + +#if OS_TIME_GET_SET_EN > 0 +INT32U OSTimeGet (void) +{ + INT32U ticks; +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + OS_ENTER_CRITICAL(); + ticks = OSTime; + OS_EXIT_CRITICAL(); + return (ticks); +} +#endif + +/* +********************************************************************************************************* +* SET SYSTEM CLOCK +* +* Description: This function sets the 32-bit counter which keeps track of the number of clock ticks. +* +* Arguments : ticks specifies the new value that OSTime needs to take. +* +* Returns : none +********************************************************************************************************* +*/ + +#if OS_TIME_GET_SET_EN > 0 +void OSTimeSet (INT32U ticks) +{ +#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ + OS_CPU_SR cpu_sr = 0; +#endif + + + + OS_ENTER_CRITICAL(); + OSTime = ticks; + OS_EXIT_CRITICAL(); +} +#endif diff --git a/FPGA_nios/hit_pat_bsp/UCOSII/src/os_tmr.c b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_tmr.c new file mode 100644 index 0000000..c80811f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/UCOSII/src/os_tmr.c @@ -0,0 +1,1116 @@ +/* +************************************************************************************************************************ +* uC/OS-II +* The Real-Time Kernel +* TIMER MANAGEMENT +* +* (c) Copyright 1992-2007, Micrium, Weston, FL +* All Rights Reserved +* +* +* File : OS_TMR.C +* By : Jean J. Labrosse +* Version : V2.86 +* +* LICENSING TERMS: +* --------------- +* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research. +* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license +* its use in your product. We provide ALL the source code for your convenience and to help you experience +* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a +* licensing fee. +************************************************************************************************************************ +*/ + +#include + +/* +************************************************************************************************************************ +* NOTES +* +* 1) Your application MUST define the following #define constants: +* +* OS_TASK_TMR_PRIO The priority of the Timer management task +* OS_TASK_TMR_STK_SIZE The size of the Timer management task's stack +* +* 2) You must call OSTmrSignal() to notify the Timer management task that it's time to update the timers. +************************************************************************************************************************ +*/ + +/* +************************************************************************************************************************ +* CONSTANTS +************************************************************************************************************************ +*/ + +#define OS_TMR_LINK_DLY 0 +#define OS_TMR_LINK_PERIODIC 1 + +/* +************************************************************************************************************************ +* LOCAL PROTOTYPES +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +static OS_TMR *OSTmr_Alloc (void); +static void OSTmr_Free (OS_TMR *ptmr); +static void OSTmr_InitTask (void); +static void OSTmr_Link (OS_TMR *ptmr, INT8U type); +static void OSTmr_Unlink (OS_TMR *ptmr); +static void OSTmr_Lock (void); +static void OSTmr_Unlock (void); +static void OSTmr_Task (void *p_arg); +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* CREATE A TIMER +* +* Description: This function is called by your application code to create a timer. +* +* Arguments : dly Initial delay. +* If the timer is configured for ONE-SHOT mode, this is the timeout used +* If the timer is configured for PERIODIC mode, this is the first timeout to wait for +* before the timer starts entering periodic mode +* +* period The 'period' being repeated for the timer. +* If you specified 'OS_TMR_OPT_PERIODIC' as an option, when the timer expires, it will +* automatically restart with the same period. +* +* opt Specifies either: +* OS_TMR_OPT_ONE_SHOT The timer counts down only once +* OS_TMR_OPT_PERIODIC The timer counts down and then reloads itself +* +* callback Is a pointer to a callback function that will be called when the timer expires. The +* callback function must be declared as follows: +* +* void MyCallback (OS_TMR *ptmr, void *p_arg); +* +* callback_arg Is an argument (a pointer) that is passed to the callback function when it is called. +* +* pname Is a pointer to an ASCII string that is used to name the timer. Names are useful for +* debugging. The length of the ASCII string for the name can be as big as: +* +* OS_TMR_CFG_NAME_SIZE and should be found in OS_CFG.H +* +* perr Is a pointer to an error code. '*perr' will contain one of the following: +* OS_ERR_NONE +* OS_ERR_TMR_INVALID_DLY you specified an invalid delay +* OS_ERR_TMR_INVALID_PERIOD you specified an invalid period +* OS_ERR_TMR_INVALID_OPT you specified an invalid option +* OS_ERR_TMR_ISR if the call was made from an ISR +* OS_ERR_TMR_NON_AVAIL if there are no free timers from the timer pool +* OS_ERR_TMR_NAME_TOO_LONG if the timer name is too long to fit +* +* Returns : A pointer to an OS_TMR data structure. +* This is the 'handle' that your application will use to reference the timer created. +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +OS_TMR *OSTmrCreate (INT32U dly, + INT32U period, + INT8U opt, + OS_TMR_CALLBACK callback, + void *callback_arg, + INT8U *pname, + INT8U *perr) +{ + OS_TMR *ptmr; +#if OS_TMR_CFG_NAME_SIZE > 0 + INT8U len; +#endif + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate arguments */ + return ((OS_TMR *)0); + } + switch (opt) { + case OS_TMR_OPT_PERIODIC: + if (period == 0) { + *perr = OS_ERR_TMR_INVALID_PERIOD; + return ((OS_TMR *)0); + } + break; + + case OS_TMR_OPT_ONE_SHOT: + if (dly == 0) { + *perr = OS_ERR_TMR_INVALID_DLY; + return ((OS_TMR *)0); + } + break; + + default: + *perr = OS_ERR_TMR_INVALID_OPT; + return ((OS_TMR *)0); + } +#endif + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + *perr = OS_ERR_TMR_ISR; + return ((OS_TMR *)0); + } + OSTmr_Lock(); + ptmr = OSTmr_Alloc(); /* Obtain a timer from the free pool */ + if (ptmr == (OS_TMR *)0) { + OSTmr_Unlock(); + *perr = OS_ERR_TMR_NON_AVAIL; + return ((OS_TMR *)0); + } + ptmr->OSTmrState = OS_TMR_STATE_STOPPED; /* Indicate that timer is not running yet */ + ptmr->OSTmrDly = dly; + ptmr->OSTmrPeriod = period; + ptmr->OSTmrOpt = opt; + ptmr->OSTmrCallback = callback; + ptmr->OSTmrCallbackArg = callback_arg; +#if OS_TMR_CFG_NAME_SIZE > 0 + if (pname !=(INT8U *)0) { + len = OS_StrLen(pname); /* Copy timer name */ + if (len < OS_TMR_CFG_NAME_SIZE) { + (void)OS_StrCopy(ptmr->OSTmrName, pname); + } else { +#if OS_TMR_CFG_NAME_SIZE > 1 + ptmr->OSTmrName[0] = '#'; /* Invalid size specified */ + ptmr->OSTmrName[1] = OS_ASCII_NUL; +#endif + *perr = OS_ERR_TMR_NAME_TOO_LONG; + OSTmr_Unlock(); + return (ptmr); + } + } +#endif + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + return (ptmr); +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* DELETE A TIMER +* +* Description: This function is called by your application code to delete a timer. +* +* Arguments : ptmr Is a pointer to the timer to stop and delete. +* +* perr Is a pointer to an error code. '*perr' will contain one of the following: +* OS_ERR_NONE +* OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer +* OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR +* OS_ERR_TMR_ISR if the function was called from an ISR +* OS_ERR_TMR_INACTIVE if the timer was not created +* OS_ERR_TMR_INVALID_STATE the timer is in an invalid state +* +* Returns : OS_TRUE If the call was successful +* OS_FALSE If not +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +BOOLEAN OSTmrDel (OS_TMR *ptmr, + INT8U *perr) +{ +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate arguments */ + return (OS_FALSE); + } + if (ptmr == (OS_TMR *)0) { + *perr = OS_ERR_TMR_INVALID; + return (OS_FALSE); + } +#endif + if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */ + *perr = OS_ERR_TMR_INVALID_TYPE; + return (OS_FALSE); + } + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + *perr = OS_ERR_TMR_ISR; + return (OS_FALSE); + } + OSTmr_Lock(); + switch (ptmr->OSTmrState) { + case OS_TMR_STATE_RUNNING: + OSTmr_Unlink(ptmr); /* Remove from current wheel spoke */ + OSTmr_Free(ptmr); /* Return timer to free list of timers */ + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + return (OS_TRUE); + + case OS_TMR_STATE_STOPPED: /* Timer has not started or ... */ + case OS_TMR_STATE_COMPLETED: /* ... timer has completed the ONE-SHOT time */ + OSTmr_Free(ptmr); /* Return timer to free list of timers */ + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + return (OS_TRUE); + + case OS_TMR_STATE_UNUSED: /* Already deleted */ + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INACTIVE; + return (OS_FALSE); + + default: + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INVALID_STATE; + return (OS_FALSE); + } +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* GET THE NAME OF A TIMER +* +* Description: This function is called to obtain the name of a timer. +* +* Arguments : ptmr Is a pointer to the timer to obtain the name for +* +* pdest Is a pointer to where the name of the timer will be placed. It is the caller's responsibility +* to ensure that he has sufficient storage in the destination, i.e. at least OS_TMR_CFG_NAME_SIZE +* +* perr Is a pointer to an error code. '*perr' will contain one of the following: +* OS_ERR_NONE The call was successful +* OS_ERR_TMR_INVALID_DEST 'pdest' is a NULL pointer +* OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer +* OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR +* OS_ERR_NAME_GET_ISR if the call was made from an ISR +* OS_ERR_TMR_INACTIVE 'ptmr' points to a timer that is not active +* OS_ERR_TMR_INVALID_STATE the timer is in an invalid state +* +* Returns : The length of the string or 0 if the timer does not exist. +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 && OS_TMR_CFG_NAME_SIZE > 0 +INT8U OSTmrNameGet (OS_TMR *ptmr, + INT8U *pdest, + INT8U *perr) +{ + INT8U len; + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { + return (0); + } + if (pdest == (INT8U *)0) { + *perr = OS_ERR_TMR_INVALID_DEST; + return (0); + } + if (ptmr == (OS_TMR *)0) { + *perr = OS_ERR_TMR_INVALID; + return (0); + } +#endif + if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */ + *perr = OS_ERR_TMR_INVALID_TYPE; + return (0); + } + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + *perr = OS_ERR_NAME_GET_ISR; + return (0); + } + OSTmr_Lock(); + switch (ptmr->OSTmrState) { + case OS_TMR_STATE_RUNNING: + case OS_TMR_STATE_STOPPED: + case OS_TMR_STATE_COMPLETED: + len = OS_StrCopy(pdest, ptmr->OSTmrName); + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + return (len); + + case OS_TMR_STATE_UNUSED: /* Timer is not allocated */ + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INACTIVE; + return (0); + + default: + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INVALID_STATE; + return (0); + } +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* GET HOW MUCH TIME IS LEFT BEFORE A TIMER EXPIRES +* +* Description: This function is called to get the number of ticks before a timer times out. +* +* Arguments : ptmr Is a pointer to the timer to obtain the remaining time from. +* +* perr Is a pointer to an error code. '*perr' will contain one of the following: +* OS_ERR_NONE +* OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer +* OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR +* OS_ERR_TMR_ISR if the call was made from an ISR +* OS_ERR_TMR_INACTIVE 'ptmr' points to a timer that is not active +* OS_ERR_TMR_INVALID_STATE the timer is in an invalid state +* +* Returns : The time remaining for the timer to expire. The time represents 'timer' increments. In other words, if +* OSTmr_Task() is signaled every 1/10 of a second then the returned value represents the number of 1/10 of +* a second remaining before the timer expires. +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +INT32U OSTmrRemainGet (OS_TMR *ptmr, + INT8U *perr) +{ + INT32U remain; + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { + return (0); + } + if (ptmr == (OS_TMR *)0) { + *perr = OS_ERR_TMR_INVALID; + return (0); + } +#endif + if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */ + *perr = OS_ERR_TMR_INVALID_TYPE; + return (0); + } + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + *perr = OS_ERR_TMR_ISR; + return (0); + } + OSTmr_Lock(); + switch (ptmr->OSTmrState) { + case OS_TMR_STATE_RUNNING: + remain = ptmr->OSTmrMatch - OSTmrTime; /* Determine how much time is left to timeout */ + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + return (remain); + + case OS_TMR_STATE_STOPPED: /* It's assumed that the timer has not started yet */ + switch (ptmr->OSTmrOpt) { + case OS_TMR_OPT_PERIODIC: + if (ptmr->OSTmrDly == 0) { + remain = ptmr->OSTmrPeriod; + } else { + remain = ptmr->OSTmrDly; + } + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + break; + + case OS_TMR_OPT_ONE_SHOT: + default: + remain = ptmr->OSTmrDly; + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + break; + } + return (remain); + + case OS_TMR_STATE_COMPLETED: /* Only ONE-SHOT that timed out can be in this state */ + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + return (0); + + case OS_TMR_STATE_UNUSED: + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INACTIVE; + return (0); + + default: + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INVALID_STATE; + return (0); + } +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* FIND OUT WHAT STATE A TIMER IS IN +* +* Description: This function is called to determine what state the timer is in: +* +* OS_TMR_STATE_UNUSED the timer has not been created +* OS_TMR_STATE_STOPPED the timer has been created but has not been started or has been stopped +* OS_TMR_COMPLETED the timer is in ONE-SHOT mode and has completed it's timeout +* OS_TMR_RUNNING the timer is currently running +* +* Arguments : ptmr Is a pointer to the desired timer +* +* perr Is a pointer to an error code. '*perr' will contain one of the following: +* OS_ERR_NONE +* OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer +* OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR +* OS_ERR_TMR_ISR if the call was made from an ISR +* OS_ERR_TMR_INACTIVE 'ptmr' points to a timer that is not active +* OS_ERR_TMR_INVALID_STATE if the timer is not in a valid state +* +* Returns : The current state of the timer (see description). +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +INT8U OSTmrStateGet (OS_TMR *ptmr, + INT8U *perr) +{ + INT8U state; + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { + return (0); + } + if (ptmr == (OS_TMR *)0) { + *perr = OS_ERR_TMR_INVALID; + return (0); + } +#endif + if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */ + *perr = OS_ERR_TMR_INVALID_TYPE; + return (0); + } + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + *perr = OS_ERR_TMR_ISR; + return (0); + } + OSTmr_Lock(); + state = ptmr->OSTmrState; + switch (state) { + case OS_TMR_STATE_UNUSED: + case OS_TMR_STATE_STOPPED: + case OS_TMR_STATE_COMPLETED: + case OS_TMR_STATE_RUNNING: + *perr = OS_ERR_NONE; + break; + + default: + *perr = OS_ERR_TMR_INVALID_STATE; + break; + } + OSTmr_Unlock(); + return (state); +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* START A TIMER +* +* Description: This function is called by your application code to start a timer. +* +* Arguments : ptmr Is a pointer to an OS_TMR +* +* perr Is a pointer to an error code. '*perr' will contain one of the following: +* OS_ERR_NONE +* OS_ERR_TMR_INVALID +* OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR +* OS_ERR_TMR_ISR if the call was made from an ISR +* OS_ERR_TMR_INACTIVE if the timer was not created +* OS_ERR_TMR_INVALID_STATE the timer is in an invalid state +* +* Returns : OS_TRUE if the timer was started +* OS_FALSE if an error was detected +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +BOOLEAN OSTmrStart (OS_TMR *ptmr, + INT8U *perr) +{ +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate arguments */ + return (OS_FALSE); + } + if (ptmr == (OS_TMR *)0) { + *perr = OS_ERR_TMR_INVALID; + return (OS_FALSE); + } +#endif + if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */ + *perr = OS_ERR_TMR_INVALID_TYPE; + return (OS_FALSE); + } + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + *perr = OS_ERR_TMR_ISR; + return (OS_FALSE); + } + OSTmr_Lock(); + switch (ptmr->OSTmrState) { + case OS_TMR_STATE_RUNNING: /* Restart the timer */ + OSTmr_Unlink(ptmr); /* ... Stop the timer */ + OSTmr_Link(ptmr, OS_TMR_LINK_DLY); /* ... Link timer to timer wheel */ + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + return (OS_TRUE); + + case OS_TMR_STATE_STOPPED: /* Start the timer */ + case OS_TMR_STATE_COMPLETED: + OSTmr_Link(ptmr, OS_TMR_LINK_DLY); /* ... Link timer to timer wheel */ + OSTmr_Unlock(); + *perr = OS_ERR_NONE; + return (OS_TRUE); + + case OS_TMR_STATE_UNUSED: /* Timer not created */ + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INACTIVE; + return (OS_FALSE); + + default: + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INVALID_STATE; + return (OS_FALSE); + } +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* STOP A TIMER +* +* Description: This function is called by your application code to stop a timer. +* +* Arguments : ptmr Is a pointer to the timer to stop. +* +* opt Allows you to specify an option to this functions which can be: +* +* OS_TMR_OPT_NONE Do nothing special but stop the timer +* OS_TMR_OPT_CALLBACK Execute the callback function, pass it the callback argument +* specified when the timer was created. +* OS_TMR_OPT_CALLBACK_ARG Execute the callback function, pass it the callback argument +* specified in THIS function call +* +* callback_arg Is a pointer to a 'new' callback argument that can be passed to the callback function +* instead of the timer's callback argument. In other words, use 'callback_arg' passed in +* THIS function INSTEAD of ptmr->OSTmrCallbackArg +* +* perr Is a pointer to an error code. '*perr' will contain one of the following: +* OS_ERR_NONE +* OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer +* OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR +* OS_ERR_TMR_ISR if the function was called from an ISR +* OS_ERR_TMR_INACTIVE if the timer was not created +* OS_ERR_TMR_INVALID_OPT if you specified an invalid option for 'opt' +* OS_ERR_TMR_STOPPED if the timer was already stopped +* OS_ERR_TMR_INVALID_STATE the timer is in an invalid state +* OS_ERR_TMR_NO_CALLBACK if the timer does not have a callback function defined +* +* Returns : OS_TRUE If we stopped the timer (if the timer is already stopped, we also return OS_TRUE) +* OS_FALSE If not +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +BOOLEAN OSTmrStop (OS_TMR *ptmr, + INT8U opt, + void *callback_arg, + INT8U *perr) +{ + OS_TMR_CALLBACK pfnct; + + +#if OS_ARG_CHK_EN > 0 + if (perr == (INT8U *)0) { /* Validate arguments */ + return (OS_FALSE); + } + if (ptmr == (OS_TMR *)0) { + *perr = OS_ERR_TMR_INVALID; + return (OS_FALSE); + } +#endif + if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */ + *perr = OS_ERR_TMR_INVALID_TYPE; + return (OS_FALSE); + } + if (OSIntNesting > 0) { /* See if trying to call from an ISR */ + *perr = OS_ERR_TMR_ISR; + return (OS_FALSE); + } + OSTmr_Lock(); + switch (ptmr->OSTmrState) { + case OS_TMR_STATE_RUNNING: + OSTmr_Unlink(ptmr); /* Remove from current wheel spoke */ + *perr = OS_ERR_NONE; + switch (opt) { + case OS_TMR_OPT_CALLBACK: + pfnct = ptmr->OSTmrCallback; /* Execute callback function if available ... */ + if (pfnct != (OS_TMR_CALLBACK)0) { + (*pfnct)((void *)ptmr, ptmr->OSTmrCallbackArg); /* Use callback arg when timer was created */ + } else { + *perr = OS_ERR_TMR_NO_CALLBACK; + } + break; + + case OS_TMR_OPT_CALLBACK_ARG: + pfnct = ptmr->OSTmrCallback; /* Execute callback function if available ... */ + if (pfnct != (OS_TMR_CALLBACK)0) { + (*pfnct)((void *)ptmr, callback_arg); /* ... using the 'callback_arg' provided in call */ + } else { + *perr = OS_ERR_TMR_NO_CALLBACK; + } + break; + + case OS_TMR_OPT_NONE: + break; + + default: + *perr = OS_ERR_TMR_INVALID_OPT; + break; + } + OSTmr_Unlock(); + return (OS_TRUE); + + case OS_TMR_STATE_COMPLETED: /* Timer has already completed the ONE-SHOT or ... */ + case OS_TMR_STATE_STOPPED: /* ... timer has not started yet. */ + OSTmr_Unlock(); + *perr = OS_ERR_TMR_STOPPED; + return (OS_TRUE); + + case OS_TMR_STATE_UNUSED: /* Timer was not created */ + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INACTIVE; + return (OS_FALSE); + + default: + OSTmr_Unlock(); + *perr = OS_ERR_TMR_INVALID_STATE; + return (OS_FALSE); + } +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* SIGNAL THAT IT'S TIME TO UPDATE THE TIMERS +* +* Description: This function is typically called by the ISR that occurs at the timer tick rate and is used to signal to +* OSTmr_Task() that it's time to update the timers. +* +* Arguments : none +* +* Returns : OS_ERR_NONE The call was successful and the timer task was signaled. +* OS_ERR_SEM_OVF If OSTmrSignal() was called more often than OSTmr_Task() can handle the timers. +* This would indicate that your system is heavily loaded. +* OS_ERR_EVENT_TYPE Unlikely you would get this error because the semaphore used for signaling is created +* by uC/OS-II. +* OS_ERR_PEVENT_NULL Again, unlikely you would ever get this error because the semaphore used for signaling +* is created by uC/OS-II. +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +INT8U OSTmrSignal (void) +{ + INT8U err; + + + err = OSSemPost(OSTmrSemSignal); + return (err); +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* ALLOCATE AND FREE A TIMER +* +* Description: This function is called to allocate a timer. +* +* Arguments : none +* +* Returns : a pointer to a timer if one is available +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +static OS_TMR *OSTmr_Alloc (void) +{ + OS_TMR *ptmr; + + + if (OSTmrFreeList == (OS_TMR *)0) { + return ((OS_TMR *)0); + } + ptmr = (OS_TMR *)OSTmrFreeList; + OSTmrFreeList = (OS_TMR *)ptmr->OSTmrNext; + ptmr->OSTmrNext = (OS_TCB *)0; + ptmr->OSTmrPrev = (OS_TCB *)0; + OSTmrUsed++; + OSTmrFree--; + return (ptmr); +} +#endif + + +/* +************************************************************************************************************************ +* RETURN A TIMER TO THE FREE LIST +* +* Description: This function is called to return a timer object to the free list of timers. +* +* Arguments : ptmr is a pointer to the timer to free +* +* Returns : none +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +static void OSTmr_Free (OS_TMR *ptmr) +{ + ptmr->OSTmrState = OS_TMR_STATE_UNUSED; /* Clear timer object fields */ + ptmr->OSTmrOpt = OS_TMR_OPT_NONE; + ptmr->OSTmrPeriod = 0; + ptmr->OSTmrMatch = 0; + ptmr->OSTmrCallback = (OS_TMR_CALLBACK)0; + ptmr->OSTmrCallbackArg = (void *)0; +#if OS_TMR_CFG_NAME_SIZE > 1 + ptmr->OSTmrName[0] = '?'; /* Unknown name */ + ptmr->OSTmrName[1] = OS_ASCII_NUL; +#endif + + ptmr->OSTmrPrev = (OS_TCB *)0; /* Chain timer to free list */ + ptmr->OSTmrNext = OSTmrFreeList; + OSTmrFreeList = ptmr; + + OSTmrUsed--; /* Update timer object statistics */ + OSTmrFree++; +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* INITIALIZATION +* INITIALIZE THE FREE LIST OF TIMERS +* +* Description: This function is called by OSInit() to initialize the free list of OS_TMRs. +* +* Arguments : none +* +* Returns : none +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +void OSTmr_Init (void) +{ +#if OS_EVENT_NAME_SIZE > 10 + INT8U err; +#endif + INT16U i; + OS_TMR *ptmr1; + OS_TMR *ptmr2; + + + OS_MemClr((INT8U *)&OSTmrTbl[0], sizeof(OSTmrTbl)); /* Clear all the TMRs */ + OS_MemClr((INT8U *)&OSTmrWheelTbl[0], sizeof(OSTmrWheelTbl)); /* Clear the timer wheel */ + + ptmr1 = &OSTmrTbl[0]; + ptmr2 = &OSTmrTbl[1]; + for (i = 0; i < (OS_TMR_CFG_MAX - 1); i++) { /* Init. list of free TMRs */ + ptmr1->OSTmrType = OS_TMR_TYPE; + ptmr1->OSTmrState = OS_TMR_STATE_UNUSED; /* Indicate that timer is inactive */ + ptmr1->OSTmrNext = (void *)ptmr2; /* Link to next timer */ +#if OS_TMR_CFG_NAME_SIZE > 1 + ptmr1->OSTmrName[0] = '?'; /* Unknown name */ + ptmr1->OSTmrName[1] = OS_ASCII_NUL; +#endif + ptmr1++; + ptmr2++; + } + ptmr1->OSTmrType = OS_TMR_TYPE; + ptmr1->OSTmrState = OS_TMR_STATE_UNUSED; /* Indicate that timer is inactive */ + ptmr1->OSTmrNext = (void *)0; /* Last OS_TMR */ +#if OS_TMR_CFG_NAME_SIZE > 1 + ptmr1->OSTmrName[0] = '?'; /* Unknown name */ + ptmr1->OSTmrName[1] = OS_ASCII_NUL; +#endif + OSTmrTime = 0; + OSTmrUsed = 0; + OSTmrFree = OS_TMR_CFG_MAX; + OSTmrFreeList = &OSTmrTbl[0]; + OSTmrSem = OSSemCreate(1); + OSTmrSemSignal = OSSemCreate(0); + +#if OS_EVENT_NAME_SIZE > 18 + OSEventNameSet(OSTmrSem, (INT8U *)"uC/OS-II TmrLock", &err);/* Assign names to semaphores */ +#else +#if OS_EVENT_NAME_SIZE > 10 + OSEventNameSet(OSTmrSem, (INT8U *)"OS-TmrLock", &err); +#endif +#endif + +#if OS_EVENT_NAME_SIZE > 18 + OSEventNameSet(OSTmrSemSignal, (INT8U *)"uC/OS-II TmrSignal", &err); +#else +#if OS_EVENT_NAME_SIZE > 10 + OSEventNameSet(OSTmrSemSignal, (INT8U *)"OS-TmrSig", &err); +#endif +#endif + + OSTmr_InitTask(); +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* INITIALIZE THE TIMER MANAGEMENT TASK +* +* Description: This function is called by OSTmrInit() to create the timer management task. +* +* Arguments : none +* +* Returns : none +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +static void OSTmr_InitTask (void) +{ +#if OS_TASK_NAME_SIZE > 6 + INT8U err; +#endif + + +#if OS_TASK_CREATE_EXT_EN > 0 + #if OS_STK_GROWTH == 1 + (void)OSTaskCreateExt(OSTmr_Task, + (void *)0, /* No arguments passed to OSTmrTask() */ + &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1], /* Set Top-Of-Stack */ + OS_TASK_TMR_PRIO, + OS_TASK_TMR_ID, + &OSTmrTaskStk[0], /* Set Bottom-Of-Stack */ + OS_TASK_TMR_STK_SIZE, + (void *)0, /* No TCB extension */ + OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear stack */ + #else + (void)OSTaskCreateExt(OSTmr_Task, + (void *)0, /* No arguments passed to OSTmrTask() */ + &OSTmrTaskStk[0], /* Set Top-Of-Stack */ + OS_TASK_TMR_PRIO, + OS_TASK_TMR_ID, + &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1], /* Set Bottom-Of-Stack */ + OS_TASK_TMR_STK_SIZE, + (void *)0, /* No TCB extension */ + OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear stack */ + #endif +#else + #if OS_STK_GROWTH == 1 + (void)OSTaskCreate(OSTmr_Task, + (void *)0, + &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1], + OS_TASK_TMR_PRIO); + #else + (void)OSTaskCreate(OSTmr_Task, + (void *)0, + &OSTmrTaskStk[0], + OS_TASK_TMR_PRIO); + #endif +#endif + +#if OS_TASK_NAME_SIZE > 12 + OSTaskNameSet(OS_TASK_TMR_PRIO, (INT8U *)"uC/OS-II Tmr", &err); +#else +#if OS_TASK_NAME_SIZE > 6 + OSTaskNameSet(OS_TASK_TMR_PRIO, (INT8U *)"OS-Tmr", &err); +#endif +#endif +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* INSERT A TIMER INTO THE TIMER WHEEL +* +* Description: This function is called to insert the timer into the timer wheel. The timer is always inserted at the +* beginning of the list. +* +* Arguments : ptmr Is a pointer to the timer to insert. +* +* type Is either: +* OS_TMR_LINK_PERIODIC Means to re-insert the timer after a period expired +* OS_TMR_LINK_DLY Means to insert the timer the first time +* +* Returns : none +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +static void OSTmr_Link (OS_TMR *ptmr, INT8U type) +{ + OS_TMR *ptmr1; + OS_TMR_WHEEL *pspoke; + INT16U spoke; + + + ptmr->OSTmrState = OS_TMR_STATE_RUNNING; + if (type == OS_TMR_LINK_PERIODIC) { /* Determine when timer will expire */ + ptmr->OSTmrMatch = ptmr->OSTmrPeriod + OSTmrTime; + } else { + if (ptmr->OSTmrDly == 0) { + ptmr->OSTmrMatch = ptmr->OSTmrPeriod + OSTmrTime; + } else { + ptmr->OSTmrMatch = ptmr->OSTmrDly + OSTmrTime; + } + } + spoke = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE); + pspoke = &OSTmrWheelTbl[spoke]; + + if (pspoke->OSTmrFirst == (OS_TMR *)0) { /* Link into timer wheel */ + pspoke->OSTmrFirst = ptmr; + ptmr->OSTmrNext = (OS_TMR *)0; + pspoke->OSTmrEntries = 1; + } else { + ptmr1 = pspoke->OSTmrFirst; /* Point to first timer in the spoke */ + pspoke->OSTmrFirst = ptmr; + ptmr->OSTmrNext = (void *)ptmr1; + ptmr1->OSTmrPrev = (void *)ptmr; + pspoke->OSTmrEntries++; + } + ptmr->OSTmrPrev = (void *)0; /* Timer always inserted as first node in list */ +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* REMOVE A TIMER FROM THE TIMER WHEEL +* +* Description: This function is called to remove the timer from the timer wheel. +* +* Arguments : ptmr Is a pointer to the timer to remove. +* +* Returns : none +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +static void OSTmr_Unlink (OS_TMR *ptmr) +{ + OS_TMR *ptmr1; + OS_TMR *ptmr2; + OS_TMR_WHEEL *pspoke; + INT16U spoke; + + + spoke = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE); + pspoke = &OSTmrWheelTbl[spoke]; + + if (pspoke->OSTmrFirst == ptmr) { /* See if timer to remove is at the beginning of list */ + ptmr1 = (OS_TMR *)ptmr->OSTmrNext; + pspoke->OSTmrFirst = (OS_TMR *)ptmr1; + if (ptmr1 != (OS_TMR *)0) { + ptmr1->OSTmrPrev = (void *)0; + } + } else { + ptmr1 = (OS_TMR *)ptmr->OSTmrPrev; /* Remove timer from somewhere in the list */ + ptmr2 = (OS_TMR *)ptmr->OSTmrNext; + ptmr1->OSTmrNext = ptmr2; + if (ptmr2 != (OS_TMR *)0) { + ptmr2->OSTmrPrev = (void *)ptmr1; + } + } + ptmr->OSTmrState = OS_TMR_STATE_STOPPED; + ptmr->OSTmrNext = (void *)0; + ptmr->OSTmrPrev = (void *)0; + pspoke->OSTmrEntries--; +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* TIMER MANAGER DATA STRUCTURE LOCKING MECHANISM +* +* Description: These functions are used to gain exclusive access to timer management data structures. +* +* Arguments : none +* +* Returns : none +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +static void OSTmr_Lock (void) +{ + INT8U err; + + + OSSemPend(OSTmrSem, 0, &err); + (void)err; +} +#endif + + + +#if OS_TMR_EN > 0 +static void OSTmr_Unlock (void) +{ + (void)OSSemPost(OSTmrSem); +} +#endif + +/*$PAGE*/ +/* +************************************************************************************************************************ +* TIMER MANAGEMENT TASK +* +* Description: This task is created by OSTmrInit(). +* +* Arguments : none +* +* Returns : none +************************************************************************************************************************ +*/ + +#if OS_TMR_EN > 0 +static void OSTmr_Task (void *p_arg) +{ + INT8U err; + OS_TMR *ptmr; + OS_TMR *ptmr_next; + OS_TMR_CALLBACK pfnct; + OS_TMR_WHEEL *pspoke; + INT16U spoke; + + + (void)p_arg; /* Not using 'p_arg', prevent compiler warning */ + for (;;) { + OSSemPend(OSTmrSemSignal, 0, &err); /* Wait for signal indicating time to update timers */ + OSTmr_Lock(); + OSTmrTime++; /* Increment the current time */ + spoke = (INT16U)(OSTmrTime % OS_TMR_CFG_WHEEL_SIZE); /* Position on current timer wheel entry */ + pspoke = &OSTmrWheelTbl[spoke]; + ptmr = pspoke->OSTmrFirst; + while (ptmr != (OS_TMR *)0) { + ptmr_next = (OS_TMR *)ptmr->OSTmrNext; /* Point to next timer to update because current ... */ + /* ... timer could get unlinked from the wheel. */ + if (OSTmrTime == ptmr->OSTmrMatch) { /* Process each timer that expires */ + pfnct = ptmr->OSTmrCallback; /* Execute callback function if available */ + if (pfnct != (OS_TMR_CALLBACK)0) { + (*pfnct)((void *)ptmr, ptmr->OSTmrCallbackArg); + } + OSTmr_Unlink(ptmr); /* Remove from current wheel spoke */ + if (ptmr->OSTmrOpt == OS_TMR_OPT_PERIODIC) { + OSTmr_Link(ptmr, OS_TMR_LINK_PERIODIC); /* Recalculate new position of timer in wheel */ + } else { + ptmr->OSTmrState = OS_TMR_STATE_COMPLETED; /* Indicate that the timer has completed */ + } + } + ptmr = ptmr_next; + } + OSTmr_Unlock(); + } +} +#endif diff --git a/FPGA_nios/hit_pat_bsp/alt_sys_init.c b/FPGA_nios/hit_pat_bsp/alt_sys_init.c new file mode 100644 index 0000000..dcedff4 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/alt_sys_init.c @@ -0,0 +1,115 @@ +/* + * alt_sys_init.c - HAL initialization source + * + * Machine generated for CPU 'cpu' in SOPC Builder design 'q_sys' + * SOPC Builder design path: D:/hit20v3/software/hit_pat/q_sys.sopcinfo + * + * Generated: Thu Jun 08 10:06:13 CEST 2023 + */ + +/* + * DO NOT MODIFY THIS FILE + * + * Changing this file will have subtle consequences + * which will almost certainly lead to a nonfunctioning + * system. If you do modify this file, be aware that your + * changes will be overwritten and lost when this file + * is generated again. + * + * DO NOT MODIFY THIS FILE + */ + +/* + * License Agreement + * + * Copyright (c) 2008 + * Altera Corporation, San Jose, California, USA. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * This agreement shall be governed in all respects by the laws of the State + * of California and by the laws of the United States of America. + */ + +#include "system.h" +#include "sys/alt_irq.h" +#include "sys/alt_sys_init.h" + +#include + +/* + * Device headers + */ + +#include "altera_nios2_gen2_irq.h" +#include "altera_avalon_sysid_qsys.h" +#include "altera_avalon_timer.h" +#include "altera_avalon_uart.h" +#include "altera_eth_tse.h" +#include "altera_generic_quad_spi_controller.h" +#include "altera_msgdma.h" +#include "altera_onchip_flash.h" + +/* + * Allocate the device storage + */ + +ALTERA_NIOS2_GEN2_IRQ_INSTANCE ( CPU, cpu); +ALTERA_AVALON_SYSID_QSYS_INSTANCE ( SYSID, sysid); +ALTERA_AVALON_TIMER_INSTANCE ( FRAME_TIMER, frame_timer); +ALTERA_AVALON_TIMER_INSTANCE ( SYS_CLK_TIMER, sys_clk_timer); +ALTERA_AVALON_UART_INSTANCE ( DEBUG_UART, debug_uart); +ALTERA_ETH_TSE_INSTANCE ( ETH_TSE, eth_tse); +ALTERA_GENERIC_QUAD_SPI_CONTROLLER_AVL_MEM_AVL_CSR_INSTANCE ( EXT_FLASH, EXT_FLASH_AVL_MEM, EXT_FLASH_AVL_CSR, ext_flash); +ALTERA_MSGDMA_CSR_PREFETCHER_CSR_INSTANCE ( MSGDMA_RX, MSGDMA_RX_CSR, MSGDMA_RX_PREFETCHER_CSR, msgdma_rx); +ALTERA_MSGDMA_CSR_PREFETCHER_CSR_INSTANCE ( MSGDMA_TX, MSGDMA_TX_CSR, MSGDMA_TX_PREFETCHER_CSR, msgdma_tx); +ALTERA_ONCHIP_FLASH_DATA_CSR_INSTANCE ( ONCHIP_FLASH, ONCHIP_FLASH_DATA, ONCHIP_FLASH_CSR, onchip_flash); + +/* + * Initialize the interrupt controller devices + * and then enable interrupts in the CPU. + * Called before alt_sys_init(). + * The "base" parameter is ignored and only + * present for backwards-compatibility. + */ + +void alt_irq_init ( const void* base ) +{ + ALTERA_NIOS2_GEN2_IRQ_INIT ( CPU, cpu); + alt_irq_cpu_enable_interrupts(); +} + +/* + * Initialize the non-interrupt controller devices. + * Called after alt_irq_init(). + */ + +void alt_sys_init( void ) +{ + ALTERA_AVALON_TIMER_INIT ( FRAME_TIMER, frame_timer); + ALTERA_AVALON_TIMER_INIT ( SYS_CLK_TIMER, sys_clk_timer); + ALTERA_AVALON_SYSID_QSYS_INIT ( SYSID, sysid); + ALTERA_AVALON_UART_INIT ( DEBUG_UART, debug_uart); + ALTERA_ETH_TSE_INIT ( ETH_TSE, eth_tse); + ALTERA_GENERIC_QUAD_SPI_CONTROLLER_INIT ( EXT_FLASH, ext_flash); + ALTERA_MSGDMA_INIT ( MSGDMA_RX, msgdma_rx); + ALTERA_MSGDMA_INIT ( MSGDMA_TX, msgdma_tx); + ALTERA_ONCHIP_FLASH_INIT ( ONCHIP_FLASH, onchip_flash); +} diff --git a/FPGA_nios/hit_pat_bsp/create-this-bsp b/FPGA_nios/hit_pat_bsp/create-this-bsp new file mode 100644 index 0000000..acc3e00 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/create-this-bsp @@ -0,0 +1,52 @@ +#!/bin/bash +# +# This script creates the ucosii_net_zipfs Board Support Package (BSP). + +BSP_TYPE=ucosii +BSP_DIR=. +SOPC_DIR=../../ +SOPC_FILE=../../q_sys.sopcinfo +NIOS2_BSP_ARGS="--set hal.make.bsp_cflags_defined_symbols -DTSE_MY_SYSTEM --cmd enable_sw_package altera_iniche" +CPU_NAME= + +if [ -n "$CPU_NAME" ]; then + NIOS2_BSP_ARGS="$NIOS2_BSP_ARGS --cpu-name $CPU_NAME" +fi + +# Don't run make if create-this-app script is called with --no-make arg +SKIP_MAKE= +while [ $# -gt 0 ] +do + case "$1" in + --no-make) + SKIP_MAKE=1 + ;; + *) + NIOS2_BSP_ARGS="$NIOS2_BSP_ARGS $1" + ;; + esac + shift +done + + +# Run nios2-bsp utility to create a ucosii BSP in this directory +# for the system with a .sopc file in $SOPC_FILE. +# Deprecating $SOPC_DIR in 10.1. Multiple .sopcinfo files in a directory may exist. + +if [ -z "$SOPC_FILE" ]; then + echo "WARNING: Use of a directory for locating a .sopcinfo file is deprecated in 10.1. Multiple .sopcinfo files may exist. You must specify the full .sopcinfo path." + cmd="nios2-bsp $BSP_TYPE $BSP_DIR $SOPC_DIR $NIOS2_BSP_ARGS" +else + cmd="nios2-bsp $BSP_TYPE $BSP_DIR $SOPC_FILE $NIOS2_BSP_ARGS" +fi + + +echo "create-this-bsp: Running \"$cmd\"" +$cmd || { + echo "$cmd failed" + exit 1 +} +if [ -z "$SKIP_MAKE" ]; then + echo "create-this-bsp: Running make" + make +fi diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_pio_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_pio_regs.h new file mode 100644 index 0000000..a829ddd --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_pio_regs.h @@ -0,0 +1,67 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_AVALON_PIO_REGS_H__ +#define __ALTERA_AVALON_PIO_REGS_H__ + +#include + +#define IOADDR_ALTERA_AVALON_PIO_DATA(base) __IO_CALC_ADDRESS_NATIVE(base, 0) +#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0) +#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data) + +#define IOADDR_ALTERA_AVALON_PIO_DIRECTION(base) __IO_CALC_ADDRESS_NATIVE(base, 1) +#define IORD_ALTERA_AVALON_PIO_DIRECTION(base) IORD(base, 1) +#define IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data) IOWR(base, 1, data) + +#define IOADDR_ALTERA_AVALON_PIO_IRQ_MASK(base) __IO_CALC_ADDRESS_NATIVE(base, 2) +#define IORD_ALTERA_AVALON_PIO_IRQ_MASK(base) IORD(base, 2) +#define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data) IOWR(base, 2, data) + +#define IOADDR_ALTERA_AVALON_PIO_EDGE_CAP(base) __IO_CALC_ADDRESS_NATIVE(base, 3) +#define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base) IORD(base, 3) +#define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data) IOWR(base, 3, data) + + +#define IOADDR_ALTERA_AVALON_PIO_SET_BIT(base) __IO_CALC_ADDRESS_NATIVE(base, 4) +#define IORD_ALTERA_AVALON_PIO_SET_BITS(base) IORD(base, 4) +#define IOWR_ALTERA_AVALON_PIO_SET_BITS(base, data) IOWR(base, 4, data) + +#define IOADDR_ALTERA_AVALON_PIO_CLEAR_BITS(base) __IO_CALC_ADDRESS_NATIVE(base, 5) +#define IORD_ALTERA_AVALON_PIO_CLEAR_BITS(base) IORD(base, 5) +#define IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(base, data) IOWR(base, 5, data) + + + +/* Defintions for direction-register operation with bi-directional PIOs */ +#define ALTERA_AVALON_PIO_DIRECTION_INPUT 0 +#define ALTERA_AVALON_PIO_DIRECTION_OUTPUT 1 + +#endif /* __ALTERA_AVALON_PIO_REGS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_sysid_qsys.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_sysid_qsys.h new file mode 100644 index 0000000..f62bc22 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_sysid_qsys.h @@ -0,0 +1,60 @@ +#ifndef __ALT_AVALON_SYSID_QSYS_H__ +#define __ALT_AVALON_SYSID_QSYS_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "alt_types.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * ALTERA_AVALON_SYSID_QSYS_INSTANCE is the macro used by alt_sys_init() to + * allocate any per device memory that may be required. In this case no + * allocation is necessary. + */ + +#define ALTERA_AVALON_SYSID_QSYS_INSTANCE(name, dev) extern int alt_no_storage +#define ALTERA_AVALON_SYSID_QSYS_INIT(name, dev) while (0) + +#ifdef SYSID_BASE +alt_32 alt_avalon_sysid_qsys_test(void); +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_AVALON_SYSID_QSYS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_sysid_qsys_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_sysid_qsys_regs.h new file mode 100644 index 0000000..9801855 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_sysid_qsys_regs.h @@ -0,0 +1,42 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_AVALON_SYSID_QSYS_REGS_H__ +#define __ALTERA_AVALON_SYSID_QSYS_REGS_H__ + +#include + +#define IOADDR_ALTERA_AVALON_SYSID_QSYS_ID(base) __IO_CALC_ADDRESS_NATIVE(base, 0) +#define IORD_ALTERA_AVALON_SYSID_QSYS_ID(base) IORD(base, 0) + +#define IOADDR_ALTERA_AVALON_SYSID_QSYS_TIMESTAMP(base) __IO_CALC_ADDRESS_NATIVE(base, 1) +#define IORD_ALTERA_AVALON_SYSID_QSYS_TIMESTAMP(base) IORD(base, 1) + +#endif /* __ALTERA_AVALON_SYSID_QSYS_REGS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_timer.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_timer.h new file mode 100644 index 0000000..a928483 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_timer.h @@ -0,0 +1,193 @@ +#ifndef __ALT_AVALON_TIMER_H__ +#define __ALT_AVALON_TIMER_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "alt_types.h" +#include "sys/alt_dev.h" +#include "sys/alt_warning.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +#define __ALT_COUNTER_SIZE(name) name##_COUNTER_SIZE +#define _ALT_COUNTER_SIZE(name) __ALT_COUNTER_SIZE(name) + +#define ALT_SYS_CLK_COUNTER_SIZE _ALT_COUNTER_SIZE(ALT_SYS_CLK) +#define ALT_TIMESTAMP_COUNTER_SIZE _ALT_COUNTER_SIZE(ALT_TIMESTAMP_CLK) + +#if (ALT_SYS_CLK_COUNTER_SIZE == 64) +#define alt_sysclk_type alt_u64 +#else +#define alt_sysclk_type alt_u32 +#endif + +#if (ALT_TIMESTAMP_COUNTER_SIZE == 64) +#define alt_timestamp_type alt_u64 +#else +#define alt_timestamp_type alt_u32 +#endif + +/* + * The function alt_avalon_timer_sc_init() is the initialisation function for + * the system clock. It registers the timers interrupt handler, and then calls + * the system clock regestration function, alt_sysclk_init(). + */ + +extern void alt_avalon_timer_sc_init (void* base, alt_u32 irq_controller_id, + alt_u32 irq, alt_u32 freq); + +/* + * Variables used to store the timestamp parameters, when the device is to be + * accessed using the high resolution timestamp driver. + */ + +extern void* altera_avalon_timer_ts_base; +extern alt_u32 altera_avalon_timer_ts_freq; + +/* + * ALTERA_AVALON_TIMER_INSTANCE is the macro used by alt_sys_init() to + * allocate any per device memory that may be required. In this case no + * allocation is necessary. + */ + +#define ALTERA_AVALON_TIMER_INSTANCE(name, dev) extern int alt_no_storage + +/* + * Macro used to calculate the timer interrupt frequency. Although this is + * somewhat fearsome, when compiled with -O2 it will be resolved at compile + * time to a constant value. + */ + +#define ALTERA_AVALON_TIMER_FREQ(freq, period, units) \ + strcmp (units, "us") ? \ + (strcmp (units, "ms") ? \ + (strcmp (units, "s") ? \ + ((freq + (period - 1))/period) \ + : 1) \ + : (1000 + (period - 1))/period) \ + : ((1000000 + (period - 1))/period) + +/* + * Construct macros which contain the base address of the system clock and the + * timestamp device. These are used below to determine which driver to use for + * a given timer. + */ + +#define __ALT_CLK_BASE(name) name##_BASE +#define _ALT_CLK_BASE(name) __ALT_CLK_BASE(name) + +#define ALT_SYS_CLK_BASE _ALT_CLK_BASE(ALT_SYS_CLK) +#define ALT_TIMESTAMP_CLK_BASE _ALT_CLK_BASE(ALT_TIMESTAMP_CLK) + +/* + * If there is no system clock, then the above macro will result in + * ALT_SYS_CLK_BASE being set to none_BASE. We therefore need to provide an + * invalid value for this, so that no timer is wrongly identified as the system + * clock. + */ + +#define none_BASE 0xffffffff + +/* + * ALTERA_AVALON_TIMER_INIT is the macro used by alt_sys_init() to provide + * the run time initialisation of the device. In this case this translates to + * a call to alt_avalon_timer_sc_init() if the device is the system clock, i.e. + * if it has the name "sysclk". + * + * If the device is not the system clock, then it is used to provide the + * timestamp facility. + * + * To ensure as much as possible is evaluated at compile time, rather than + * compare the name of the device to "/dev/sysclk" using strcmp(), the base + * address of the device is compared to SYSCLK_BASE to determine whether it's + * the system clock. Since the base address of a device must be unique, these + * two aproaches are equivalent. + * + * This macro performs a sanity check to ensure that the interrupt has been + * connected for this device. If not, then an apropriate error message is + * generated at build time. + */ + + +#define ALTERA_AVALON_TIMER_INIT(name, dev) \ + if (name##_BASE == ALT_SYS_CLK_BASE) \ + { \ + if (name##_IRQ == ALT_IRQ_NOT_CONNECTED) \ + { \ + ALT_LINK_ERROR ("Error: Interrupt not connected for " #dev ". " \ + "The system clock driver requires an interrupt to be " \ + "connected. Please select an IRQ for this device in " \ + "SOPC builder."); \ + } \ + else \ + { \ + alt_avalon_timer_sc_init((void*) name##_BASE, \ + name##_IRQ_INTERRUPT_CONTROLLER_ID, \ + name##_IRQ, \ + ALTERA_AVALON_TIMER_FREQ(name##_FREQ, \ + name##_PERIOD, \ + name##_PERIOD_UNITS));\ + } \ + } \ + else if (name##_BASE == ALT_TIMESTAMP_CLK_BASE) \ + { \ + if (name##_SNAPSHOT) \ + { \ + altera_avalon_timer_ts_base = (void*) name##_BASE; \ + altera_avalon_timer_ts_freq = name##_FREQ; \ + } \ + else \ + { \ + ALT_LINK_ERROR ("Error: Snapshot register not available for " \ + #dev ". " \ + "The timestamp driver requires the snapshot register " \ + "to be readable. Please enable this register for this " \ + "device in SOPC builder."); \ + } \ + } + +/* + * + */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_AVALON_TIMER_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_timer_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_timer_regs.h new file mode 100644 index 0000000..d9420d5 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_timer_regs.h @@ -0,0 +1,202 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_AVALON_TIMER_REGS_H__ +#define __ALTERA_AVALON_TIMER_REGS_H__ + +#include + +/* STATUS register */ +#define ALTERA_AVALON_TIMER_STATUS_REG 0 +#define IOADDR_ALTERA_AVALON_TIMER_STATUS(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_STATUS_REG) +#define IORD_ALTERA_AVALON_TIMER_STATUS(base) \ + IORD(base, ALTERA_AVALON_TIMER_STATUS_REG) +#define IOWR_ALTERA_AVALON_TIMER_STATUS(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_STATUS_REG, data) +#define ALTERA_AVALON_TIMER_STATUS_TO_MSK (0x1) +#define ALTERA_AVALON_TIMER_STATUS_TO_OFST (0) +#define ALTERA_AVALON_TIMER_STATUS_RUN_MSK (0x2) +#define ALTERA_AVALON_TIMER_STATUS_RUN_OFST (1) + +/* CONTROL register */ +#define ALTERA_AVALON_TIMER_CONTROL_REG 1 +#define IOADDR_ALTERA_AVALON_TIMER_CONTROL(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_CONTROL_REG) +#define IORD_ALTERA_AVALON_TIMER_CONTROL(base) \ + IORD(base, ALTERA_AVALON_TIMER_CONTROL_REG) +#define IOWR_ALTERA_AVALON_TIMER_CONTROL(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_CONTROL_REG, data) +#define ALTERA_AVALON_TIMER_CONTROL_ITO_MSK (0x1) +#define ALTERA_AVALON_TIMER_CONTROL_ITO_OFST (0) +#define ALTERA_AVALON_TIMER_CONTROL_CONT_MSK (0x2) +#define ALTERA_AVALON_TIMER_CONTROL_CONT_OFST (1) +#define ALTERA_AVALON_TIMER_CONTROL_START_MSK (0x4) +#define ALTERA_AVALON_TIMER_CONTROL_START_OFST (2) +#define ALTERA_AVALON_TIMER_CONTROL_STOP_MSK (0x8) +#define ALTERA_AVALON_TIMER_CONTROL_STOP_OFST (3) + +/* Period and SnapShot Register for COUNTER_SIZE = 32 */ +/*----------------------------------------------------*/ +/* PERIODL register */ +#define ALTERA_AVALON_TIMER_PERIODL_REG 2 +#define IOADDR_ALTERA_AVALON_TIMER_PERIODL(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_PERIODL_REG) +#define IORD_ALTERA_AVALON_TIMER_PERIODL(base) \ + IORD(base, ALTERA_AVALON_TIMER_PERIODL_REG) +#define IOWR_ALTERA_AVALON_TIMER_PERIODL(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_PERIODL_REG, data) +#define ALTERA_AVALON_TIMER_PERIODL_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_PERIODL_OFST (0) + +/* PERIODH register */ +#define ALTERA_AVALON_TIMER_PERIODH_REG 3 +#define IOADDR_ALTERA_AVALON_TIMER_PERIODH(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_PERIODH_REG) +#define IORD_ALTERA_AVALON_TIMER_PERIODH(base) \ + IORD(base, ALTERA_AVALON_TIMER_PERIODH_REG) +#define IOWR_ALTERA_AVALON_TIMER_PERIODH(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_PERIODH_REG, data) +#define ALTERA_AVALON_TIMER_PERIODH_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_PERIODH_OFST (0) + +/* SNAPL register */ +#define ALTERA_AVALON_TIMER_SNAPL_REG 4 +#define IOADDR_ALTERA_AVALON_TIMER_SNAPL(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_SNAPL_REG) +#define IORD_ALTERA_AVALON_TIMER_SNAPL(base) \ + IORD(base, ALTERA_AVALON_TIMER_SNAPL_REG) +#define IOWR_ALTERA_AVALON_TIMER_SNAPL(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_SNAPL_REG, data) +#define ALTERA_AVALON_TIMER_SNAPL_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_SNAPL_OFST (0) + +/* SNAPH register */ +#define ALTERA_AVALON_TIMER_SNAPH_REG 5 +#define IOADDR_ALTERA_AVALON_TIMER_SNAPH(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_SNAPH_REG) +#define IORD_ALTERA_AVALON_TIMER_SNAPH(base) \ + IORD(base, ALTERA_AVALON_TIMER_SNAPH_REG) +#define IOWR_ALTERA_AVALON_TIMER_SNAPH(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_SNAPH_REG, data) +#define ALTERA_AVALON_TIMER_SNAPH_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_SNAPH_OFST (0) + +/* Period and SnapShot Register for COUNTER_SIZE = 64 */ +/*----------------------------------------------------*/ +/* PERIOD_0 register */ +#define ALTERA_AVALON_TIMER_PERIOD_0_REG 2 +#define IOADDR_ALTERA_AVALON_TIMER_PERIOD_0(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_PERIOD_0_REG) +#define IORD_ALTERA_AVALON_TIMER_PERIOD_0(base) \ + IORD(base, ALTERA_AVALON_TIMER_PERIOD_0_REG) +#define IOWR_ALTERA_AVALON_TIMER_PERIOD_0(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_PERIOD_0_REG, data) +#define ALTERA_AVALON_TIMER_PERIOD_0_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_PERIOD_0_OFST (0) + +/* PERIOD_1 register */ +#define ALTERA_AVALON_TIMER_PERIOD_1_REG 3 +#define IOADDR_ALTERA_AVALON_TIMER_PERIOD_1(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_PERIOD_1_REG) +#define IORD_ALTERA_AVALON_TIMER_PERIOD_1(base) \ + IORD(base, ALTERA_AVALON_TIMER_PERIOD_1_REG) +#define IOWR_ALTERA_AVALON_TIMER_PERIOD_1(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_PERIOD_1_REG, data) +#define ALTERA_AVALON_TIMER_PERIOD_1_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_PERIOD_1_OFST (0) + +/* PERIOD_2 register */ +#define ALTERA_AVALON_TIMER_PERIOD_2_REG 4 +#define IOADDR_ALTERA_AVALON_TIMER_PERIOD_2(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_PERIOD_2_REG) +#define IORD_ALTERA_AVALON_TIMER_PERIOD_2(base) \ + IORD(base, ALTERA_AVALON_TIMER_PERIOD_2_REG) +#define IOWR_ALTERA_AVALON_TIMER_PERIOD_2(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_PERIOD_2_REG, data) +#define ALTERA_AVALON_TIMER_PERIOD_2_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_PERIOD_2_OFST (0) + +/* PERIOD_3 register */ +#define ALTERA_AVALON_TIMER_PERIOD_3_REG 5 +#define IOADDR_ALTERA_AVALON_TIMER_PERIOD_3(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_PERIOD_3_REG) +#define IORD_ALTERA_AVALON_TIMER_PERIOD_3(base) \ + IORD(base, ALTERA_AVALON_TIMER_PERIOD_3_REG) +#define IOWR_ALTERA_AVALON_TIMER_PERIOD_3(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_PERIOD_3_REG, data) +#define ALTERA_AVALON_TIMER_PERIOD_3_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_PERIOD_3_OFST (0) + +/* SNAP_0 register */ +#define ALTERA_AVALON_TIMER_SNAP_0_REG 6 +#define IOADDR_ALTERA_AVALON_TIMER_SNAP_0(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_SNAP_0_REG) +#define IORD_ALTERA_AVALON_TIMER_SNAP_0(base) \ + IORD(base, ALTERA_AVALON_TIMER_SNAP_0_REG) +#define IOWR_ALTERA_AVALON_TIMER_SNAP_0(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_SNAP_0_REG, data) +#define ALTERA_AVALON_TIMER_SNAP_0_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_SNAP_0_OFST (0) + +/* SNAP_1 register */ +#define ALTERA_AVALON_TIMER_SNAP_1_REG 7 +#define IOADDR_ALTERA_AVALON_TIMER_SNAP_1(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_SNAP_1_REG) +#define IORD_ALTERA_AVALON_TIMER_SNAP_1(base) \ + IORD(base, ALTERA_AVALON_TIMER_SNAP_1_REG) +#define IOWR_ALTERA_AVALON_TIMER_SNAP_1(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_SNAP_1_REG, data) +#define ALTERA_AVALON_TIMER_SNAP_1_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_SNAP_1_OFST (0) + +/* SNAP_2 register */ +#define ALTERA_AVALON_TIMER_SNAP_2_REG 8 +#define IOADDR_ALTERA_AVALON_TIMER_SNAP_2(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_SNAP_2_REG) +#define IORD_ALTERA_AVALON_TIMER_SNAP_2(base) \ + IORD(base, ALTERA_AVALON_TIMER_SNAP_2_REG) +#define IOWR_ALTERA_AVALON_TIMER_SNAP_2(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_SNAP_2_REG, data) +#define ALTERA_AVALON_TIMER_SNAP_2_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_SNAP_2_OFST (0) + +/* SNAP_3 register */ +#define ALTERA_AVALON_TIMER_SNAP_3_REG 9 +#define IOADDR_ALTERA_AVALON_TIMER_SNAP_3(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_TIMER_SNAP_3_REG) +#define IORD_ALTERA_AVALON_TIMER_SNAP_3(base) \ + IORD(base, ALTERA_AVALON_TIMER_SNAP_3_REG) +#define IOWR_ALTERA_AVALON_TIMER_SNAP_3(base, data) \ + IOWR(base, ALTERA_AVALON_TIMER_SNAP_3_REG, data) +#define ALTERA_AVALON_TIMER_SNAP_3_MSK (0xFFFF) +#define ALTERA_AVALON_TIMER_SNAP_3_OFST (0) + +#endif /* __ALTERA_AVALON_TIMER_REGS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_tse.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_tse.h new file mode 100644 index 0000000..53ab7da --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_tse.h @@ -0,0 +1,1023 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_AVALON_TSE_H__ +#define __ALTERA_AVALON_TSE_H__ + +#include "altera_eth_tse_regs.h" +#include "system.h" /* check if SGDMA is used */ + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + + +/* TSE DEBUG Message Level */ +/* Level 6 : Info + * Level 5 : Debug Info + * Level 4 : Warning + * Level 3 : Critical Warning + * Level 2 : Error + * Level 1 : Critical Error, eg: malloc() failed + */ + +#ifndef TSE_DEBUG_LEVEL + #define TSE_DEBUG_LEVEL 6 +#endif + +/* definition without InterNiche */ +#ifndef ALT_INICHE +#define SUCCESS 0 /* whatever the call was, it worked. */ +#define ENP_RESOURCE -22 /* ran out of other queue-able resource */ +#define ENP_PARAM -10 /* bad parameter */ + +#define MAXNETS 8 /* max ifaces to support at one time */ + +#ifdef ALT_DEBUG +#define tse_dprintf(level, fmt, rest...) \ + if(level <= TSE_DEBUG_LEVEL) { \ + printf (fmt, ## rest); \ + } \ + else { \ + no_printf (fmt, ## rest); \ + } +#else +#define tse_dprintf(level, fmt, rest...) no_printf (fmt, ## rest) +#endif /* ALT_DEBUG */ + +#else /* ALT_INICHE */ +#include "ipport.h" + +#define tse_dprintf(level, fmt, rest...) \ + if(level <= TSE_DEBUG_LEVEL) { \ + dprintf (fmt, ## rest); \ + } \ + else { \ + no_printf (fmt, ## rest); \ + } +#endif /* ALT_INICHE */ + + +void no_printf (char *fmt, ...); + + + +/* MSGDMA dependent */ +#ifdef __ALTERA_MSGDMA +#include "altera_msgdma.h" + +/* Device addressing struct for all hardware TSE MAC depends on */ +typedef struct tse_mac_trans_info_struct { + np_tse_mac *base; + alt_msgdma_dev *tx_msgdma; + alt_msgdma_dev *rx_msgdma; + alt_u32 *rx_msgdma_desc_ram; + alt_u32 cfgflags; // flags or'ed during initialization of COMMAND_CONFIG +} tse_mac_trans_info; + + +/** @Function Description - Perform initialization steps on transaction info structure to prepare it for . + * use by the library functions with two MSGDMAs and extra initialization Flags + * @API Type: Internal + * @param mi Main Device Structure. + * @param mac_base Base Address of the Control interface for the TSE MAC + * @param tx_msgdma MSGDMA device handle for TSE transmit data path + * @param rx_msgdma MSGDMA device handle for TSE receive data path + * @param cfgflags initialization flags for the device + * @return SUCCESS + */ + +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); + +/** @Function Description - Synchronous MSGDMA copy from buffer memory into transmit FIFO. Waits until + * MSGDMA has completed. Raw function without any error checks. + * @API Type: Internal + * @param mi Main Device Structure. + * @param txDesc Pointer to the transmit MSGDMA descriptor + * @return actual bytes transferred if ok else ENP_RESOURCE if error + */ +alt_32 tse_mac_sTxWrite( tse_mac_trans_info *mi, + alt_msgdma_standard_descriptor *txDesc); + + + +/** @Function Description - Asynchronous MSGDMA copy from buffer memory into rxFIFO. + * Raw function without any transfer error checks. + * + * @API Type: Internal + * @param mi Main Device Structure. + * @param rxDesc Pointer to the receive MSGDMA descriptor + * @return SUCCESS if ok else -1 if error + */ +alt_32 tse_mac_aTxWrite( tse_mac_trans_info *mi, + alt_msgdma_prefetcher_standard_descriptor *txDesc); + + + +/** @Function Description - Asynchronous MSGDMA copy from rxFIFO into given buffer memory area. + * Raw function without any error checks. + * + * @API Type: Internal + * @param mi Main Device Structure. + * @param rxDesc Pointer to the receive MSGDMA descriptor + * @return SUCCESS if ok else ENP_RESOURCE if error + * + * Note: At the point of this function call return, + * the MSGDMA asynchronous operation may not have been + * completed yet, so the function does not return + * the actual bytes transferred for current descriptor + */ +alt_32 tse_mac_aRxRead(tse_mac_trans_info *mi, alt_msgdma_prefetcher_standard_descriptor *rxDesc); + +#endif /* __ALTERA_MSGDMA */ + + + + + + +/*** Debug Definition *********/ +/* change ENABLE_PHY_LOOPBACK to 1 to enable PHY loopback for debug purpose */ +#ifndef ENABLE_PHY_LOOPBACK + #define ENABLE_PHY_LOOPBACK 0 +#endif + +#ifndef pnull +#define pnull ((void *)0) +#endif + +/* Constant definition for tse_system_info.h */ +#define TSE_EXT_DESC_MEM 1 +#define TSE_INT_DESC_MEM 0 + +#define TSE_USE_SHARED_FIFO 1 +#define TSE_NO_SHARED_FIFO 0 + +#define TSE_ENABLE_MDIO_SHARING 1 + +/* Multi-channel Shared FIFO Depth Settings */ +#ifndef ALTERA_TSE_SHARED_FIFO_TX_DEPTH_DEFAULT + #define ALTERA_TSE_SHARED_FIFO_TX_DEPTH_DEFAULT 2040 +#endif + +#ifndef ALTERA_TSE_SHARED_FIFO_RX_DEPTH_DEFAULT + #define ALTERA_TSE_SHARED_FIFO_RX_DEPTH_DEFAULT 2040 +#endif + + +/* PHY Status definition */ +#define TSE_PHY_AUTO_ADDRESS -1 +#define TSE_PHY_MAP_SUCCESS 0 +#define TSE_PHY_MAP_ERROR -1 + +#define TSE_PHY_AN_NOT_COMPLETE -1 +#define TSE_PHY_AN_NOT_CAPABLE -2 +#define TSE_PHY_AN_COMPLETE 0 +#define TSE_PHY_SPEED_INVALID 3 +#define TSE_PHY_SPEED_1000 2 +#define TSE_PHY_SPEED_100 1 +#define TSE_PHY_SPEED_10 0 +#define TSE_PHY_SPEED_NO_COMMON -1 +#define TSE_PHY_DUPLEX_FULL 1 +#define TSE_PHY_DUPLEX_HALF 0 + +/* getPHYSpeed return error */ +enum { + ALT_TSE_E_NO_PMAC_FOUND = (1 << 23), + ALT_TSE_E_NO_MDIO = (1 << 22), + ALT_TSE_E_NO_PHY = (1 << 21), + ALT_TSE_E_NO_COMMON_SPEED = (1 << 20), + ALT_TSE_E_AN_NOT_COMPLETE = (1 << 19), + ALT_TSE_E_NO_PHY_PROFILE = (1 << 18), + ALT_TSE_E_PROFILE_INCORRECT_DEFINED = (1 << 17), + ALT_TSE_E_INVALID_SPEED = (1 << 16) +}; + +/* Maximum number of PHY that can be registered into PHY profile */ +#define TSE_MAX_PHY_PROFILE 8 + +/* Maximum MAC in system */ +#define TSE_MAX_MAC_IN_SYSTEM MAXNETS +#define TSE_MAX_CHANNEL MAXNETS + + +/* System Constant Definition Used in the TSE Driver Code */ + + +#define ALTERA_TSE_SW_RESET_TIME_OUT_CNT 10000 +#define ALTERA_TSE_MSGDMA_BUSY_TIME_OUT_CNT 1000000 + +//These values reflect useable chain size plus 1 for ending descriptor +#define ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE 9 +#define ALTERA_TSE_MSGDMA_TX_DESC_CHAIN_SIZE 2 /* currently only a value of 2 is supported */ + +#define ALTERA_TSE_MAC_MAX_FRAME_LENGTH 1518 + + +#define ALTERA_TSE_FULL_MAC 0 +#define ALTERA_TSE_MACLITE_10_100 1 +#define ALTERA_TSE_MACLITE_1000 2 + +#define ALTERA_TSE_NO_INDEX_FOUND -1 +#define ALTERA_TSE_SYSTEM_DEF_ERROR -1 +#define ALTERA_TSE_MALLOC_FAILED -1 + +#define ALTERA_TSE_DUPLEX_MODE_DEFAULT TSE_PHY_DUPLEX_FULL +#define ALTERA_TSE_MAC_SPEED_DEFAULT TSE_PHY_SPEED_100 +/* added as bsp public makefile settings +#define ALTERA_AUTONEG_TIMEOUT_THRESHOLD 2500 +#define ALTERA_CHECKLINK_TIMEOUT_THRESHOLD 10000 +#define ALTERA_NOMDIO_TIMEOUT_THRESHOLD 1000000 +#define ALTERA_DISGIGA_TIMEOUT_THRESHOLD 5000000 +*/ + +#define ALTERA_TSE_PCS_IF_MODE 0x14 /* 0x14th register of ALTERA PCS */ + +/* PHY ID, backward compatible */ +#define NTL848PHY_ID 0x20005c90 /* National 83848, 10/100 */ +#define MTIPPCS_ID 0x00010000 /* MTIP 1000 Base-X PCS */ +#define TDKPHY_ID 0x0300e540 /* TDK 78Q2120 10/100 */ +#define NTLPHY_ID 0x20005c7a /* National DP83865 */ +#define MVLPHY_ID 0x0141 /* Marvell 88E1111 */ + + + +/* PHY ID */ +/* Marvell PHY on PHYWORKX board */ +enum { + MV88E1111_OUI = 0x005043, + MV88E1111_MODEL = 0x0c, + MV88E1111_REV = 0x2 +}; + +/* Marvell Quad PHY on PHYWORKX board */ +enum { + MV88E1145_OUI = 0x005043, + MV88E1145_MODEL = 0x0d, + MV88E1145_REV = 0x2 +}; + +/* National PHY on PHYWORKX board */ +enum { + DP83865_OUI = 0x080017, + DP83865_MODEL = 0x07, + DP83865_REV = 0xa +}; + +/* National 10/100 PHY on PHYWORKX board */ +enum { + DP83848C_OUI = 0x080017, + DP83848C_MODEL = 0x09, + DP83848C_REV = 0x0 +}; + +/* Intel PEF7071 Phy on C10 Devkit */ +enum { + PEF7071_OUI = ((0xd565 << 6) | ((0xa401 >> 10) & 0x3f)), + PEF7071_MODEL = ((0xa401 >> 4) & 0x3f), + PEF7071_REV = (0xa401 & 0x0f) +}; + + + +/* PHY register definition */ +enum { + TSE_PHY_MDIO_CONTROL = 0, + TSE_PHY_MDIO_STATUS = 1, + TSE_PHY_MDIO_PHY_ID1 = 2, + TSE_PHY_MDIO_PHY_ID2 = 3, + TSE_PHY_MDIO_ADV = 4, + TSE_PHY_MDIO_REMADV = 5, + + TSE_PHY_MDIO_AN_EXT = 6, + TSE_PHY_MDIO_1000BASE_T_CTRL = 9, + TSE_PHY_MDIO_1000BASE_T_STATUS = 10, + TSE_PHY_MDIO_EXT_STATUS = 15 +}; + +/* MDIO CONTROL bit number */ +enum { + TSE_PHY_MDIO_CONTROL_RESET = 15, + TSE_PHY_MDIO_CONTROL_LOOPBACK = 14, + TSE_PHY_MDIO_CONTROL_SPEED_LSB = 13, + TSE_PHY_MDIO_CONTROL_AN_ENA = 12, + TSE_PHY_MDIO_CONTROL_POWER_DOWN = 11, + TSE_PHY_MDIO_CONTROL_ISOLATE = 10, + TSE_PHY_MDIO_CONTROL_RESTART_AN = 9, + TSE_PHY_MDIO_CONTROL_DUPLEX = 8, + TSE_PHY_MDIO_CONTROL_SPEED_MSB = 6 +}; + +/* MDIO STATUS bit number */ +enum { + TSE_PHY_MDIO_STATUS_100BASE_T4 = 15, + TSE_PHY_MDIO_STATUS_100BASE_X_FULL = 14, + TSE_PHY_MDIO_STATUS_100BASE_X_HALF = 13, + TSE_PHY_MDIO_STATUS_10BASE_T_FULL = 12, + TSE_PHY_MDIO_STATUS_10BASE_T_HALF = 11, + TSE_PHY_MDIO_STATUS_100BASE_T2_FULL = 10, + TSE_PHY_MDIO_STATUS_100BASE_T2_HALF = 9, + TSE_PHY_MDIO_STATUS_EXT_STATUS = 8, + TSE_PHY_MDIO_STATUS_AN_COMPLETE = 5, + TSE_PHY_MDIO_STATUS_AN_ABILITY = 3, + TSE_PHY_MDIO_STATUS_LINK_STATUS = 2 +}; + +/* AN Advertisement bit number */ +/* and also */ +/* Link Partner Ability bit number */ +enum { + TSE_PHY_MDIO_ADV_100BASE_T4 = 9, + TSE_PHY_MDIO_ADV_100BASE_TX_FULL = 8, + TSE_PHY_MDIO_ADV_100BASE_TX_HALF = 7, + TSE_PHY_MDIO_ADV_10BASE_TX_FULL = 6, + TSE_PHY_MDIO_ADV_10BASE_TX_HALF = 5 +}; + +/* AN Expansion bit number */ +enum { + TSE_PHY_MDIO_LP_AN_ABLE = 0 +}; + +/* 1000BASE-T Control bit number */ +enum { + TSE_PHY_MDIO_1000BASE_T_CTRL_FULL_ADV = 9, + TSE_PHY_MDIO_1000BASE_T_CTRL_HALF_ADV = 8 +}; + +/* 1000BASE-T Status bit number */ +enum { + TSE_PHY_MDIO_1000BASE_T_STATUS_LP_FULL_ADV = 11, + TSE_PHY_MDIO_1000BASE_T_STATUS_LP_HALF_ADV = 10 +}; + +/* Extended Status bit number */ +enum { + TSE_PHY_MDIO_EXT_STATUS_1000BASE_X_FULL = 15, + TSE_PHY_MDIO_EXT_STATUS_1000BASE_X_HALF = 14, + TSE_PHY_MDIO_EXT_STATUS_1000BASE_T_FULL = 13, + TSE_PHY_MDIO_EXT_STATUS_1000BASE_T_HALF = 12 +}; + + + + + +/* + * macros to access MSGDMA prefetcher standard Descriptors used in the TSE driver + * - use the macros to assure cache coherancy + */ +#define IORD_ALTERA_TSE_MSGDMA_DESC_READ_ADDR(base) (IORD(base, 0x0) & 0xFFFFFFFF) +#define IOWR_ALTERA_TSE_MSGDMA_DESC_READ_ADDR(base, data) IOWR(base, 0x0, data) +#define IORD_ALTERA_TSE_MSGDMA_DESC_WRITE_ADDR(base) (IORD(base, 0x1) & 0xFFFFFFFF) +#define IOWR_ALTERA_TSE_MSGDMA_DESC_WRITE_ADDR(base, data) IOWR(base, 0x1, data) +#define IORD_ALTERA_TSE_MSGDMA_DESC_NEXT(base) (IORD(base, 0x3) & 0xFFFFFFFF) +#define IOWR_ALTERA_TSE_MSGDMA_DESC_NEXT(base, data) IOWR(base, 0x3, data) + +#define IORD_ALTERA_TSE_MSGDMA_DESC_BYTES_TO_TRANSFER(base) (IORD(base, 0x2) & 0xFFFFFFFF) +#define IOWR_ALTERA_TSE_MSGDMA_DESC_BYTES_TO_TRANSFER(base, data) IOWR(base, 0x2, data)) + +#define IORD_ALTERA_TSE_MSGDMA_DESC_ACTUAL_BYTES_TRANSFERRED(base) (IORD(base, 0x4) & 0xFFFFFFFF) +#define IOWR_ALTERA_TSE_MSGDMA_DESC_ACTUAL_BYTES_TRANSFERRED(base, data) IOWR(base, 0x4, data)) +#define IORD_ALTERA_TSE_MSGDMA_DESC_STATUS(base) (((IORD(base, 0x5)) >> 16) & 0xFFFF) +#define IOWR_ALTERA_TSE_MSGDMA_DESC_STATUS(base, data) IOWR(base, 0x5, (data & 0xffff)) +#define IORD_ALTERA_TSE_MSGDMA_DESC_CONTROL(base) (((IORD(base, 0x7) >> 24) & 0xFF) +#define IOWR_ALTERA_TSE_MSGDMA_DESC_CONTROL(base, data) IOWR(base, 0x7, data) + +/* TSE System Component Structure */ +typedef struct alt_tse_system_mac_struct { + alt_u32 tse_mac_base; /* Base address of TSE MAC */ + alt_u16 tse_tx_depth; /* TX Receive FIFO depth */ + alt_u16 tse_rx_depth; /* RX Receive FIFO depth */ + alt_u8 tse_use_mdio; /* is MDIO enabled */ + alt_u8 tse_en_maclite; /* is Small MAC */ + alt_u8 tse_maclite_gige; /* is Small MAC 1000 Mbps */ + alt_u8 tse_multichannel_mac; /* MAC group together for MDIO block sharing */ + alt_u8 tse_num_of_channel; /* Number of channel for Multi-channel MAC */ + alt_u8 tse_mdio_shared; /* is MDIO block shared */ + alt_u8 tse_number_of_mac_mdio_shared; /* Number of MAC sharing the MDIO block */ + alt_u8 tse_pcs_ena; /* is MAC+PCS combination */ + alt_u8 tse_pcs_sgmii; /* is SGMII mode of PCS enabled */ +} alt_tse_system_mac; + +typedef struct alt_tse_system_msgdma_struct { + char * tse_msgdma_tx; /* MSGDMA TX name */ + char * tse_msgdma_rx; /* MSGDMA RX name */ + alt_u16 tse_msgdma_rx_irq; /* MSGDMA RX IRQ */ +} alt_tse_system_msgdma; + +typedef struct alt_tse_system_desc_mem_struct { + alt_u8 ext_desc_mem; /* is dedicated memory used for descriptor */ + alt_u32 desc_mem_base; /* Base address of Descriptor Memory if ext_desc_mem = 1 */ +} alt_tse_system_desc_mem; + +typedef struct alt_tse_system_shared_fifo_struct { + alt_u8 use_shared_fifo; /* is Shared FIFO used in the system */ + + alt_u32 tse_shared_fifo_tx_ctrl_base; /* Base address of TX Shared FIFO Ctrl */ + alt_u32 tse_shared_fifo_tx_stat_base; /* Base address of TX Shared FIFO Fill Level */ + alt_u32 tse_shared_fifo_tx_depth; /* Depth of TX Shared FIFO */ + + alt_u32 tse_shared_fifo_rx_ctrl_base; /* Base address of RX Shared FIFO Ctrl */ + alt_u32 tse_shared_fifo_rx_stat_base; /* Base address of RX Shared FIFO Fill Level */ + alt_u32 tse_shared_fifo_rx_depth; /* Depth of RX Shared FIFO */ + +} alt_tse_system_shared_fifo; + +typedef struct alt_tse_system_phy_struct { + alt_32 tse_phy_mdio_address; /* PHY's MDIO address */ + alt_32 (*tse_phy_cfg)(np_tse_mac *pmac); /* Function pointer to execute additional initialization */ +} alt_tse_system_phy; + +/* System Parameters for TSE System */ +typedef struct alt_tse_system_info_struct { + alt_u32 tse_mac_base; /* Base address of TSE MAC */ + alt_u32 tse_tx_depth; /* TX Receive FIFO depth */ + alt_u32 tse_rx_depth; /* RX Receive FIFO depth */ + alt_u8 tse_use_mdio; /* is MDIO enabled */ + alt_u8 tse_en_maclite; /* is Small MAC */ + alt_u8 tse_maclite_gige; /* is Small MAC 1000 Mbps */ + alt_u8 tse_multichannel_mac; /* MAC group together for MDIO block sharing */ + alt_u8 tse_num_of_channel; /* Number of channel for Multi-channel MAC */ + alt_u8 tse_mdio_shared; /* is MDIO block shared */ + alt_u8 tse_number_of_mac_mdio_shared; /* Number of MAC sharing the MDIO block */ + alt_u8 tse_pcs_ena; /* is MAC+PCS combination */ + alt_u8 tse_pcs_sgmii; /* is SGMII mode of PCS enabled */ + + char * tse_msgdma_tx; /* MSGDMA TX name */ + char * tse_msgdma_rx; /* MSGDMA RX name */ + alt_u16 tse_msgdma_rx_irq; /* MSGDMA TX IRQ */ + + alt_u8 ext_desc_mem; /* is dedicated memory used for descriptor */ + alt_u32 desc_mem_base; /* Base address of Descriptor Memory if ext_desc_mem = 1 */ + + alt_u8 use_shared_fifo; /* is Shared FIFO used in the system */ + alt_u32 tse_shared_fifo_tx_ctrl_base; /* Base address of TX Shared FIFO Ctrl */ + alt_u32 tse_shared_fifo_tx_stat_base; /* Base address of TX Shared FIFO Fill Level */ + alt_u32 tse_shared_fifo_tx_depth; /* Depth of TX Shared FIFO */ + + alt_u32 tse_shared_fifo_rx_ctrl_base; /* Base address of RX Shared FIFO Ctrl */ + alt_u32 tse_shared_fifo_rx_stat_base; /* Base address of RX Shared FIFO Fill Level */ + alt_u32 tse_shared_fifo_rx_depth; /* Depth of RX Shared FIFO */ + + alt_32 tse_phy_mdio_address; /* PHY's MDIO address */ + alt_32 (*tse_phy_cfg)(np_tse_mac *pmac); /* Function pointer to execute additional initialization */ + +} alt_tse_system_info; + + + + +/* PHY structure for PHY detection */ +typedef struct alt_tse_phy_profile_struct{ + + /* PHY name */ + char name[80]; + + /* PHY OUI (Organizationally Unique Identififier) */ + alt_u32 oui; + + /* PHY model number */ + alt_u8 model_number; + + /* PHY revision number */ + alt_u8 revision_number; + + /* Location of PHY Specific Status Register */ + alt_u8 status_reg_location; + + /* Location of Speed Status bit in PHY Specific Status Register */ + alt_u8 speed_lsb_location; + + /* Location of Duplex Status bit in PHY Specific Status Register */ + alt_u8 duplex_bit_location; + + /* Location of Link Status bit in PHY Specific Status Register */ + alt_u8 link_bit_location; + + /* Function pointer to execute additional initialization */ + /* Profile specific */ + alt_32 (*phy_cfg)(np_tse_mac *pmac); + + /** Function pointer to read the link status from the PHY specific status register + * Use this function pointer if the PHY is using different format to store link information in PHY specific status register + * The above _location variable will not be used if this function pointer is not NULL + * Table below show the format of the return value required by TSE driver PHY detection + * ---------------------------------------------------------------------------------- + * | BIT | Value: Description | + * ---------------------------------------------------------------------------------- + * | 31-17 | Reserved | + * | 16 | 1: Error:Invalid speed read from PHY | + * | 15- 4 | Reserved | + * | 3 | 1: 10 Mbps link | + * | 2 | 1: 100 Mbps link | + * | 1 | 1: 1000 Mbps link | + * | 0 | 1: Full Duplex 0: Half Duplex | + * ---------------------------------------------------------------------------------- + */ + alt_u32 (*link_status_read)(np_tse_mac *pmac); + +} alt_tse_phy_profile; + + +/* TSE Multi-Channel PHY detection */ +typedef struct alt_tse_phy_link_cap_struct { + /* connected PHY capabilities */ + alt_u8 cap_1000_base_x_full; + alt_u8 cap_1000_base_x_half; + alt_u8 cap_1000_base_t_full; + alt_u8 cap_1000_base_t_half; + + alt_u8 cap_100_base_t4; + alt_u8 cap_100_base_x_full; + alt_u8 cap_100_base_x_half; + alt_u8 cap_100_base_t2_full; + alt_u8 cap_100_base_t2_half; + alt_u8 cap_10_base_t_full; + alt_u8 cap_10_base_t_half; + + /* link partner capabilities */ + alt_u8 lp_1000_base_t_full; + alt_u8 lp_1000_base_t_half; + + alt_u8 lp_100_base_t4; + alt_u8 lp_100_base_tx_full; + alt_u8 lp_100_base_tx_half; + alt_u8 lp_10_base_tx_full; + alt_u8 lp_10_base_tx_half; +} alt_tse_phy_link_cap; + + +struct alt_tse_phy_info_struct; +struct alt_tse_mac_info_struct; +struct alt_tse_mac_group_struct; + +struct alt_tse_phy_info_struct { + alt_u8 mdio_address; /* Actual PHY MDIO address detected */ + alt_tse_phy_link_cap link_capability; /* structure to store link capability of PHY and link partner */ + alt_tse_phy_profile *pphy_profile; /* Pointer to type of PHY profile */ + struct alt_tse_mac_info_struct *pmac_info; /* Pointer to MAC info structure which connected to this PHY */ + +}; + +struct alt_tse_mac_info_struct { + alt_u8 mac_type; /* ALTERA_TSE_FULL_MAC, ALTERA_TSE_MACLITE_10_100, or ALTERA_TSE_MACLITE_1000 */ + struct alt_tse_phy_info_struct *pphy_info; /* Pointer to PHY info structure which connected to this MAC */ + alt_tse_system_info *psys_info; /* Pointer to alt_tse_system_info structure in alt_tse_system_info.h */ + struct alt_tse_mac_group_struct *pmac_group; /* Pointer to the MAC group this MAC belongs to, all multi-channel MAC form a group */ + +}; + +struct alt_tse_mac_group_struct { + alt_u8 channel; /* Number of channel the MAC group has */ + struct alt_tse_mac_info_struct *pmac_info[TSE_MAX_CHANNEL]; /* Pointer to hold MACs in the same group */ +}; + +typedef struct alt_tse_phy_info_struct alt_tse_phy_info; +typedef struct alt_tse_mac_info_struct alt_tse_mac_info; +typedef struct alt_tse_mac_group_struct alt_tse_mac_group; + + + +/******************************* + * + * Public API for TSE Driver + * + *******************************/ + +/* @Function Description: Perform a software Reset. Reset operation will ocur with some latency. + * COMMAND_CONFIG register is restored after reset. + * @API Type: Public + * @param pmac Pointer to the TSE MAC Control Interface Base address + * @return SUCCESS if ok, else if error return ENP_RESOURCE, ENP_LOGIC +*/ +alt_32 tse_mac_SwReset( np_tse_mac *pmac); + + + + +/* @Function Description: Perform switching of the TSE MAC into MII (10/100) mode. + * COMMAND_CONFIG register is restored after reset. + * @API Type: Public + * @param pmac Pointer to the TSE MAC Control Interface Base address + * @return SUCCESS +*/ +alt_32 tse_mac_setMIImode(np_tse_mac *pmac); + + + + +/* @Function Description: Perform switching of the TSE MAC into GMII (Gigabit) mode. + * COMMAND_CONFIG register is restored after reset. + * @API Type: Public + * @param pmac Pointer to the TSE MAC Control Interface Base address + * @return SUCCESS +*/ +alt_32 tse_mac_setGMIImode(np_tse_mac *pmac); + + +/* @Function Description - Add additional PHYs which are not supported by default into PHY profile for PHY detection and auto negotiation + * + * @API TYPE - Public + * @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); + + +/* @Function Description - Add TSE System to tse_mac_device[] array to customize TSE System + * + * @API TYPE - Public + * @param psys_mac pointer to alt_tse_system_mac structure describing MAC of the system + * @param psys_msgdma pointer to alt_tse_system_msgdma structure describing SGDMA of the system + * @param psys_mem pointer to alt_tse_system_desc_mem structure describing Descriptor Memory of the system + * @param psys_phy pointer to alt_tse_system_phy structure describing PHY of the system + * @return SUCCESS on success + * ALTERA_TSE_MALLOC_FAILED if memory allocation failed + * ALTERA_TSE_SYSTEM_DEF_ERROR if definition of system incorrect or pointer == NULL + */ +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 ); + + +/* @Function Description - Enable MDIO sharing for multiple single channel MAC + * + * @API TYPE - Public + * @param psys_mac_list pointer to array of alt_tse_system_mac structure sharing MDIO block + * @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); + +/* @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); + +/* @Function Description: Set the common speed to all PHYs connected to the MAC within the same group + * @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); + +/******************************** + * + * Internal API for TSE Driver + * + *******************************/ + +/* @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 TSE system structure in tse_mac_device[] + */ +alt_32 alt_tse_get_system_index(alt_tse_system_info *psys_info); + + +/* @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); + + +/* @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); + +/* @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); + +/* @Function Description: Perform switching of the TSE MAC speed. + * COMMAND_CONFIG register is restored after reset. + * @API Type: Internal + * @param pmac Pointer to the TSE MAC Control Interface Base address + * @param speed 2 = 1000 Mbps, 1 = 100 Mbps, 0 = 10 Mbps + */ +alt_32 alt_tse_mac_set_speed(np_tse_mac *pmac, alt_u8 speed); + + +/* @Function Description: Perform switching of the TSE MAC duplex mode. + * COMMAND_CONFIG register is restored after reset. + * @API Type: Internal + * @param pmac Pointer to the TSE MAC Control Interface Base address + * @param duplex 1 = Full Duplex, 0 = Half Duplex + */ +alt_32 alt_tse_mac_set_duplex(np_tse_mac *pmac, alt_u8 duplex); + + +/** @Function Description - Determine link speed our PHY negotiated with our link partner. + * This is fully vendor specific depending on the PHY you are using. + * + * @API TYPE - Internal + * @param tse.mi.base MAC register map. + * @return + * ---------------------------------------------------------------------------------- + * | BIT | Value: Description | + * ---------------------------------------------------------------------------------- + * | 31-23 | Reserved | + * | 23 | 1: Argument *pmac not found from the list of MAC detected during init | + * | 22 | 1: No MDIO used by the MAC | + * | 21 | 1: No PHY detected | + * | 20 | 1: No common speed found for Multi-port MAC | + * | 19 | 1: PHY auto-negotiation not completed | + * | 18 | 1: No PHY profile match the detected PHY | + * | 17 | 1: PHY Profile not defined correctly | + * | 16 | 1: Invalid speed read from PHY | + * | 4-15 | Reserved | + * | 3 | 1: 10 Mbps link | + * | 2 | 1: 100 Mbps link | + * | 1 | 1: 1000 Mbps link | + * | 0 | 1: Full Duplex 0: Half Duplex | + * ---------------------------------------------------------------------------------- + * + * If the link speed cannot be determined, it is fall back to 100 Mbps (customizable by changing ALTERA_TSE_MAC_SPEED_DEFAULT) + * Full duplex (customizable by changing ALTERA_TSE_DUPLEX_MODE_DEFAULT) + */ +alt_32 getPHYSpeed(np_tse_mac *pmac); + +/* @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); + +/* @Function Description: Write MDIO address to the MDIO address1 register of first MAC within MAC group + * @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); + +/** @Function Description - Write value of data with bit_length number of bits to mdio register based on register location reg_num + * and start from bit location lsb_num. + * + * @API TYPE - Internal + * @param pphy pointer to alt_tse_phy_info structure + * @param reg_num location of mdio register to be written. + * @param lsb_num least significant bit location of mdio register to be written. + * @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); + + + +/** @Function Description - Read bit_length number of bits from mdio register based on register location reg_num + * and start from bit location lsb_num. + * + * @API TYPE - Internal + * @param pphy pointer to alt_tse_phy_info structure + * @param reg_num location of mdio register to be read. + * @param lsb_num least significant bit location of mdio register to be read. + * @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); + + +/* @Function Description: Add supported PHY to profile + * @API Type: Internal + * @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(); + + + +/* @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(); + + +/* @Function Description: Store information of all the MAC available in the system + * @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(); + +/* @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 + */ +alt_32 alt_tse_mac_get_phy(alt_tse_mac_group *pmac_group); + + +/* @Function Description: Associate the PHYs connected to the structure in alt_tse_system_info.h + * @API Type: Internal + * @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); + +/* @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); + +/* @Function Description: Detect and initialize all the PHYs connected + * @API Type: Internal + * @param pmac N/A + * @return SUCCESS + */ +alt_32 alt_tse_phy_init(); + + + +/* @Function Description: Restart Auto-Negotiation for the PHY + * @API Type: Internal + * @param pphy Pointer to the alt_tse_phy_info structure + * 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); + + +/* @Function Description: Check link status of PHY and start Auto-Negotiation if it has not yet done + * @API Type: Internal + * @param pphy Pointer to the alt_tse_phy_info structure + * 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); + + +/* @Function Description: Get link capability of PHY and link partner + * @API Type: Internal + * @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); + + +/* @Function Description: Set the advertisement of PHY for 1000 Mbps + * @API Type: Internal + * @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); + + +/* @Function Description: Set the advertisement of PHY for 100 Mbps + * @API Type: Internal + * @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); + + +/* @Function Description: Set the advertisement of PHY for 10 Mbps + * @API Type: Internal + * @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); + + + +/* @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); + + + +/* @Function Description: Set the common speed to 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 + * 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); + + + +/* @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); + +/* @Function Description: Additional configuration for PEF7071 PHY + * @API Type: Internal + * @param pmac Pointer to the first TSE MAC Control Interface Base address of MAC group + */ +alt_32 PEF7071_config(np_tse_mac *pmac); + +/* @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); + +/* @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); + +/* @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); + +/* @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); + +/* @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); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALTERA_AVALON_TSE_H__ */ + diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_tse_system_info.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_tse_system_info.h new file mode 100644 index 0000000..a505a71 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_tse_system_info.h @@ -0,0 +1,352 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_AVALON_TSE_SYSTEM_INFO_H__ +#define __ALTERA_AVALON_TSE_SYSTEM_INFO_H__ + +#include "altera_avalon_tse.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* Define whole TSE system (dedicated descriptor memory, no shared fifo) */ +#define TSE_SYSTEM_EXT_MEM_NO_SHARED_FIFO(tse_name, offset, msgdma_tx_name, msgdma_rx_name, phy_addres, phy_cfg_fp, desc_mem_name) { \ + tse_name##_BASE + offset, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + tse_name##_MDIO_SHARED, \ + tse_name##_NUMBER_OF_MAC_MDIO_SHARED, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII, \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ, \ + TSE_EXT_DESC_MEM, \ + desc_mem_name##_BASE, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + phy_addres, \ + phy_cfg_fp \ +}, + +/* Define whole TSE system (program memory as descriptor memory, no shared fifo) */ +#define TSE_SYSTEM_INT_MEM_NO_SHARED_FIFO(tse_name, offset, msgdma_tx_name, msgdma_rx_name, phy_addres, phy_cfg_fp) { \ + tse_name##_BASE + offset, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + tse_name##_MDIO_SHARED, \ + tse_name##_NUMBER_OF_MAC_MDIO_SHARED, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII, \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ, \ + TSE_INT_DESC_MEM, \ + TSE_INT_DESC_MEM, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + phy_addres, \ + phy_cfg_fp \ +}, + +/* Define whole TSE system (dedicated descriptor memory, use shared fifo) */ +#define TSE_SYSTEM_EXT_MEM_WITH_SHARED_FIFO(tse_name, offset, msgdma_tx_name, msgdma_rx_name, phy_addres, phy_cfg_fp, desc_mem_name, shared_fifo_tx_name, shared_fifo_rx_name) { \ + tse_name##_BASE + offset, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + tse_name##_MDIO_SHARED, \ + tse_name##_NUMBER_OF_MAC_MDIO_SHARED, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII, \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ, \ + TSE_EXT_DESC_MEM, \ + desc_mem_name##_BASE, \ + TSE_USE_SHARED_FIFO, \ + shared_fifo_tx_name##_CONTROL_BASE, \ + shared_fifo_tx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_TX_DEPTH_DEFAULT, \ + shared_fifo_rx_name##_CONTROL_BASE, \ + shared_fifo_rx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_RX_DEPTH_DEFAULT, \ + phy_addres, \ + phy_cfg_fp \ +}, + +/* Define whole TSE system (program memory as descriptor memory, use shared fifo) */ +#define TSE_SYSTEM_INT_MEM_WITH_SHARED_FIFO(tse_name, offset, msgdma_tx_name, msgdma_rx_name, phy_addres, phy_cfg_fp, shared_fifo_tx_name, shared_fifo_rx_name) { \ + tse_name##_BASE + offset, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + tse_name##_MDIO_SHARED, \ + tse_name##_NUMBER_OF_MAC_MDIO_SHARED, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII, \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ, \ + TSE_INT_DESC_MEM, \ + TSE_INT_DESC_MEM, \ + TSE_USE_SHARED_FIFO, \ + shared_fifo_tx_name##_CONTROL_BASE, \ + shared_fifo_tx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_TX_DEPTH_DEFAULT, \ + shared_fifo_rx_name##_CONTROL_BASE, \ + shared_fifo_rx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_RX_DEPTH_DEFAULT, \ + phy_addres, \ + phy_cfg_fp \ +}, + + + +/* Define whole TSE system (dedicated descriptor memory, no shared fifo, enable MDIO sharing on first MAC) */ +/* MDIO sharing not supported for Multi-channel MAC */ +#define TSE_SYSTEM_EXT_MEM_NO_SHARED_FIFO_ENABLE_MDIO_SHARING(tse_name, offset, msgdma_tx_name, msgdma_rx_name, phy_addres, phy_cfg_fp, desc_mem_name, number_of_mac_mdio_sharing) { \ + tse_name##_BASE + offset, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + TSE_ENABLE_MDIO_SHARING, \ + number_of_mac_mdio_sharing, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII, \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ, \ + TSE_EXT_DESC_MEM, \ + desc_mem_name##_BASE, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + phy_addres, \ + phy_cfg_fp \ +}, + +/* Define whole TSE system (program memory as descriptor memory, no shared fifo, enable MDIO sharing on first MAC) */ +/* MDIO sharing not supported for Multi-channel MAC */ +#define TSE_SYSTEM_INT_MEM_NO_SHARED_FIFO_ENABLE_MDIO_SHARING(tse_name, offset, msgdma_tx_name, msgdma_rx_name, phy_addres, phy_cfg_fp, number_of_mac_mdio_sharing) { \ + tse_name##_BASE + offset, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + TSE_ENABLE_MDIO_SHARING, \ + number_of_mac_mdio_sharing, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII, \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ, \ + TSE_INT_DESC_MEM, \ + TSE_INT_DESC_MEM, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + phy_addres, \ + phy_cfg_fp \ +}, + +/* Define whole TSE system (dedicated descriptor memory, use shared fifo, enable MDIO sharing on first MAC) */ +/* MDIO sharing not supported for Multi-channel MAC */ +#define TSE_SYSTEM_EXT_MEM_WITH_SHARED_FIFO_ENABLE_MDIO_SHARING(tse_name, offset, msgdma_tx_name, msgdma_rx_name, phy_addres, phy_cfg_fp, desc_mem_name, shared_fifo_tx_name, shared_fifo_rx_name, number_of_mac_mdio_sharing) { \ + tse_name##_BASE + offset, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + TSE_ENABLE_MDIO_SHARING, \ + number_of_mac_mdio_sharing, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII, \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ, \ + TSE_EXT_DESC_MEM, \ + desc_mem_name##_BASE, \ + TSE_USE_SHARED_FIFO, \ + shared_fifo_tx_name##_CONTROL_BASE, \ + shared_fifo_tx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_TX_DEPTH_DEFAULT, \ + shared_fifo_rx_name##_CONTROL_BASE, \ + shared_fifo_rx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_RX_DEPTH_DEFAULT, \ + phy_addres, \ + phy_cfg_fp \ +}, + +/* Define whole TSE system (program memory as descriptor memory, use shared fifo, enable MDIO sharing on first MAC) */ +/* MDIO sharing not supported for Multi-channel MAC */ +#define TSE_SYSTEM_INT_MEM_WITH_SHARED_FIFO_ENABLE_MDIO_SHARING(tse_name, offset, msgdma_tx_name, msgdma_rx_name, phy_addres, phy_cfg_fp, shared_fifo_tx_name, shared_fifo_rx_name, number_of_mac_mdio_sharing) { \ + tse_name##_BASE + offset, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + TSE_ENABLE_MDIO_SHARING, \ + number_of_mac_mdio_sharing, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII, \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ, \ + TSE_INT_DESC_MEM, \ + TSE_INT_DESC_MEM, \ + TSE_USE_SHARED_FIFO, \ + shared_fifo_tx_name##_CONTROL_BASE, \ + shared_fifo_tx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_TX_DEPTH_DEFAULT, \ + shared_fifo_rx_name##_CONTROL_BASE, \ + shared_fifo_rx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_RX_DEPTH_DEFAULT, \ + phy_addres, \ + phy_cfg_fp \ +}, + + + + +/* Macro to define single component used by alt_tse_system_add_sys() */ +/* Define MAC of TSE system */ +#define TSE_SYSTEM_MAC(tse_name) \ + tse_name##_BASE, \ + tse_name##_TRANSMIT_FIFO_DEPTH, \ + tse_name##_RECEIVE_FIFO_DEPTH, \ + tse_name##_USE_MDIO, \ + tse_name##_ENABLE_MACLITE, \ + tse_name##_MACLITE_GIGE, \ + tse_name##_IS_MULTICHANNEL_MAC, \ + tse_name##_NUMBER_OF_CHANNEL, \ + tse_name##_MDIO_SHARED, \ + tse_name##_NUMBER_OF_MAC_MDIO_SHARED, \ + tse_name##_PCS, \ + tse_name##_PCS_SGMII + +/* Define MSGDMA of TSE system */ +#define TSE_SYSTEM_MSGDMA(msgdma_tx_name, msgdma_rx_name) \ + msgdma_tx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_NAME, \ + msgdma_rx_name##_CSR_IRQ + +/* Define descriptor memory of TSE system (dedicated descriptor memory) */ +#define TSE_SYSTEM_DESC_MEM(desc_mem_name) \ + TSE_EXT_DESC_MEM, \ + desc_mem_name##_BASE + +/* Define descriptor memory of TSE system (program memory as descriptor memory) */ +#define TSE_SYSTEM_NO_DESC_MEM() \ + TSE_INT_DESC_MEM, \ + TSE_INT_DESC_MEM + +/* Define shared fifo of TSE system (use shared fifo) */ +#define TSE_SYSTEM_SHARED_FIFO(shared_fifo_tx_name, shared_fifo_rx_name) \ + TSE_USE_SHARED_FIFO, \ + shared_fifo_tx_name##_CONTROL_BASE, \ + shared_fifo_tx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_TX_DEPTH_DEFAULT, \ + shared_fifo_rx_name##_CONTROL_BASE, \ + shared_fifo_rx_name##_FILL_LEVEL_BASE, \ + ALTERA_TSE_SHARED_FIFO_RX_DEPTH_DEFAULT + +/* Define shared fifo of TSE system (no shared fifo) */ +#define TSE_SYSTEM_NO_SHARED_FIFO() \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO, \ + TSE_NO_SHARED_FIFO + +/* Define PHY of TSE system */ +#define TSE_SYSTEM_PHY(phy_addres, phy_cfg_fp) \ + phy_addres, \ + phy_cfg_fp + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALTERA_AVALON_TSE_SYSTEM_INFO_H__ */ + diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart.h new file mode 100644 index 0000000..e560202 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart.h @@ -0,0 +1,319 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALT_AVALON_UART_H__ +#define __ALT_AVALON_UART_H__ + +#include +#include + +#include "sys/alt_warning.h" + +#include "os/alt_sem.h" +#include "os/alt_flag.h" +#include "alt_types.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#if defined(ALT_USE_SMALL_DRIVERS) || defined(ALTERA_AVALON_UART_SMALL) + +/* + *********************************************************************** + *********************** SMALL DRIVER ********************************** + *********************************************************************** + */ + +/* + * State structure definition. Each instance of the driver uses one + * of these structures to hold its associated state. + */ + +typedef struct altera_avalon_uart_state_s +{ + unsigned int base; +} altera_avalon_uart_state; + +/* + * The macro ALTERA_AVALON_UART_STATE_INSTANCE is used by the + * auto-generated file alt_sys_init.c to create an instance of this + * device driver state. + */ + +#define ALTERA_AVALON_UART_STATE_INSTANCE(name, state) \ + altera_avalon_uart_state state = \ + { \ + name##_BASE \ + } + +/* + * The macro ALTERA_AVALON_UART_STATE_INIT is used by the auto-generated file + * alt_sys_init.c to initialize an instance of the device driver state. + */ + +#define ALTERA_AVALON_UART_STATE_INIT(name, state) + +#else /* fast driver */ + +/* + ********************************************************************** + *********************** FAST DRIVER ********************************** + ********************************************************************** + */ + +/* + * ALT_AVALON_UART_READ_RDY and ALT_AVALON_UART_WRITE_RDY are the bitmasks + * that define uC/OS-II event flags that are releated to this device. + * + * ALT_AVALON_UART_READY_RDY indicates that there is read data in the buffer + * ready to be processed. ALT_UART_WRITE_RDY indicates that the transmitter is + * ready for more data. + */ + +#define ALT_UART_READ_RDY 0x1 +#define ALT_UART_WRITE_RDY 0x2 + +/* + * ALT_AVALON_UART_BUF_LEN is the length of the circular buffers used to hold + * pending transmit and receive data. This value must be a power of two. + */ + +#define ALT_AVALON_UART_BUF_LEN (64) + +/* + * ALT_AVALON_UART_BUF_MSK is used as an internal convenience for detecting + * the end of the arrays used to implement the transmit and receive buffers. + */ + +#define ALT_AVALON_UART_BUF_MSK (ALT_AVALON_UART_BUF_LEN - 1) + +/* + * This is somewhat of an ugly hack, but we need some mechanism for + * representing the non-standard 9 bit mode provided by this UART. In this + * case we abscond with the 5 bit mode setting. The value CS5 is defined in + * termios.h. + */ + +#define CS9 CS5 + +/* + * The value ALT_AVALON_UART_FB is a value set in the devices flag field to + * indicate that the device has a fixed baud rate; i.e. if this flag is set + * software can not control the baud rate of the device. + */ + +#define ALT_AVALON_UART_FB 0x1 + +/* + * The value ALT_AVALON_UART_FC is a value set in the device flag field to + * indicate the the device is using flow control, i.e. the driver must + * throttle on transmit if the nCTS pin is low. + */ + +#define ALT_AVALON_UART_FC 0x2 + +/* + * The altera_avalon_uart_state structure is used to hold device specific data. + * This includes the transmit and receive buffers. + * + * An instance of this structure is created in the auto-generated + * alt_sys_init.c file for each UART listed in the systems PTF file. This is + * done using the ALTERA_AVALON_UART_STATE_INSTANCE macro given below. + */ + +typedef struct altera_avalon_uart_state_s +{ + void* base; /* The base address of the device */ + alt_u32 ctrl; /* Shadow value of the control register */ + volatile alt_u32 rx_start; /* Start of the pending receive data */ + volatile alt_u32 rx_end; /* End of the pending receive data */ + volatile alt_u32 tx_start; /* Start of the pending transmit data */ + volatile alt_u32 tx_end; /* End of the pending transmit data */ +#ifdef ALTERA_AVALON_UART_USE_IOCTL + struct termios termios; /* Current device configuration */ + alt_u32 freq; /* Current baud rate */ +#endif + alt_u32 flags; /* Configuation flags */ + ALT_FLAG_GRP (events) /* Event flags used for + * foreground/background in mult-threaded + * mode */ + ALT_SEM (read_lock) /* Semaphore used to control access to the + * read buffer in multi-threaded mode */ + ALT_SEM (write_lock) /* Semaphore used to control access to the + * write buffer in multi-threaded mode */ + volatile alt_u8 rx_buf[ALT_AVALON_UART_BUF_LEN]; /* The receive buffer */ + volatile alt_u8 tx_buf[ALT_AVALON_UART_BUF_LEN]; /* The transmit buffer */ +} altera_avalon_uart_state; + +/* + * Conditionally define the data structures used to process ioctl requests. + * The following macros are defined for use in creating a device instance: + * + * ALTERA_AVALON_UART_TERMIOS - Initialise the termios structure used to + * describe the UART configuration. + * ALTERA_AVALON_UART_FREQ - Initialise the 'freq' field of the device + * structure, if the field exists. + * ALTERA_AVALON_UART_IOCTL - Initialise the 'ioctl' field of the device + * callback structure, if ioctls are enabled. + */ + +#ifdef ALTERA_AVALON_UART_USE_IOCTL + +#define ALTERA_AVALON_UART_TERMIOS(stop_bits, \ + parity, \ + odd_parity, \ + data_bits, \ + ctsrts, \ + baud) \ +{ \ + 0, \ + 0, \ + ((stop_bits == 2) ? CSTOPB: 0) | \ + ((parity) ? PARENB: 0) | \ + ((odd_parity) ? PAODD: 0) | \ + ((data_bits == 7) ? CS7: (data_bits == 9) ? CS9: CS8) | \ + ((ctsrts) ? CRTSCTS : 0), \ + 0, \ + 0, \ + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \ + baud, \ + baud \ +}, +#define ALTERA_AVALON_UART_FREQ(name) name##_FREQ, + +#else /* !ALTERA_AVALON_UART_USE_IOCTL */ + +#define ALTERA_AVALON_UART_TERMIOS(stop_bits, \ + parity, \ + odd_parity, \ + data_bits, \ + ctsrts, \ + baud) +#define ALTERA_AVALON_UART_FREQ(name) + +#endif /* ALTERA_AVALON_UART_USE_IOCTL */ + +/* + * The macro ALTERA_AVALON_UART_INSTANCE is used by the auto-generated file + * alt_sys_init.c to create an instance of this device driver state. + */ + +#define ALTERA_AVALON_UART_STATE_INSTANCE(name, state) \ + altera_avalon_uart_state state = \ + { \ + (void*) name##_BASE, \ + 0, \ + 0, \ + 0, \ + 0, \ + 0, \ + ALTERA_AVALON_UART_TERMIOS(name##_STOP_BITS, \ + (name##_PARITY == 'N'), \ + (name##_PARITY == 'O'), \ + name##_DATA_BITS, \ + name##_USE_CTS_RTS, \ + name##_BAUD) \ + ALTERA_AVALON_UART_FREQ(name) \ + (name##_FIXED_BAUD ? ALT_AVALON_UART_FB : 0) | \ + (name##_USE_CTS_RTS ? ALT_AVALON_UART_FC : 0) \ + } + +/* + * altera_avalon_uart_init() is called by the auto-generated function + * alt_sys_init() for each UART in the system. This is done using the + * ALTERA_AVALON_UART_INIT macro given below. + * + * This function is responsible for performing all the run time initilisation + * for a device instance, i.e. registering the interrupt handler, and + * regestering the device with the system. + */ +extern void altera_avalon_uart_init(altera_avalon_uart_state* sp, + alt_u32 irq_controller_id, alt_u32 irq); + +/* + * The macro ALTERA_AVALON_UART_STATE_INIT is used by the auto-generated file + * alt_sys_init.c to initialize an instance of the device driver state. + * + * This macro performs a sanity check to ensure that the interrupt has been + * connected for this device. If not, then an apropriate error message is + * generated at build time. + */ + +#define ALTERA_AVALON_UART_STATE_INIT(name, state) \ + if (name##_IRQ == ALT_IRQ_NOT_CONNECTED) \ + { \ + ALT_LINK_ERROR ("Error: Interrupt not connected for " #name ". " \ + "You have selected the interrupt driven version of " \ + "the ALTERA Avalon UART driver, but the interrupt is " \ + "not connected for this device. You can select a " \ + "polled mode driver by checking the 'small driver' " \ + "option in the HAL configuration window, or by " \ + "using the -DALTERA_AVALON_UART_SMALL preprocessor " \ + "flag."); \ + } \ + else \ + { \ + altera_avalon_uart_init(&state, name##_IRQ_INTERRUPT_CONTROLLER_ID, \ + name##_IRQ); \ + } + +#endif /* small driver */ + +/* + * Include in case non-direct version of driver required. + */ +#include "altera_avalon_uart_fd.h" + +/* + * Map alt_sys_init macros to direct or non-direct versions. + */ +#ifdef ALT_USE_DIRECT_DRIVERS + +#define ALTERA_AVALON_UART_INSTANCE(name, state) \ + ALTERA_AVALON_UART_STATE_INSTANCE(name, state) +#define ALTERA_AVALON_UART_INIT(name, state) \ + ALTERA_AVALON_UART_STATE_INIT(name, state) + +#else /* !ALT_USE_DIRECT_DRIVERS */ + +#define ALTERA_AVALON_UART_INSTANCE(name, dev) \ + ALTERA_AVALON_UART_DEV_INSTANCE(name, dev) +#define ALTERA_AVALON_UART_INIT(name, dev) \ + ALTERA_AVALON_UART_DEV_INIT(name, dev) + +#endif /* ALT_USE_DIRECT_DRIVERS */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_AVALON_UART_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart_fd.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart_fd.h new file mode 100644 index 0000000..c5ccd0c --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart_fd.h @@ -0,0 +1,143 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALT_AVALON_UART_FD_H__ +#define __ALT_AVALON_UART_FD_H__ + +#include "sys/alt_dev.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * Externally referenced routines + */ +extern int altera_avalon_uart_read_fd (alt_fd* fd, char* ptr, int len); +extern int altera_avalon_uart_write_fd (alt_fd* fd, const char* ptr, + int len); + +/* + * Device structure definition. This is needed by alt_sys_init in order to + * reserve memory for the device instance. + */ +typedef struct altera_avalon_uart_dev_s +{ + alt_dev dev; + altera_avalon_uart_state state; +} altera_avalon_uart_dev; + +#if defined(ALT_USE_SMALL_DRIVERS) || defined(ALTERA_AVALON_UART_SMALL) + +/* + * Macros used by alt_sys_init when the ALT file descriptor facility is used. + */ + +#define ALTERA_AVALON_UART_DEV_INSTANCE(name, d) \ + static altera_avalon_uart_dev d = \ + { \ + { \ + ALT_LLIST_ENTRY, \ + name##_NAME, \ + NULL, /* open */ \ + NULL, /* close */ \ + altera_avalon_uart_read_fd, \ + altera_avalon_uart_write_fd, \ + NULL, /* lseek */ \ + NULL, /* fstat */ \ + NULL, /* ioctl */ \ + }, \ + { \ + name##_BASE, \ + } \ + } + +#define ALTERA_AVALON_UART_DEV_INIT(name, d) alt_dev_reg (&d.dev) + +#else /* use fast version of the driver */ + +extern int altera_avalon_uart_ioctl_fd (alt_fd* fd, int req, void* arg); +extern int altera_avalon_uart_close_fd(alt_fd* fd); + +#ifdef ALTERA_AVALON_UART_USE_IOCTL +#define ALTERA_AVALON_UART_IOCTL_FD altera_avalon_uart_ioctl_fd +#else +#define ALTERA_AVALON_UART_IOCTL_FD NULL +#endif + +#define ALTERA_AVALON_UART_DEV_INSTANCE(name, d) \ + static altera_avalon_uart_dev d = \ + { \ + { \ + ALT_LLIST_ENTRY, \ + name##_NAME, \ + NULL, /* open */ \ + altera_avalon_uart_close_fd, \ + altera_avalon_uart_read_fd, \ + altera_avalon_uart_write_fd, \ + NULL, /* lseek */ \ + NULL, /* fstat */ \ + ALTERA_AVALON_UART_IOCTL_FD, \ + }, \ + { \ + (void*) name##_BASE, \ + 0, \ + 0, \ + 0, \ + 0, \ + 0, \ + ALTERA_AVALON_UART_TERMIOS(name##_STOP_BITS, \ + (name##_PARITY == 'N'), \ + (name##_PARITY == 'O'), \ + name##_DATA_BITS, \ + name##_USE_CTS_RTS, \ + name##_BAUD) \ + ALTERA_AVALON_UART_FREQ(name) \ + (name##_FIXED_BAUD ? ALT_AVALON_UART_FB : 0) | \ + (name##_USE_CTS_RTS ? ALT_AVALON_UART_FC : 0) \ + } \ + } + +#define ALTERA_AVALON_UART_DEV_INIT(name, d) \ + { \ + ALTERA_AVALON_UART_STATE_INIT(name, d.state); \ + \ + /* make the device available to the system */ \ + alt_dev_reg(&d.dev); \ + } + +#endif /* fast driver */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_AVALON_UART_FD_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart_regs.h new file mode 100644 index 0000000..3c4c31e --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_avalon_uart_regs.h @@ -0,0 +1,137 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_AVALON_UART_REGS_H__ +#define __ALTERA_AVALON_UART_REGS_H__ + +#include + +#define ALTERA_AVALON_UART_RXDATA_REG 0 +#define IOADDR_ALTERA_AVALON_UART_RXDATA(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_UART_RXDATA_REG) +#define IORD_ALTERA_AVALON_UART_RXDATA(base) \ + IORD(base, ALTERA_AVALON_UART_RXDATA_REG) +#define IOWR_ALTERA_AVALON_UART_RXDATA(base, data) \ + IOWR(base, ALTERA_AVALON_UART_RXDATA_REG, data) + +#define ALTERA_AVALON_UART_TXDATA_REG 1 +#define IOADDR_ALTERA_AVALON_UART_TXDATA(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_UART_TXDATA_REG) +#define IORD_ALTERA_AVALON_UART_TXDATA(base) \ + IORD(base, ALTERA_AVALON_UART_TXDATA_REG) +#define IOWR_ALTERA_AVALON_UART_TXDATA(base, data) \ + IOWR(base, ALTERA_AVALON_UART_TXDATA_REG, data) + +#define ALTERA_AVALON_UART_STATUS_REG 2 +#define IOADDR_ALTERA_AVALON_UART_STATUS(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_UART_STATUS_REG) +#define IORD_ALTERA_AVALON_UART_STATUS(base) \ + IORD(base, ALTERA_AVALON_UART_STATUS_REG) +#define IOWR_ALTERA_AVALON_UART_STATUS(base, data) \ + IOWR(base, ALTERA_AVALON_UART_STATUS_REG, data) + +#define ALTERA_AVALON_UART_STATUS_PE_MSK (0x1) +#define ALTERA_AVALON_UART_STATUS_PE_OFST (0) +#define ALTERA_AVALON_UART_STATUS_FE_MSK (0x2) +#define ALTERA_AVALON_UART_STATUS_FE_OFST (1) +#define ALTERA_AVALON_UART_STATUS_BRK_MSK (0x4) +#define ALTERA_AVALON_UART_STATUS_BRK_OFST (2) +#define ALTERA_AVALON_UART_STATUS_ROE_MSK (0x8) +#define ALTERA_AVALON_UART_STATUS_ROE_OFST (3) +#define ALTERA_AVALON_UART_STATUS_TOE_MSK (0x10) +#define ALTERA_AVALON_UART_STATUS_TOE_OFST (4) +#define ALTERA_AVALON_UART_STATUS_TMT_MSK (0x20) +#define ALTERA_AVALON_UART_STATUS_TMT_OFST (5) +#define ALTERA_AVALON_UART_STATUS_TRDY_MSK (0x40) +#define ALTERA_AVALON_UART_STATUS_TRDY_OFST (6) +#define ALTERA_AVALON_UART_STATUS_RRDY_MSK (0x80) +#define ALTERA_AVALON_UART_STATUS_RRDY_OFST (7) +#define ALTERA_AVALON_UART_STATUS_E_MSK (0x100) +#define ALTERA_AVALON_UART_STATUS_E_OFST (8) +#define ALTERA_AVALON_UART_STATUS_DCTS_MSK (0x400) +#define ALTERA_AVALON_UART_STATUS_DCTS_OFST (10) +#define ALTERA_AVALON_UART_STATUS_CTS_MSK (0x800) +#define ALTERA_AVALON_UART_STATUS_CTS_OFST (11) +#define ALTERA_AVALON_UART_STATUS_EOP_MSK (0x1000) +#define ALTERA_AVALON_UART_STATUS_EOP_OFST (12) + +#define ALTERA_AVALON_UART_CONTROL_REG 3 +#define IOADDR_ALTERA_AVALON_UART_CONTROL(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_UART_CONTROL_REG) +#define IORD_ALTERA_AVALON_UART_CONTROL(base) \ + IORD(base, ALTERA_AVALON_UART_CONTROL_REG) +#define IOWR_ALTERA_AVALON_UART_CONTROL(base, data) \ + IOWR(base, ALTERA_AVALON_UART_CONTROL_REG, data) + +#define ALTERA_AVALON_UART_CONTROL_PE_MSK (0x1) +#define ALTERA_AVALON_UART_CONTROL_PE_OFST (0) +#define ALTERA_AVALON_UART_CONTROL_FE_MSK (0x2) +#define ALTERA_AVALON_UART_CONTROL_FE_OFST (1) +#define ALTERA_AVALON_UART_CONTROL_BRK_MSK (0x4) +#define ALTERA_AVALON_UART_CONTROL_BRK_OFST (2) +#define ALTERA_AVALON_UART_CONTROL_ROE_MSK (0x8) +#define ALTERA_AVALON_UART_CONTROL_ROE_OFST (3) +#define ALTERA_AVALON_UART_CONTROL_TOE_MSK (0x10) +#define ALTERA_AVALON_UART_CONTROL_TOE_OFST (4) +#define ALTERA_AVALON_UART_CONTROL_TMT_MSK (0x20) +#define ALTERA_AVALON_UART_CONTROL_TMT_OFST (5) +#define ALTERA_AVALON_UART_CONTROL_TRDY_MSK (0x40) +#define ALTERA_AVALON_UART_CONTROL_TRDY_OFST (6) +#define ALTERA_AVALON_UART_CONTROL_RRDY_MSK (0x80) +#define ALTERA_AVALON_UART_CONTROL_RRDY_OFST (7) +#define ALTERA_AVALON_UART_CONTROL_E_MSK (0x100) +#define ALTERA_AVALON_UART_CONTROL_E_OFST (8) +#define ALTERA_AVALON_UART_CONTROL_DCTS_MSK (0x400) +#define ALTERA_AVALON_UART_CONTROL_DCTS_OFST (10) +#define ALTERA_AVALON_UART_CONTROL_RTS_MSK (0x800) +#define ALTERA_AVALON_UART_CONTROL_RTS_OFST (11) +#define ALTERA_AVALON_UART_CONTROL_EOP_MSK (0x1000) +#define ALTERA_AVALON_UART_CONTROL_EOP_OFST (12) + +#define ALTERA_AVALON_UART_DIVISOR_REG 4 +#define IOADDR_ALTERA_AVALON_UART_DIVISOR(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_UART_DIVISOR_REG) +#define IORD_ALTERA_AVALON_UART_DIVISOR(base) \ + IORD(base, ALTERA_AVALON_UART_DIVISOR_REG) +#define IOWR_ALTERA_AVALON_UART_DIVISOR(base, data) \ + IOWR(base, ALTERA_AVALON_UART_DIVISOR_REG, data) + +#define ALTERA_AVALON_UART_EOP_REG 5 +#define IOADDR_ALTERA_AVALON_UART_EOP(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_UART_EOP_REG) +#define IORD_ALTERA_AVALON_UART_EOP(base) \ + IORD(base, ALTERA_AVALON_UART_EOP_REG) +#define IOWR_ALTERA_AVALON_UART_EOP(base, data) \ + IOWR(base, ALTERA_AVALON_UART_EOP_REG, data) + +#define ALTERA_AVALON_UART_EOP_MSK (0xFF) +#define ALTERA_AVALON_UART_EOP_OFST (0) + +#endif /* __ALTERA_AVALON_UART_REGS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_eth_tse.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_eth_tse.h new file mode 100644 index 0000000..d796843 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_eth_tse.h @@ -0,0 +1,45 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_ETH_TSE_H__ +#define __ALTERA_ETH_TSE_H__ + +#if defined(ALT_INICHE) + +#include "iniche/altera_eth_tse_iniche.h" + +#else + +#define ALTERA_ETH_TSE_INSTANCE(name, dev) extern int alt_no_storage +#define ALTERA_ETH_TSE_INIT(name, dev) while(0) + +#endif + +#endif /* __ALTERA_ETH_TSE_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_eth_tse_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_eth_tse_regs.h new file mode 100644 index 0000000..7a2da9d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_eth_tse_regs.h @@ -0,0 +1,735 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_ETH_TSE_REGS_H__ +#define __ALTERA_ETH_TSE_REGS_H__ + + +#include "alt_types.h" +#include "io.h" + +/* MAC Registers */ + +/* Revision register (read-only) */ +#define IOADDR_ALTERA_TSEMAC_REV(base) __IO_CALC_ADDRESS_NATIVE(base,0x0) +#define IORD_ALTERA_TSEMAC_REV(base) IORD_32DIRECT(base, 0) + +/* Scratch register */ +#define IOADDR_ALTERA_TSEMAC_SCRATCH(base) __IO_CALC_ADDRESS_NATIVE(base,0x4) +#define IORD_ALTERA_TSEMAC_SCRATCH(base) IORD_32DIRECT(base, 0x4) +#define IOWR_ALTERA_TSEMAC_SCRATCH(base,data) IOWR_32DIRECT(base, 0x4, data) + +/* Command register */ +#define IOADDR_ALTERA_TSEMAC_CMD_CONFIG(base) __IO_CALC_ADDRESS_NATIVE(base,0x8) +#define IORD_ALTERA_TSEMAC_CMD_CONFIG(base) IORD_32DIRECT(base, 0x8) +#define IOWR_ALTERA_TSEMAC_CMD_CONFIG(base,data) IOWR_32DIRECT(base, 0x8, data) + +/* Command register bit definitions */ +#define ALTERA_TSEMAC_CMD_TX_ENA_OFST (0) +#define ALTERA_TSEMAC_CMD_TX_ENA_MSK (0x1) +#define ALTERA_TSEMAC_CMD_RX_ENA_OFST (1) +#define ALTERA_TSEMAC_CMD_RX_ENA_MSK (0x2) +#define ALTERA_TSEMAC_CMD_XON_GEN_OFST (2) +#define ALTERA_TSEMAC_CMD_XON_GEN_MSK (0x4) +#define ALTERA_TSEMAC_CMD_ETH_SPEED_OFST (3) +#define ALTERA_TSEMAC_CMD_ETH_SPEED_MSK (0x8) +#define ALTERA_TSEMAC_CMD_PROMIS_EN_OFST (4) +#define ALTERA_TSEMAC_CMD_PROMIS_EN_MSK (0x10) +#define ALTERA_TSEMAC_CMD_PAD_EN_OFST (5) +#define ALTERA_TSEMAC_CMD_PAD_EN_MSK (0x20) +#define ALTERA_TSEMAC_CMD_CRC_FWD_OFST (6) +#define ALTERA_TSEMAC_CMD_CRC_FWD_MSK (0x40) +#define ALTERA_TSEMAC_CMD_PAUSE_FWD_OFST (7) +#define ALTERA_TSEMAC_CMD_PAUSE_FWD_MSK (0x80) +#define ALTERA_TSEMAC_CMD_PAUSE_IGNORE_OFST (8) +#define ALTERA_TSEMAC_CMD_PAUSE_IGNORE_MSK (0x100) +#define ALTERA_TSEMAC_CMD_TX_ADDR_INS_OFST (9) +#define ALTERA_TSEMAC_CMD_TX_ADDR_INS_MSK (0x200) +#define ALTERA_TSEMAC_CMD_HD_ENA_OFST (10) +#define ALTERA_TSEMAC_CMD_HD_ENA_MSK (0x400) +#define ALTERA_TSEMAC_CMD_EXCESS_COL_OFST (11) +#define ALTERA_TSEMAC_CMD_EXCESS_COL_MSK (0x800) +#define ALTERA_TSEMAC_CMD_LATE_COL_OFST (12) +#define ALTERA_TSEMAC_CMD_LATE_COL_MSK (0x1000) +#define ALTERA_TSEMAC_CMD_SW_RESET_OFST (13) +#define ALTERA_TSEMAC_CMD_SW_RESET_MSK (0x2000) +#define ALTERA_TSEMAC_CMD_MHASH_SEL_OFST (14) +#define ALTERA_TSEMAC_CMD_MHASH_SEL_MSK (0x4000) +#define ALTERA_TSEMAC_CMD_LOOPBACK_OFST (15) +#define ALTERA_TSEMAC_CMD_LOOPBACK_MSK (0x8000) +/* Bits (18:16) = address select */ +#define ALTERA_TSEMAC_CMD_TX_ADDR_SEL_OFST (16) +#define ALTERA_TSEMAC_CMD_TX_ADDR_SEL_MSK (0x70000) +#define ALTERA_TSEMAC_CMD_MAGIC_ENA_OFST (19) +#define ALTERA_TSEMAC_CMD_MAGIC_ENA_MSK (0x80000) +#define ALTERA_TSEMAC_CMD_SLEEP_OFST (20) +#define ALTERA_TSEMAC_CMD_SLEEP_MSK (0x100000) +#define ALTERA_TSEMAC_CMD_WAKEUP_OFST (21) +#define ALTERA_TSEMAC_CMD_WAKEUP_MSK (0x200000) +#define ALTERA_TSEMAC_CMD_XOFF_GEN_OFST (22) +#define ALTERA_TSEMAC_CMD_XOFF_GEN_MSK (0x400000) +#define ALTERA_TSEMAC_CMD_CNTL_FRM_ENA_OFST (23) +#define ALTERA_TSEMAC_CMD_CNTL_FRM_ENA_MSK (0x800000) +#define ALTERA_TSEMAC_CMD_NO_LENGTH_CHECK_OFST (24) +#define ALTERA_TSEMAC_CMD_NO_LENGTH_CHECK_MSK (0x1000000) +#define ALTERA_TSEMAC_CMD_ENA_10_OFST (25) +#define ALTERA_TSEMAC_CMD_ENA_10_MSK (0x2000000) +#define ALTERA_TSEMAC_CMD_RX_ERR_DISC_OFST (26) +#define ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK (0x4000000) +/* Bits (30..27) reserved */ +#define ALTERA_TSEMAC_CMD_CNT_RESET_OFST (31) +#define ALTERA_TSEMAC_CMD_CNT_RESET_MSK (0x80000000) + +/* Low word (bits 31:0) of MAC address */ +#define IOADDR_ALTERA_TSEMAC_MAC_0(base) __IO_CALC_ADDRESS_NATIVE(base,0xC) +#define IORD_ALTERA_TSEMAC_MAC_0(base) IORD_32DIRECT(base, 0xC) +#define IOWR_ALTERA_TSEMAC_MAC_0(base,data) IOWR_32DIRECT(base, 0xC, data) + +/* High half-word (bits 47:32) of MAC address. Upper 16 bits reserved */ +#define IOADDR_ALTERA_TSEMAC_MAC_1(base) __IO_CALC_ADDRESS_NATIVE(base,0x10) +#define IORD_ALTERA_TSEMAC_MAC_1(base) IORD_32DIRECT(base, 0x10) +#define IOWR_ALTERA_TSEMAC_MAC_1(base,data) IOWR_32DIRECT(base, 0x10, data) + +/* Maximum frame length (bits 13:0), (bits 31:14 are reserved) */ +#define IOADDR_ALTERA_TSEMAC_FRM_LENGTH(base) __IO_CALC_ADDRESS_NATIVE(base,0x14) +#define IORD_ALTERA_TSEMAC_FRM_LENGTH(base) IORD_32DIRECT(base, 0x14) +#define IOWR_ALTERA_TSEMAC_FRM_LENGTH(base,data) IOWR_32DIRECT(base, 0x14, data) + +/* Receive pause quanta. Bits 31:16 reserved */ +#define IOADDR_ALTERA_TSEMAC_PAUSE_QUANT(base) __IO_CALC_ADDRESS_NATIVE(base,0x18) +#define IORD_ALTERA_TSEMAC_PAUSE_QUANT(base) IORD_32DIRECT(base, 0x18) +#define IOWR_ALTERA_TSEMAC_PAUSE_QUANT(base,data) IOWR_32DIRECT(base, 0x18, data) + +/* Sets RX FIFO section empty threshold */ +#define IOADDR_ALTERA_TSEMAC_RX_SECTION_EMPTY(base) __IO_CALC_ADDRESS_NATIVE(base,0x1C) +#define IORD_ALTERA_TSEMAC_RX_SECTION_EMPTY(base) IORD_32DIRECT(base, 0x1C) +#define IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(base,data) IOWR_32DIRECT(base, 0x1C, data) + +/* Set RX FIFO section full threshold */ +#define IOADDR_ALTERA_TSEMAC_RX_SECTION_FULL(base) __IO_CALC_ADDRESS_NATIVE(base,0x20) +#define IORD_ALTERA_TSEMAC_RX_SECTION_FULL(base) IORD_32DIRECT(base, 0x20) +#define IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(base,data) IOWR_32DIRECT(base, 0x20, data) + +/* Set TX FIFO section empty threshold */ +#define IOADDR_ALTERA_TSEMAC_TX_SECTION_EMPTY(base) __IO_CALC_ADDRESS_NATIVE(base,0x24) +#define IORD_ALTERA_TSEMAC_TX_SECTION_EMPTY(base) IORD_32DIRECT(base, 0x24) +#define IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(base,data) IOWR_32DIRECT(base, 0x24, data) + +/* Set TX FIFO section full threshold */ +#define IOADDR_ALTERA_TSEMAC_TX_SECTION_FULL(base) __IO_CALC_ADDRESS_NATIVE(base,0x28) +#define IORD_ALTERA_TSEMAC_TX_SECTION_FULL(base) IORD_32DIRECT(base, 0x28) +#define IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(base,data) IOWR_32DIRECT(base, 0x28, data) + +/* Set RX FIFO almost empty threshold */ +#define IOADDR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(base) __IO_CALC_ADDRESS_NATIVE(base,0x2c) +#define IORD_ALTERA_TSEMAC_RX_ALMOST_EMPTY(base) IORD_32DIRECT(base, 0x2c) +#define IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(base,data) IOWR_32DIRECT(base, 0x2c, data) + +/* Set RX FIFO almost full threshold */ +#define IOADDR_ALTERA_TSEMAC_RX_ALMOST_FULL(base) __IO_CALC_ADDRESS_NATIVE(base,0x30) +#define IORD_ALTERA_TSEMAC_RX_ALMOST_FULL(base) IORD_32DIRECT(base, 0x30) +#define IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(base,data) IOWR_32DIRECT(base, 0x30, data) + +/* Set TX FIFO almost empty threshold */ +#define IOADDR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(base) __IO_CALC_ADDRESS_NATIVE(base,0x34) +#define IORD_ALTERA_TSEMAC_TX_ALMOST_EMPTY(base) IORD_32DIRECT(base, 0x34) +#define IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(base,data) IOWR_32DIRECT(base, 0x34, data) + +/* Set TX FIFO almost full threshold */ +#define IOADDR_ALTERA_TSEMAC_TX_ALMOST_FULL(base) __IO_CALC_ADDRESS_NATIVE(base,0x38) +#define IORD_ALTERA_TSEMAC_TX_ALMOST_FULL(base) IORD_32DIRECT(base, 0x38) +#define IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(base,data) IOWR_32DIRECT(base, 0x38, data) + +/* MDIO Address of PHY 0. Bits 31:5 reserved */ +#define IOADDR_ALTERA_TSEMAC_MDIO_ADDR0(base) __IO_CALC_ADDRESS_NATIVE(base,0x3c) +#define IORD_ALTERA_TSEMAC_MDIO_ADDR0(base) IORD_32DIRECT(base, 0x3c) +#define IOWR_ALTERA_TSEMAC_MDIO_ADDR0(base,data) IOWR_32DIRECT(base, 0x3c, data) + +/* MDIO Address of PHY 1. Bits 31:5 reserved */ +#define IOADDR_ALTERA_TSEMAC_MDIO_ADDR1(base) __IO_CALC_ADDRESS_NATIVE(base,0x40) +#define IORD_ALTERA_TSEMAC_MDIO_ADDR1(base) IORD_32DIRECT(base, 0x40) +#define IOWR_ALTERA_TSEMAC_MDIO_ADDR1(base,data) IOWR_32DIRECT(base, 0x40, data) + +/* -- Register offsets 0x44 to 0x54 reserved -- */ + +/* Register read access status */ +#define IOADDR_ALTERA_TSEMAC_REG_STAT(base) __IO_CALC_ADDRESS_NATIVE(base,0x58) +#define IORD_ALTERA_TSEMAC_REG_STAT(base) IORD_32DIRECT(base, 0x58) + + +/* Inter-packet gap. Bits 31:5 reserved/ */ +#define IOADDR_ALTERA_TSEMAC_TX_IPG_LENGTH(base) __IO_CALC_ADDRESS_NATIVE(base,0x5c) +#define IORD_ALTERA_TSEMAC_TX_IPG_LENGTH(base) IORD_32DIRECT(base, 0x5c) +#define IOWR_ALTERA_TSEMAC_TX_IPG_LENGTH(base,data) IOWR_32DIRECT(base, 0x5c, data) + + +/* IEEE802.3, RMON, and MIB-II SNMP Statistic event counters */ +#define IOADDR_ALTERA_TSEMAC_A_MACID_1(base) __IO_CALC_ADDRESS_NATIVE(base,0x60) +#define IORD_ALTERA_TSEMAC_A_MACID_1(base) IORD_32DIRECT(base, 0x60) + + +#define IOADDR_ALTERA_TSEMAC_A_MACID_2(base) __IO_CALC_ADDRESS_NATIVE(base,0x64) +#define IORD_ALTERA_TSEMAC_A_MACID_2(base) IORD_32DIRECT(base, 0x64) + + +#define IOADDR_ALTERA_TSEMAC_A_FRAMES_TX_OK(base) __IO_CALC_ADDRESS_NATIVE(base,0x68) +#define IORD_ALTERA_TSEMAC_A_FRAMES_TX_OK(base) IORD_32DIRECT(base, 0x68) + + +#define IOADDR_ALTERA_TSEMAC_A_FRAMES_RX_OK(base) __IO_CALC_ADDRESS_NATIVE(base,0x6c) +#define IORD_ALTERA_TSEMAC_A_FRAMES_RX_OK(base) IORD_32DIRECT(base, 0x6c) + + +#define IOADDR_ALTERA_TSEMAC_A_FRAME_CHECK_SEQ_ERRS(base) __IO_CALC_ADDRESS_NATIVE(base,0x70) +#define IORD_ALTERA_TSEMAC_A_FRAME_CHECK_SEQ_ERRS(base) IORD_32DIRECT(base, 0x70) + + +#define IOADDR_ALTERA_TSEMAC_A_ALIGNMENT_ERRS(base) __IO_CALC_ADDRESS_NATIVE(base,0x74) +#define IORD_ALTERA_TSEMAC_A_ALIGNMENT_ERRS(base) IORD_32DIRECT(base, 0x74) + + +#define IOADDR_ALTERA_TSEMAC_A_OCTETS_TX_OK(base) __IO_CALC_ADDRESS_NATIVE(base,0x78) +#define IORD_ALTERA_TSEMAC_A_OCTETS_TX_OK(base) IORD_32DIRECT(base, 0x78) + + +#define IOADDR_ALTERA_TSEMAC_A_OCTETS_RX_OK(base) __IO_CALC_ADDRESS_NATIVE(base,0x7c) +#define IORD_ALTERA_TSEMAC_A_OCTETS_RX_OK(base) IORD_32DIRECT(base, 0x7c) + + +#define IOADDR_ALTERA_TSEMAC_A_TX_PAUSE_MAC_CTRL_FRAMES(base) __IO_CALC_ADDRESS_NATIVE(base,0x80) +#define IORD_ALTERA_TSEMAC_A_TX_PAUSE_MAC_CTRL_FRAMES(base) IORD_32DIRECT(base, 0x80) + + +#define IOADDR_ALTERA_TSEMAC_A_RX_PAUSE_MAC_CTRL_FRAMES(base) __IO_CALC_ADDRESS_NATIVE(base,0x84) +#define IORD_ALTERA_TSEMAC_A_RX_PAUSE_MAC_CTRL_FRAMES(base) IORD_32DIRECT(base, 0x84) + + +#define IOADDR_ALTERA_TSEMAC_IF_IN_ERRORS(base) __IO_CALC_ADDRESS_NATIVE(base,0x88) +#define IORD_ALTERA_TSEMAC_IF_IN_ERRORS(base) IORD_32DIRECT(base, 0x88) + + +#define IOADDR_ALTERA_TSEMAC_IF_OUT_ERRORS(base) __IO_CALC_ADDRESS_NATIVE(base,0x8c) +#define IORD_ALTERA_TSEMAC_IF_OUT_ERRORS(base) IORD_32DIRECT(base, 0x8c) + + +#define IOADDR_ALTERA_TSEMAC_IF_IN_UCAST_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0x90) +#define IORD_ALTERA_TSEMAC_IF_IN_UCAST_PKTS(base) IORD_32DIRECT(base, 0x90) + + +#define IOADDR_ALTERA_TSEMAC_IF_IN_MULTICAST_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0x94) +#define IORD_ALTERA_TSEMAC_IF_IN_MULTICAST_PKTS(base) IORD_32DIRECT(base, 0x94) + + +#define IOADDR_ALTERA_TSEMAC_IF_IN_BROADCAST_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0x98) +#define IORD_ALTERA_TSEMAC_IF_IN_BROADCAST_PKTS(base) IORD_32DIRECT(base, 0x98) + + +#define IOADDR_ALTERA_TSEMAC_IF_OUT_DISCARDS(base) __IO_CALC_ADDRESS_NATIVE(base,0x9C) +#define IORD_ALTERA_TSEMAC_IF_OUT_DISCARDS(base) IORD_32DIRECT(base, 0x9C) + + +#define IOADDR_ALTERA_TSEMAC_IF_OUT_UCAST_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0xA0) +#define IORD_ALTERA_TSEMAC_IF_OUT_UCAST_PKTS(base) IORD_32DIRECT(base, 0xA0) + + +#define IOADDR_ALTERA_TSEMAC_IF_OUT_MULTICAST_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0xA4) +#define IORD_ALTERA_TSEMAC_IF_OUT_MULTICAST_PKTS(base) IORD_32DIRECT(base, 0xA4) + + +#define IOADDR_ALTERA_TSEMAC_IF_OUT_BROADCAST_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0xA8) +#define IORD_ALTERA_TSEMAC_IF_OUT_BROADCAST_PKTS(base) IORD_32DIRECT(base, 0xA8) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_DROP_EVENTS(base) __IO_CALC_ADDRESS_NATIVE(base,0xAC) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_DROP_EVENTS(base) IORD_32DIRECT(base, 0xAC) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_OCTETS(base) __IO_CALC_ADDRESS_NATIVE(base,0xB0) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_OCTETS(base) IORD_32DIRECT(base, 0xB0) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0xB4) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_PKTS(base) IORD_32DIRECT(base, 0xB4) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_UNDERSIZE_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0xB8) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_UNDERSIZE_PKTS(base) IORD_32DIRECT(base, 0xB8) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_OVERSIZE_PKTS(base) __IO_CALC_ADDRESS_NATIVE(base,0xBC) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_OVERSIZE_PKTS(base) IORD_32DIRECT(base, 0xBC) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_PKTS_64_OCTETS(base) __IO_CALC_ADDRESS_NATIVE(base,0xC0) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_PKTS_64_OCTETS(base) IORD_32DIRECT(base, 0xC0) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_PKTS_65_TO_127_OCTETS(base) __IO_CALC_ADDRESS_NATIVE(base,0xC4) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_PKTS_65_TO_127_OCTETS(base) IORD_32DIRECT(base, 0xC4) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_PKTS_128_TO_255_OCTETS(base) __IO_CALC_ADDRESS_NATIVE(base,0xC8) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_PKTS_128_TO_255_OCTETS(base) IORD_32DIRECT(base, 0xC8) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_PKTS_256_TO_511_OCTETS(base) __IO_CALC_ADDRESS_NATIVE(base,0xCC) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_PKTS_256_TO_511_OCTETS(base) IORD_32DIRECT(base, 0xCC) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_PKTS_512_TO_1023_OCTETS(base) __IO_CALC_ADDRESS_NATIVE(base,0xD0) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_PKTS_512_TO_1023_OCTETS(base) IORD_32DIRECT(base, 0xD0) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_PKTS_1024_TO_1518_OCTETS(base) __IO_CALC_ADDRESS_NATIVE(base,0xD4) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_PKTS_1024_TO_1518_OCTETS(base) IORD_32DIRECT(base, 0xD4) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_PKTS_1519_TO_X_OCTETS(base) __IO_CALC_ADDRESS_NATIVE(base,0xD8) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_PKTS_1519_TO_X_OCTETS(base) IORD_32DIRECT(base, 0xD8) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_JABBERS(base) __IO_CALC_ADDRESS_NATIVE(base,0xDC) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_JABBERS(base) IORD_32DIRECT(base, 0xDC) + + +#define IOADDR_ALTERA_TSEMAC_ETHER_STATS_FRAGMENTS(base) __IO_CALC_ADDRESS_NATIVE(base,0xE0) +#define IORD_ALTERA_TSEMAC_ETHER_STATS_FRAGMENTS(base) IORD_32DIRECT(base, 0xE0) + + + +/* Register offset 0xE4 reserved */ + +#define IOADDR_ALTERA_TSEMAC_TX_CMD_STAT(base) __IO_CALC_ADDRESS_NATIVE(base,0xE8) +#define IORD_ALTERA_TSEMAC_TX_CMD_STAT(base) IORD_32DIRECT(base, 0xE8) +#define IOWR_ALTERA_TSEMAC_TX_CMD_STAT(base,data) IOWR_32DIRECT(base, 0xE8, data) + + +#define IOADDR_ALTERA_TSEMAC_RX_CMD_STAT(base) __IO_CALC_ADDRESS_NATIVE(base,0xEC) +#define IORD_ALTERA_TSEMAC_RX_CMD_STAT(base) IORD_32DIRECT(base, 0xEC) +#define IOWR_ALTERA_TSEMAC_RX_CMD_STAT(base,data) IOWR_32DIRECT(base, 0xEC, data) + + +#define ALTERA_TSEMAC_TX_CMD_STAT_OMITCRC_OFST (17) +#define ALTERA_TSEMAC_TX_CMD_STAT_OMITCRC_MSK (0x20000) +#define ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_OFST (18) +#define ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_MSK (0x40000) + +#define ALTERA_TSEMAC_RX_CMD_STAT_RXSHIFT16_OFST (25) +#define ALTERA_TSEMAC_RX_CMD_STAT_RXSHIFT16_MSK (0x2000000) + +/* Register offset 0xF0 to 0xFC reserved */ + + +/* + * Share Multi Channel FIFO + * + * ## Threshold Register Access ## - Av-MM interface 1 + */ +#define IOADDR_ALTERA_MULTI_CHAN_FIFO_SEC_FULL_THRESHOLD(base) __IO_CALC_ADDRESS_NATIVE(base,0x00) +#define IORD_ALTERA_MULTI_CHAN_FIFO_SEC_FULL_THRESHOLD(base) IORD_32DIRECT(base, 0x00) +#define IOWR_ALTERA_MULTI_CHAN_FIFO_SEC_FULL_THRESHOLD(base,data) IOWR_32DIRECT(base, 0x00, data) + + +#define IOADDR_ALTERA_MULTI_CHAN_FIFO_SEC_EMPTY_THRESHOLD(base) __IO_CALC_ADDRESS_NATIVE(base,0x04) +#define IORD_ALTERA_MULTI_CHAN_FIFO_SEC_EMPTY_THRESHOLD(base) IORD_32DIRECT(base, 0x04) +#define IOWR_ALTERA_MULTI_CHAN_FIFO_SEC_EMPTY_THRESHOLD(base,data) IOWR_32DIRECT(base, 0x04, data) + +#define IOADDR_ALTERA_MULTI_CHAN_FIFO_ALMOST_FULL_THRESHOLD(base) __IO_CALC_ADDRESS_NATIVE(base,0x08) +#define IORD_ALTERA_MULTI_CHAN_FIFO_ALMOST_FULL_THRESHOLD(base) IORD_32DIRECT(base, 0x08) +#define IOWR_ALTERA_MULTI_CHAN_FIFO_ALMOST_FULL_THRESHOLD(base,data) IOWR_32DIRECT(base, 0x08, data) + +#define IOADDR_ALTERA_MULTI_CHAN_FIFO_ALMOST_EMPTY_THRESHOLD(base) __IO_CALC_ADDRESS_NATIVE(base,0x10) +#define IORD_ALTERA_MULTI_CHAN_FIFO_ALMOST_EMPTY_THRESHOLD(base) IORD_32DIRECT(base, 0x10) +#define IOWR_ALTERA_MULTI_CHAN_FIFO_ALMOST_EMPTY_THRESHOLD(base,data) IOWR_32DIRECT(base, 0x10, data) + +/* + * Share Multi Channel FIFO + * + * ## Fill Level Query Access ## - Av-MM interface 2 + */ +#define IOADDR_ALTERA_MULTI_CHAN_FILL_LEVEL(base, channel) __IO_CALC_ADDRESS_NATIVE(base,(channel * 0x04)) +#define IORD_ALTERA_MULTI_CHAN_FILL_LEVEL(base, channel) IORD_32DIRECT(base, (channel * 0x04)) + +/* + * Hash table occupies registers 0x100:0x1FC. Explicit register definitions + * are not provided. If programatic access to the hash table is necessary, + * define a region of uncached memory using alt_remap_uncached, or use the + * IORD/IOWR macros to access memory at the Ethernet MAC base address plus + * offsets in the range 0x100 to 0x1Fc. + * + * The hash table's purpose is to provide multicast address resolution. When + * programming the table, only bit '0' is significant. If a '1' is written, + * all multicast addresses represented by the hash code (Address bits 0 to 5) + * are accepted by the controller. If a '0' is written, matching multicast + * addresses are rejected. + */ +#define IOADDR_ALTERA_TSEMAC_HASH_TABLE(base) \ + __IO_CALC_ADDRESS_NATIVE(base,0x100) +#define IORD_ALTERA_TSEMAC_HASH_TABLE(base, offset) \ + IORD_32DIRECT(base, (0x100 + offset)) +#define IOWR_ALTERA_TSEMAC_HASH_TABLE(base, offset, data) \ + IOWR_32DIRECT(base, (0x100 + offset), data) + + /* + * PHY MDIO registers + * + * For all registers, bits 15:0 are relevant. Bits 31:16 should be written + * with 0 and ignored on read. + */ + +/* Generic access macro for either MDIO port */ +#define IOADDR_ALTERA_TSEMAC_MDIO(base, mdio) \ + __IO_CALC_ADDRESS_NATIVE(base, (0x200 + (mdio * 0x80)) ) + +#define IORD_ALTERA_TSEMAC_MDIO(base, mdio, reg_num) \ + IORD_16DIRECT(base, 0x200 + (mdio * 0x80) + (reg_num * sizeof(alt_u32)) ) + +#define IOWR_ALTERA_TSEMAC_MDIO(base, mdio, reg_num, data) \ + IOWR_16DIRECT(base, 0x200 + (mdio * 0x80) + (reg_num * sizeof(alt_u32)), data) + + + +/* Low word (bits 31:0) of supplemental MAC address 0*/ +#define IOADDR_ALTERA_TSEMAC_SMAC_0_0(base) __IO_CALC_ADDRESS_NATIVE(base,0x300) +#define IORD_ALTERA_TSEMAC_SMAC_0_0(base) IORD_32DIRECT(base, 0x300) +#define IOWR_ALTERA_TSEMAC_SMAC_0_0(base,data) IOWR_32DIRECT(base, 0x300, data) + +/* High half-word (bits 47:32) of supplemental MAC address 0. Upper 16 bits reserved */ +#define IOADDR_ALTERA_TSEMAC_SMAC_0_1(base) __IO_CALC_ADDRESS_NATIVE(base,0x304) +#define IORD_ALTERA_TSEMAC_SMAC_0_1(base) IORD_32DIRECT(base, 0x304) +#define IOWR_ALTERA_TSEMAC_SMAC_0_1(base,data) IOWR_32DIRECT(base, 0x304, data) + +/* Low word (bits 31:0) of supplemental MAC address 1 */ +#define IOADDR_ALTERA_TSEMAC_SMAC_1_0(base) __IO_CALC_ADDRESS_NATIVE(base,0x308) +#define IORD_ALTERA_TSEMAC_SMAC_1_0(base) IORD_32DIRECT(base, 0x308) +#define IOWR_ALTERA_TSEMAC_SMAC_1_0(base,data) IOWR_32DIRECT(base, 0x308, data) + +/* High half-word (bits 47:32) of supplemental MAC address 1. Upper 16 bits reserved */ +#define IOADDR_ALTERA_TSEMAC_SMAC_1_1(base) __IO_CALC_ADDRESS_NATIVE(base,0x30C) +#define IORD_ALTERA_TSEMAC_SMAC_1_1(base) IORD_32DIRECT(base, 0x30C) +#define IOWR_ALTERA_TSEMAC_SMAC_1_1(base,data) IOWR_32DIRECT(base, 0x30C, data) + +/* Low word (bits 31:0) of supplemental MAC address 2 */ +#define IOADDR_ALTERA_TSEMAC_SMAC_2_0(base) __IO_CALC_ADDRESS_NATIVE(base,0x310) +#define IORD_ALTERA_TSEMAC_SMAC_2_0(base) IORD_32DIRECT(base, 0x310) +#define IOWR_ALTERA_TSEMAC_SMAC_2_0(base,data) IOWR_32DIRECT(base, 0x310, data) + +/* High half-word (bits 47:32) of supplemental MAC address 2. Upper 16 bits reserved */ +#define IOADDR_ALTERA_TSEMAC_SMAC_2_1(base) __IO_CALC_ADDRESS_NATIVE(base,0x314) +#define IORD_ALTERA_TSEMAC_SMAC_2_1(base) IORD_32DIRECT(base, 0x314) +#define IOWR_ALTERA_TSEMAC_SMAC_2_1(base,data) IOWR_32DIRECT(base, 0x314, data) + +/* Low word (bits 31:0) of supplemental MAC address 3 */ +#define IOADDR_ALTERA_TSEMAC_SMAC_3_0(base) __IO_CALC_ADDRESS_NATIVE(base,0x318) +#define IORD_ALTERA_TSEMAC_SMAC_3_0(base) IORD_32DIRECT(base, 0x318) +#define IOWR_ALTERA_TSEMAC_SMAC_3_0(base,data) IOWR_32DIRECT(base, 0x318, data) + +/* High half-word (bits 47:32) of supplemental MAC address 3. Upper 16 bits reserved */ +#define IOADDR_ALTERA_TSEMAC_SMAC_3_1(base) __IO_CALC_ADDRESS_NATIVE(base,0x31C) +#define IORD_ALTERA_TSEMAC_SMAC_3_1(base) IORD_32DIRECT(base, 0x31C) +#define IOWR_ALTERA_TSEMAC_SMAC_3_1(base,data) IOWR_32DIRECT(base, 0x31C, data) + + + + +/* Enumeration of commonly-used PHY registers */ +#define ALTERA_TSEMAC_PHY_ADDR_CONTROL 0x0 +#define ALTERA_TSEMAC_PHY_ADDR_STATUS 0x1 +#define ALTERA_TSEMAC_PHY_ADDR_PHY_ID1 0x2 +#define ALTERA_TSEMAC_PHY_ADDR_PHY_ID2 0x3 +#define ALTERA_TSEMAC_PHY_ADDR_PHY_ADV 0x4 +#define ALTERA_TSEMAC_PHY_ADDR_PHY_REMADV 0x5 + + +/* (Original) Register bit definitions and Ethernet MAC device structure */ +// COMMAND_CONFIG Register Bits +enum +{ + mmac_cc_TX_ENA_bit = 0, + mmac_cc_RX_ENA_bit = 1, + mmac_cc_XON_GEN_bit = 2, + mmac_cc_ETH_SPEED_bit = 3, + mmac_cc_PROMIS_EN_bit = 4, + mmac_cc_PAD_EN_bit = 5, + mmac_cc_CRC_FWD_bit = 6, + mmac_cc_PAUSE_FWD_bit = 7, + mmac_cc_PAUSE_IGNORE_bit = 8, + mmac_cc_TX_ADDR__INS_bit = 9, + mmac_cc_HD_ENA_bit = 10, + mmac_cc_EXCESS_COL_bit = 11, + mmac_cc_LATE_COL_bit = 12, + mmac_cc_SW_RESET_bit = 13, + mmac_cc_MHASH_SEL_bit = 14, + mmac_cc_LOOPBACK_bit = 15, + mmac_cc_TX_ADDR_SEL_bit = 16, // bits 18:16 = address select + mmac_cc_MAGIC_ENA_bit = 19, + mmac_cc_SLEEP_ENA_bit = 20, + mmac_cc_WAKEUP_bit = 21, + mmac_cc_XOFF_GEN_bit = 22, + mmac_cc_CNTL_FRM_ENA_bit = 23, + mmac_cc_NO_LENGTH_CHECK_bit = 24, + mmac_cc_ENA_10_bit = 25, + mmac_cc_RX_ERR_DISC_bit = 26, + mmac_cc_CNT_RESET_bit = 31, + + mmac_cc_TX_ENA_mask = (1 << 0), // enable TX + mmac_cc_RX_ENA_mask = (1 << 1), // enable RX + mmac_cc_XON_GEN_mask = (1 << 2), // generate Pause frame with Quanta + mmac_cc_ETH_SPEED_mask = (1 << 3), // Select Gigabit + mmac_cc_PROMIS_EN_mask = (1 << 4), // enable Promiscuous mode + mmac_cc_PAD_EN_mask = (1 << 5), // enable padding remove on RX + mmac_cc_CRC_FWD_mask = (1 << 6), // forward CRC to application on RX (as opposed to stripping it off) + mmac_cc_PAUSE_FWD_mask = (1 << 7), // forward Pause frames to application + mmac_cc_PAUSE_IGNORE_mask = (1 << 8), // ignore Pause frames + mmac_cc_TX_ADDR_INS_mask = (1 << 9), // MAC overwrites bytes 6 to 12 of frame with address on all transmitted frames + mmac_cc_HD_ENA_mask = (1 << 10),// enable half-duplex operation + mmac_cc_EXCESS_COL_mask = (1 << 11),// indicator + mmac_cc_LATE_COL_mask = (1 << 12),// indicator + mmac_cc_SW_RESET_mask = (1 << 13),// issue register and counter reset + mmac_cc_MHASH_SEL_mask = (1 << 14),// select multicast hash method + mmac_cc_LOOPBACK_mask = (1 << 15),// enable GMII loopback + mmac_cc_TX_ADDR_SEL_mask = (1 << 16),// bits 18:16 = address select + mmac_cc_MAGIC_ENA_mask = (1 << 19),// enable magic packet detect + mmac_cc_SLEEP_ENA_mask = (1 << 20),// enter sleep mode + mmac_cc_WAKEUP_mask = (1 << 21), + mmac_cc_XOFF_GEN_mask = (1 << 22), + mmac_cc_CNTL_FRM_ENA_mask = (1 << 23), + mmac_cc_NO_LENGTH_CHECK_mask = (1 << 24), // disable payload length check + mmac_cc_ENA_10_mask = (1 << 25), + mmac_cc_RX_ERR_DISCARD_mask = (1 << 26), + mmac_cc_CNT_RESET_mask = (1 << 31) +}; + +// TX_CMD_STAT Register bits +enum{ + mmac_tcs_OMIT_CRC_mask = (1 << 17), + mmac_tcs_TX_SHIFT16_mask = (1 << 18) +}; + + +// RX_CMD_STAT Register bits +enum{ + mmac_rcs_RX_SHIFT16_mask = (1 << 25) +}; + + + +// TxConf Register Bits +enum{ + mnet_txc_TYPE_AUTO_mask = (1 << 0), + mnet_txc_H2N_IP_mask = (1 << 1), + mnet_txc_H2N_PROT_mask = (1 << 2), + mnet_txc_IPCHK_mask = (1 << 3), + mnet_txc_PROTCHK_mask = (1 << 4) +}; + +// RxConf and RxStat register bits +enum{ + mnet_rxc_PADREMOVE_mask = (1 << 0), + mnet_rxc_IPERR_DISC_mask = (1 << 1), + mnet_rxc_PROTERR_DISC_mask = (1 << 2), + mnet_rxc_TYPE_REMOVE_mask = (1 << 3), + mnet_rxc_N2H_IP_mask = (1 << 4), + mnet_rxc_N2H_PROT_mask = (1 << 5), + + mnet_rxs_HDRLEN_mask = 0x1f, // 0..4 = header length of IP+Protocol in 32-bit words + mnet_rxs_IP_CHKERR_mask = (1 << 5), + mnet_rxs_PROT_CHKERR_mask = (1 << 6), + mnet_rxs_T_REMOVED_mask = (1 << 7), + mnet_rxs_VLAN_mask = (1 << 8), + mnet_rxs_IPv6_mask = (1 << 17), + mnet_rxs_FRAGMENT_mask = (1 << 18) // IPv4 fragment + +}; + +enum { + PCS_CTL_speed1 = 1<<6, // speed select + PCS_CTL_speed0 = 1<<13, + PCS_CTL_fullduplex = 1<<8, // fullduplex mode select + PCS_CTL_an_restart = 1<<9, // Autonegotiation restart command + PCS_CTL_isolate = 1<<10, // isolate command + PCS_CTL_powerdown = 1<<11, // powerdown command + PCS_CTL_an_enable = 1<<12, // Autonegotiation enable + PCS_CTL_rx_slpbk = 1<<14, // Serial Loopback enable + PCS_CTL_sw_reset = 1<<15 // perform soft reset + +}; + +/** PCS Status Register Bits. IEEE 801.2 Clause 22.2.4.2 + */ +enum { + PCS_ST_has_extcap = 1<<0, // PHY has extended capabilities registers + PCS_ST_rx_sync = 1<<2, // RX is in sync (8B/10B codes o.k.) + PCS_ST_an_ability = 1<<3, // PHY supports autonegotiation + PCS_ST_rem_fault = 1<<4, // Autonegotiation completed + PCS_ST_an_done = 1<<5 + +}; + +/** Autonegotiation Capabilities Register Bits. IEEE 802.3 Clause 37.2.1 */ + +enum { + ANCAP_NEXTPAGE = 1 << 15, + ANCAP_ACK = 1 << 14, + ANCAP_RF2 = 1 << 13, + ANCAP_RF1 = 1 << 12, + ANCAP_PS2 = 1 << 8, + ANCAP_PS1 = 1 << 7, + ANCAP_HD = 1 << 6, + ANCAP_FD = 1 << 5 + // all others are reserved +}; + +// MDIO registers within MAC register Space +// memory mapped access +typedef volatile struct np_tse_mdio_struct +{ + unsigned int CONTROL; + unsigned int STATUS; + unsigned int PHY_ID1; + unsigned int PHY_ID2; + unsigned int ADV; + unsigned int REMADV; + + unsigned int reg6; + unsigned int reg7; + unsigned int reg8; + unsigned int reg9; + unsigned int rega; + unsigned int regb; + unsigned int regc; + unsigned int regd; + unsigned int rege; + unsigned int regf; + unsigned int reg10; + unsigned int reg11; + unsigned int reg12; + unsigned int reg13; + unsigned int reg14; + unsigned int reg15; + unsigned int reg16; + unsigned int reg17; + unsigned int reg18; + unsigned int reg19; + unsigned int reg1a; + unsigned int reg1b; + unsigned int reg1c; + unsigned int reg1d; + unsigned int reg1e; + unsigned int reg1f; + +} np_tse_mdio; + +typedef volatile struct np_tse_mac_struct +{ + unsigned int REV; + unsigned int SCRATCH; + unsigned int COMMAND_CONFIG; + unsigned int MAC_0; + unsigned int MAC_1; + unsigned int FRM_LENGTH; + unsigned int PAUSE_QUANT; + unsigned int RX_SECTION_EMPTY; + unsigned int RX_SECTION_FULL; + unsigned int TX_SECTION_EMPTY; + unsigned int TX_SECTION_FULL; + unsigned int RX_ALMOST_EMPTY; + unsigned int RX_ALMOST_FULL; + unsigned int TX_ALMOST_EMPTY; + unsigned int TX_ALMOST_FULL; + unsigned int MDIO_ADDR0; + unsigned int MDIO_ADDR1; + + unsigned int reservedx44[5]; + unsigned int REG_STAT; + unsigned int TX_IPG_LENGTH; + + unsigned int aMACID_1; + unsigned int aMACID_2; + unsigned int aFramesTransmittedOK; + unsigned int aFramesReceivedOK; + unsigned int aFramesCheckSequenceErrors; + unsigned int aAlignmentErrors; + unsigned int aOctetsTransmittedOK; + unsigned int aOctetsReceivedOK; + unsigned int aTxPAUSEMACCtrlFrames; + unsigned int aRxPAUSEMACCtrlFrames; + unsigned int ifInErrors; + unsigned int ifOutErrors; + unsigned int ifInUcastPkts; + unsigned int ifInMulticastPkts; + unsigned int ifInBroadcastPkts; + unsigned int ifOutDiscards; + unsigned int ifOutUcastPkts; + unsigned int ifOutMulticastPkts; + unsigned int ifOutBroadcastPkts; + unsigned int etherStatsDropEvent; + unsigned int etherStatsOctets; + unsigned int etherStatsPkts; + unsigned int etherStatsUndersizePkts; + unsigned int etherStatsOversizePkts; + unsigned int etherStatsPkts64Octets; + unsigned int etherStatsPkts65to127Octets; + unsigned int etherStatsPkts128to255Octets; + unsigned int etherStatsPkts256to511Octets; + unsigned int etherStatsPkts512to1023Octets; + unsigned int etherStatsPkts1024to1518Octets; + unsigned int etherStatsPkts1519toXOctets; + unsigned int etherStatsJabbers; + unsigned int etherStatsFragments; + + unsigned int reservedxE4; + unsigned int TX_CMD_STAT; + unsigned int RX_CMD_STAT; + + unsigned int msb_aOctetsTransmittedOK; + unsigned int msb_aOctetsReceivedOK; + unsigned int msb_etherStatsOctets; + unsigned int reservedxFC; // current frame's IP payload sum result + + unsigned int hashtable[64]; + + np_tse_mdio mdio0; + np_tse_mdio mdio1; + + unsigned int smac0_0; + unsigned int smac0_1; + unsigned int smac1_0; + unsigned int smac1_1; + unsigned int smac2_0; + unsigned int smac2_1; + unsigned int smac3_0; + unsigned int smac3_1; + + unsigned int reservedx320[56]; + +} np_tse_mac; + +#endif /* __ALTERA_ETH_TSE_REGS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_generic_quad_spi_controller.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_generic_quad_spi_controller.h new file mode 100644 index 0000000..387e138 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_generic_quad_spi_controller.h @@ -0,0 +1,126 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALT_QSPI_CONTROLLER_H__ +#define __ALT_QSPI_CONTROLLER_H__ + +#include "alt_types.h" +#include "sys/alt_flash_dev.h" +#include "sys/alt_llist.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/** + * Description of the QSPI controller + */ +typedef struct alt_qspi_controller_dev +{ + alt_flash_dev dev; + + alt_u32 data_base; /** base address of data slave */ + alt_u32 data_end; /** end address of data slave (not inclusive) */ + alt_u32 csr_base; /** base address of CSR slave */ + alt_u32 size_in_bytes; /** size of memory in bytes */ + alt_u32 is_epcs; /** 1 if device is an EPCS device */ + alt_u32 number_of_sectors; /** number of flash sectors */ + alt_u32 sector_size; /** size of each flash sector */ + alt_u32 page_size; /** page size */ + alt_u32 silicon_id; /** ID of silicon used with EPCQ/QSPI IP */ +} alt_qspi_controller_dev; + +/** +* Macros used by alt_sys_init.c to create data storage for driver instance +*/ +#define ALTERA_GENERIC_QUAD_SPI_CONTROLLER_AVL_MEM_AVL_CSR_INSTANCE(qspi_name, avl_mem, avl_csr, qspi_dev) \ +static alt_qspi_controller_dev qspi_dev = \ +{ \ + .dev = { \ + .llist = ALT_LLIST_ENTRY, \ + .name = avl_mem##_NAME, \ + .write = alt_qspi_controller_write, \ + .read = alt_qspi_controller_read, \ + .get_info = alt_qspi_controller_get_info, \ + .erase_block = alt_qspi_controller_erase_block, \ + .write_block = alt_qspi_controller_write_block, \ + .base_addr = ((void*)(avl_mem##_BASE)), \ + .length = ((int)(avl_mem##_SPAN)), \ + .lock = alt_qspi_controller_lock , \ + }, \ + .data_base = ((alt_u32)(avl_mem##_BASE)), \ + .data_end = ((alt_u32)(avl_mem##_BASE) + (alt_u32)(avl_mem##_SPAN)), \ + .csr_base = ((alt_u32)(avl_csr##_BASE)), \ + .size_in_bytes = ((alt_u32)(avl_mem##_SPAN)), \ + .is_epcs = ((alt_u32)(avl_mem##_IS_EPCS)), \ + .number_of_sectors = ((alt_u32)(avl_mem##_NUMBER_OF_SECTORS)), \ + .sector_size = ((alt_u32)(avl_mem##_SECTOR_SIZE)), \ + .page_size = ((alt_u32)(avl_mem##_PAGE_SIZE)) , \ +} + +/* + Public API + + Refer to Using Flash Devices in the + Developing Programs Using the Hardware Abstraction Layer chapter + of the Nios II Software Developer's Handbook. + +*/ +int alt_qspi_controller_read(alt_flash_dev *flash_info, int offset, void *dest_addr, int length); + +int alt_qspi_controller_get_info(alt_flash_fd *fd, flash_region **info, int *number_of_regions); + +int alt_qspi_controller_erase_block(alt_flash_dev *flash_info, int block_offset); + +int alt_qspi_controller_write_block(alt_flash_dev *flash_info, int block_offset, int data_offset, const void *data, int length); + +int alt_qspi_controller_write(alt_flash_dev *flash_info, int offset, const void *src_addr, int length); + +int alt_qspi_controller_lock(alt_flash_dev *flash_info, alt_u32 sectors_to_lock); + + +/* + * Initialization function + */ +extern alt_32 altera_qspi_controller_init(alt_qspi_controller_dev *dev); + +/* + * alt_sys_init.c will call this macro automatically initialize the driver instance + */ +#define ALTERA_GENERIC_QUAD_SPI_CONTROLLER_INIT(name, dev) \ + altera_qspi_controller_init(&dev); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_QSPI_CONTROLLER_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_generic_quad_spi_controller_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_generic_quad_spi_controller_regs.h new file mode 100644 index 0000000..722cdc1 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_generic_quad_spi_controller_regs.h @@ -0,0 +1,260 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_QSPI_CONTROLLER_REGS_H__ +#define __ALTERA_QSPI_CONTROLLER_REGS_H__ + +#include + +/* + * QSPI_RD_STATUS register offset + * + * The QSPI_RD_STATUS register contains information from the read status + * register operation. A full description of the register can be found in the + * data sheet, + * + */ +#define ALTERA_QSPI_CONTROLLER_STATUS_REG (0x0) + +/* + * QSPI_RD_STATUS register access macros + */ +#define IOADDR_ALTERA_QSPI_CONTROLLER_STATUS(base) \ + __IO_CALC_ADDRESS_DYNAMIC(base, ALTERA_QSPI_CONTROLLER_STATUS_REG) + +#define IORD_ALTERA_QSPI_CONTROLLER_STATUS(base) \ + IORD_32DIRECT(base, ALTERA_QSPI_CONTROLLER_STATUS_REG) + +#define IOWR_ALTERA_QSPI_CONTROLLER_STATUS(base, data) \ + IOWR_32DIRECT(base, ALTERA_QSPI_CONTROLLER_STATUS_REG, data) + +/* + * QSPI_RD_STATUS register description macros + */ + +/** Write in progress bit */ +#define ALTERA_QSPI_CONTROLLER_STATUS_WIP_MASK (0x00000001) +#define ALTERA_QSPI_CONTROLLER_STATUS_WIP_AVAILABLE (0x00000000) +#define ALTERA_QSPI_CONTROLLER_STATUS_WIP_BUSY (0x00000001) +/** When to time out a poll of the write in progress bit */ +/* 0.7 sec time out */ +#define ALTERA_QSPI_CONTROLLER_1US_TIMEOUT_VALUE 700000 + +/* + * QSPI_RD_SID register offset + * + * The QSPI_RD_SID register contains the information from the read silicon ID + * operation and can be used to determine what type of EPCS device we have. + * Only support in EPCS16 and EPCS64. + * + * This register is valid only if the device is an EPCS. + * + */ +#define ALTERA_QSPI_CONTROLLER_SID_REG (0x4) + +/* + * QSPI_RD_SID register access macros + */ +#define IOADDR_ALTERA_QSPI_CONTROLLER_SID(base) \ + __IO_CALC_ADDRESS_DYNAMIC(base, ALTERA_QSPI_CONTROLLER_SID_REG) + +#define IORD_ALTERA_QSPI_CONTROLLER_SID(base) \ + IORD_32DIRECT(base, ALTERA_QSPI_CONTROLLER_SID_REG) + +#define IOWR_ALTERA_QSPI_CONTROLLER_SID(base, data) \ + IOWR_32DIRECT(base, ALTERA_QSPI_CONTROLLER_SID_REG, data) + +/* + * QSPI_RD_SID register description macros + * + * Specific device values obtained from Table 14 of: + * "Serial Configuration (EPCS) Devices Datasheet" + */ +#define ALTERA_QSPI_CONTROLLER_SID_MASK (0x000000FF) +#define ALTERA_QSPI_CONTROLLER_SID_EPCS16 (0x00000014) +#define ALTERA_QSPI_CONTROLLER_SID_EPCS64 (0x00000016) +#define ALTERA_QSPI_CONTROLLER_SID_EPCS128 (0x00000018) + +/* + * QSPI_RD_RDID register offset + * + * The QSPI_RD_RDID register contains the information from the read memory + * capacity operation and can be used to determine what type of EPCQ/QSPI device + * we have. + * + * This register is only valid if the device is an EPCQ/QSPI. + * + */ +#define ALTERA_QSPI_CONTROLLER_RDID_REG (0x8) + +/* + * QSPI_RD_RDID register access macros + */ +#define IOADDR_ALTERA_QSPI_CONTROLLER_RDID(base) \ + __IO_CALC_ADDRESS_DYNAMIC(base, ALTERA_QSPI_CONTROLLER_RDID_REG) + +#define IORD_ALTERA_QSPI_CONTROLLER_RDID(base) \ + IORD_32DIRECT(base, ALTERA_QSPI_CONTROLLER_RDID_REG) + +#define IOWR_ALTERA_QSPI_CONTROLLER_RDID(base, data) \ + IOWR_32DIRECT(base, ALTERA_QSPI_CONTROLLER_RDID_REG, data) + +/* + * QSPI_RD_RDID register description macros + * + * Specific device values obtained from Table 28 of: + * "Quad-Serial Configuration (EPCQ/QSPI? (www.altera.com/literature/hb/cfg/cfg_cf52012.pdf)) + * Devices Datasheet" + */ +#define ALTERA_QSPI_CONTROLLER_RDID_MASK (0x000000FF) +#define ALTERA_QSPI_CONTROLLER_RDID_QSPI16 (0x00000015) +#define ALTERA_QSPI_CONTROLLER_RDID_QSPI32 (0x00000016) +#define ALTERA_QSPI_CONTROLLER_RDID_QSPI64 (0x00000017) +#define ALTERA_QSPI_CONTROLLER_RDID_QSPI128 (0x00000018) +#define ALTERA_QSPI_CONTROLLER_RDID_QSPI256 (0x00000019) +#define ALTERA_QSPI_CONTROLLER_RDID_QSPI512 (0x00000020) +#define ALTERA_QSPI_CONTROLLER_RDID_QSPI1024 (0x00000021) + +/* + * QSPI_MEM_OP register offset + * + * The QSPI_MEM_OP register is used to do memory protect and erase operations + * + */ +#define ALTERA_QSPI_CONTROLLER_MEM_OP_REG (0xC) + +/* + * QSPI_MEM_OP register access macros + */ +#define IOADDR_ALTERA_QSPI_CONTROLLER_MEM_OP(base) \ + __IO_CALC_ADDRESS_DYNAMIC(base, ALTERA_QSPI_CONTROLLER_MEM_OP_REG) + +#define IORD_ALTERA_QSPI_CONTROLLER_MEM_OP(base) \ + IORD_32DIRECT(base, ALTERA_QSPI_CONTROLLER_MEM_OP_REG) + +#define IOWR_ALTERA_QSPI_CONTROLLER_MEM_OP(base, data) \ + IOWR_32DIRECT(base, ALTERA_QSPI_CONTROLLER_MEM_OP_REG, data) + +/* + * QSPI_MEM_OP register description macros + */ +#define ALTERA_QSPI_CONTROLLER_MEM_OP_CMD_MASK (0x00000003) +#define ALTERA_QSPI_CONTROLLER_MEM_OP_BULK_ERASE_CMD (0x00000001) +#define ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_ERASE_CMD (0x00000002) +#define ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_PROTECT_CMD (0x00000003) + +/** see datasheet for sector values */ +#define ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_VALUE_MASK (0x00FFFF00) + +/* + * QSPI_ISR register offset + * + * The QSPI_ISR register is used to determine whether an invalid write or erase + * operation triggered an interrupt + * + */ +#define ALTERA_QSPI_CONTROLLER_ISR_REG (0x10) + +/* + * QSPI_ISR register access macros + */ +#define IOADDR_ALTERA_QSPI_CONTROLLER_ISR(base) \ + __IO_CALC_ADDRESS_DYNAMIC(base, ALTERA_QSPI_CONTROLLER_ISR_REG) + +#define IORD_ALTERA_QSPI_CONTROLLER_ISR(base) \ + IORD_32DIRECT(base, ALTERA_QSPI_CONTROLLER_ISR_REG) + +#define IOWR_ALTERA_QSPI_CONTROLLER_ISR(base, data) \ + IOWR_32DIRECT(base, ALTERA_QSPI_CONTROLLER_ISR_REG, data) + +/* + * QSPI_ISR register description macros + */ +#define ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_ERASE_MASK (0x00000001) +#define ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_ERASE_ACTIVE (0x00000001) + +#define ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_WRITE_MASK (0x00000002) +#define ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_WRITE_ACTIVE (0x00000002) + + +/* + * QSPI_IMR register offset + * + * The QSPI_IMR register is used to mask the invalid erase or the invalid write + * interrupts. + * + */ +#define ALTERA_QSPI_CONTROLLER_IMR_REG (0x14) + +/* + * QSPI_IMR register access macros + */ +#define IOADDR_ALTERA_QSPI_CONTROLLER_IMR(base) \ + __IO_CALC_ADDRESS_DYNAMIC(base, ALTERA_QSPI_CONTROLLER_IMR_REG) + +#define IORD_ALTERA_QSPI_CONTROLLER_IMR(base) \ + IORD_32DIRECT(base, ALTERA_QSPI_CONTROLLER_IMR_REG) + +#define IOWR_ALTERA_QSPI_CONTROLLER_IMR(base, data) \ + IOWR_32DIRECT(base, ALTERA_QSPI_CONTROLLER_IMR_REG, data) + +/* + * QSPI_IMR register description macros + */ +#define ALTERA_QSPI_CONTROLLER_IMR_ILLEGAL_ERASE_MASK (0x00000001) +#define ALTERA_QSPI_CONTROLLER_IMR_ILLEGAL_ERASE_ENABLED (0x00000001) + +#define ALTERA_QSPI_CONTROLLER_IMR_ILLEGAL_WRITE_MASK (0x00000002) +#define ALTERA_QSPI_CONTROLLER_IMR_ILLEGAL_WRITE_ENABLED (0x00000002) + +/* + * QSPI_CHIP_SELECT register offset + * + * The QSPI_CHIP_SELECT register is used to issue chip select + */ +#define ALTERA_QSPI_CHIP_SELECT_REG (0x18) + +/* + * QSPI_CHIP_SELECT register access macros + */ +#define IOADDR_ALTERA_QSPI_CHIP_SELECT(base) \ + __IO_CALC_ADDRESS_DYNAMIC(base, ALTERA_QSPI_CHIP_SELECT_REG) + +#define IOWR_ALTERA_QSPI_CHIP_SELECT(base, data) \ + IOWR_32DIRECT(base, ALTERA_QSPI_CHIP_SELECT_REG, data) + +/* + * QSPI_CHIP_SELECT register description macros + */ +#define ALTERA_QSPI_CHIP1_SELECT (0x00000001) +#define ALTERA_QSPI_CHIP2_SELECT (0x00000002) +#define ALTERA_QSPI_CHIP3_SELECT (0x00000003) + +#endif /* __ALTERA_QSPI_CONTROLLER_REGS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma.h new file mode 100644 index 0000000..0ab231f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma.h @@ -0,0 +1,512 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_MSGDMA_H__ +#define __ALTERA_MSGDMA_H__ + +#include +#include + +#include "sys/alt_dev.h" +#include "alt_types.h" +#include "altera_msgdma_csr_regs.h" +#include "altera_msgdma_descriptor_regs.h" +#include "altera_msgdma_response_regs.h" +#include "altera_msgdma_prefetcher_regs.h" +#include "os/alt_sem.h" +#include "os/alt_flag.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * Helper struct to have easy access to hi/low values from a 64 bit value. + * Useful when having to write prefetcher/descriptor 64 bit addresses. + */ +typedef union { + alt_u64 u64; + alt_u32 u32[2]; +} msgdma_addr64; + +/* + * To ensure that a descriptor is created without spaces between the structure + * members, we call upon GCC's ability to pack to a byte-aligned boundary. + * Additionally, msgdma requires the descriptors to be aligned to a 16 byte + * boundary. + */ +#define alt_msgdma_standard_descriptor_packed \ + __attribute__ ((packed, aligned(16))) +#define alt_msgdma_extended_descriptor_packed \ + __attribute__ ((packed, aligned(32))) +#define alt_msgdma_prefetcher_standard_descriptor_packed \ + __attribute__ ((packed, aligned(32))) +#define alt_msgdma_prefetcher_extended_descriptor_packed \ + __attribute__ ((packed, aligned(64))) +#define alt_msgdma_response_packed __attribute__ ((packed, aligned(4))) + +/* + * The function alt_find_dev() is used to search the device list "list" to + * locate a device named "name". If a match is found, then a pointer to the + * device is returned, otherwise NULL is returned. + */ +extern alt_dev* alt_find_dev (const char* name, alt_llist* list); + +/* Callback routine type definition */ +typedef void (*alt_msgdma_callback)(void *context); + +/* use this structure if you haven't enabled the enhanced features */ +typedef struct { + alt_u32 *read_address; + alt_u32 *write_address; + alt_u32 transfer_length; + alt_u32 control; +} alt_msgdma_standard_descriptor_packed alt_msgdma_standard_descriptor; + +/* use this structure if you have enabled the enhanced features (only the + * elements enabled in hardware will be used) + */ +typedef struct { + alt_u32 *read_address_low; + alt_u32 *write_address_low; + alt_u32 transfer_length; + alt_u16 sequence_number; + alt_u8 read_burst_count; + alt_u8 write_burst_count; + alt_u16 read_stride; + alt_u16 write_stride; + alt_u32 *read_address_high; + alt_u32 *write_address_high; + alt_u32 control; +} alt_msgdma_extended_descriptor_packed alt_msgdma_extended_descriptor; + + +/* Prefetcher Descriptors need to be different than standard dispatcher + * descriptors use this structure if you haven't enabled the enhanced + * features + */ +typedef struct { + alt_u32 read_address; + alt_u32 write_address; + alt_u32 transfer_length; + alt_u32 next_desc_ptr; + alt_u32 bytes_transfered; + alt_u16 status; + alt_u16 _pad1_rsvd; + alt_u32 _pad2_rsvd; + alt_u32 control; +} alt_msgdma_prefetcher_standard_descriptor_packed alt_msgdma_prefetcher_standard_descriptor; + +/* use this structure if you have enabled the enhanced features (only the elements +enabled in hardware will be used) */ +typedef struct { + alt_u32 read_address_low; + alt_u32 write_address_low; + alt_u32 transfer_length; + alt_u32 next_desc_ptr_low; + alt_u32 bytes_transfered; + alt_u16 status; + alt_u16 _pad1_rsvd; + alt_u32 _pad2_rsvd; + alt_u16 sequence_number; + alt_u8 read_burst_count; + alt_u8 write_burst_count; + alt_u16 read_stride; + alt_u16 write_stride; + alt_u32 read_address_high; + alt_u32 write_address_high; + alt_u32 next_desc_ptr_high; + alt_u32 _pad3_rsvd[3]; + alt_u32 control; +} alt_msgdma_prefetcher_extended_descriptor_packed alt_msgdma_prefetcher_extended_descriptor; + + +/* msgdma device structure */ +typedef struct alt_msgdma_dev +{ + /* Device linked-list entry */ + alt_llist llist; + /* Name of msgdma in Qsys system */ + const char *name; + /* Base address of control and status register */ + alt_u32 *csr_base; + /* Base address of the descriptor slave port */ + alt_u32 *descriptor_base; + /* Base address of the response register */ + alt_u32 *response_base; + /* Base address of the prefetcher register */ + alt_u32 *prefetcher_base; + /* device IRQ controller ID */ + alt_u32 irq_controller_ID; + /* device IRQ ID */ + alt_u32 irq_ID; + /* FIFO size to store descriptor count, + { 8, 16, 32, 64,default:128, 256, 512, 1024 } */ + alt_u32 descriptor_fifo_depth; + /* FIFO size to store response count */ + alt_u32 response_fifo_depth; + /* Callback routine pointer */ + alt_msgdma_callback callback; + /* Callback context pointer */ + void *callback_context; + /* user define control setting during interrupt registering*/ + alt_u32 control; + /* Enable burst transfer */ + alt_u8 burst_enable; + /* Enable burst wrapping */ + alt_u8 burst_wrapping_support; + /* Depth of the internal data path FIFO*/ + alt_u32 data_fifo_depth; + /* Data path Width. This parameter affect both read + master and write master data width */ + alt_u32 data_width; + /* Maximum burst count*/ + alt_u32 max_burst_count; + /* Maximum transfer length*/ + alt_u32 max_byte; + /* Maximum stride count */ + alt_u64 max_stride; + /* Enable dynamic burst programming*/ + alt_u8 programmable_burst_enable; + /* Enable stride addressing */ + alt_u8 stride_enable; + /* Supported transaction type */ + const char *transfer_type; + /* Extended feature support enable "1"-enable "0"-disable */ + alt_u8 enhanced_features; + /* Enable response port "0"-memory-mapped, "1"-streaming, "2"-disable */ + alt_u8 response_port; + /* Prefetcher enabled "0"-disabled, "1"-enabled*/ + alt_u8 prefetcher_enable; + /* Semaphore used to control access registers + in multi-threaded mode */ + ALT_SEM (regs_lock) +} __attribute__ ((aligned(0x10))) alt_msgdma_dev; + + + +/******************************************************************************* + * Public API + ******************************************************************************/ +alt_msgdma_dev* alt_msgdma_open (const char* name); + +void alt_msgdma_register_callback( + alt_msgdma_dev *dev, + alt_msgdma_callback callback, + alt_u32 control, + void *context); + +int alt_msgdma_standard_descriptor_async_transfer( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *desc); + +int alt_msgdma_extended_descriptor_async_transfer( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *desc); + +int alt_msgdma_construct_standard_mm_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control); + +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); + +int 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); + +int alt_msgdma_construct_extended_st_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *descriptor, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 write_burst_count, + alt_u16 write_stride); + +int alt_msgdma_construct_extended_mm_to_st_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u16 read_stride); + +int alt_msgdma_construct_extended_mm_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u8 write_burst_count, + alt_u16 read_stride, + alt_u16 write_stride); + +int alt_msgdma_standard_descriptor_sync_transfer( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *desc); + +int alt_msgdma_extended_descriptor_sync_transfer( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *desc); + +int alt_msgdma_standard_descriptor_sync_transfer( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *desc); + +/***************** MSGDMA PREFETCHER PUBLIC APIs ******************/ +int alt_msgdma_construct_prefetcher_standard_mm_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_standard_descriptor *descriptor, + alt_u32 read_address, + alt_u32 write_address, + alt_u32 length, + alt_u32 control); + +int 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); + +int 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); + +int alt_msgdma_construct_prefetcher_extended_st_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_extended_descriptor *descriptor, + alt_u32 write_address_high, + alt_u32 write_address_low, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 write_burst_count, + alt_u16 write_stride); + +int alt_msgdma_construct_prefetcher_extended_mm_to_st_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_extended_descriptor *descriptor, + alt_u32 read_address_high, + alt_u32 read_address_low, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u16 read_stride); + +int alt_msgdma_construct_prefetcher_extended_mm_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_extended_descriptor *descriptor, + alt_u32 read_address_high, + alt_u32 read_address_low, + alt_u32 write_address_high, + alt_u32 write_address_low, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u8 write_burst_count, + alt_u16 read_stride, + alt_u16 write_stride); + +int alt_msgdma_prefetcher_add_standard_desc_to_list ( + alt_msgdma_prefetcher_standard_descriptor** list, + alt_msgdma_prefetcher_standard_descriptor* descriptor); + +int alt_msgdma_prefetcher_add_extended_desc_to_list ( + alt_msgdma_prefetcher_extended_descriptor** list, + alt_msgdma_prefetcher_extended_descriptor* descriptor); + +int alt_msgdma_start_prefetcher_with_std_desc_list ( + alt_msgdma_dev *dev, + 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); + +int alt_msgdma_start_prefetcher_with_extd_desc_list ( + alt_msgdma_dev *dev, + 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); + +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); + +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); + +void alt_msgdma_init (alt_msgdma_dev *dev, alt_u32 ic_id, alt_u32 irq); + +/* HAL initialization macros */ + +/*Depth of internal data path FIFO.STRIDE_ENABLE + * ALTERA_MSGDMA_INSTANCE is the macro used by alt_sys_init() to + * allocate any per device memory that may be required. + */ +#define ALTERA_MSGDMA_CSR_DESCRIPTOR_SLAVE_RESPONSE_INSTANCE(name, csr_if, desc_if, resp_if, dev) \ +static alt_msgdma_dev dev = \ +{ \ + ALT_LLIST_ENTRY, \ + name##_CSR_NAME, \ + ((alt_u32 *)(csr_if##_BASE)), \ + ((alt_u32 *)(desc_if##_BASE)), \ + ((alt_u32 *)(resp_if##_BASE)), \ + ((alt_u32 *)(0)), \ + ((alt_u32 )name##_CSR_IRQ_INTERRUPT_CONTROLLER_ID), \ + ((alt_u32 )name##_CSR_IRQ), \ + ((alt_u32 )desc_if##_DESCRIPTOR_FIFO_DEPTH), \ + ((alt_u32 )resp_if##_DESCRIPTOR_FIFO_DEPTH * 2), \ + ((void *) 0x0), \ + ((void *) 0x0), \ + ((alt_u32) 0x0), \ + ((alt_u8) csr_if##_BURST_ENABLE), \ + ((alt_u8) csr_if##_BURST_WRAPPING_SUPPORT), \ + ((alt_u32) csr_if##_DATA_FIFO_DEPTH), \ + ((alt_u32) csr_if##_DATA_WIDTH), \ + ((alt_u32) csr_if##_MAX_BURST_COUNT), \ + ((alt_u32) csr_if##_MAX_BYTE), \ + ((alt_u64) csr_if##_MAX_STRIDE), \ + ((alt_u8) csr_if##_PROGRAMMABLE_BURST_ENABLE), \ + ((alt_u8) csr_if##_STRIDE_ENABLE), \ + csr_if##_TRANSFER_TYPE, \ + ((alt_u8) csr_if##_ENHANCED_FEATURES), \ + ((alt_u8) csr_if##_RESPONSE_PORT), \ + ((alt_u8) csr_if##_PREFETCHER_ENABLE) \ +}; + +#define ALTERA_MSGDMA_CSR_DESCRIPTOR_SLAVE_INSTANCE(name, csr_if, desc_if, dev) \ +static alt_msgdma_dev dev = \ +{ \ + ALT_LLIST_ENTRY, \ + name##_CSR_NAME, \ + ((alt_u32 *)(csr_if##_BASE)), \ + ((alt_u32 *)(desc_if##_BASE)), \ + ((alt_u32 *)(0)), \ + ((alt_u32 *)(0)), \ + ((alt_u32 )name##_CSR_IRQ_INTERRUPT_CONTROLLER_ID), \ + ((alt_u32 )name##_CSR_IRQ), \ + ((alt_u32 )desc_if##_DESCRIPTOR_FIFO_DEPTH), \ + ((alt_u32) 0x0), \ + ((void *) 0x0), \ + ((void *) 0x0), \ + ((alt_u32) 0x0), \ + ((alt_u8) csr_if##_BURST_ENABLE), \ + ((alt_u8) csr_if##_BURST_WRAPPING_SUPPORT), \ + ((alt_u32) csr_if##_DATA_FIFO_DEPTH), \ + ((alt_u32) csr_if##_DATA_WIDTH), \ + ((alt_u32) csr_if##_MAX_BURST_COUNT), \ + ((alt_u32) csr_if##_MAX_BYTE), \ + ((alt_u64) csr_if##_MAX_STRIDE), \ + ((alt_u8) csr_if##_PROGRAMMABLE_BURST_ENABLE), \ + ((alt_u8) csr_if##_STRIDE_ENABLE), \ + csr_if##_TRANSFER_TYPE, \ + ((alt_u8) csr_if##_ENHANCED_FEATURES), \ + ((alt_u8) csr_if##_RESPONSE_PORT), \ + ((alt_u8) csr_if##_PREFETCHER_ENABLE) \ +}; + +/* + * New Interface for Prefetcher 15/6/2015. + */ +#define ALTERA_MSGDMA_CSR_PREFETCHER_CSR_INSTANCE(name, csr_if, pref_if, dev) \ +static alt_msgdma_dev dev = \ +{ \ + ALT_LLIST_ENTRY, \ + name##_CSR_NAME, \ + ((alt_u32 *)(csr_if##_BASE)), \ + ((alt_u32 *)(0)), \ + ((alt_u32 *)(0)), \ + ((alt_u32 *)(pref_if##_BASE)), \ + ((alt_u32 )name##_PREFETCHER_CSR_IRQ_INTERRUPT_CONTROLLER_ID), \ + ((alt_u32 )name##_PREFETCHER_CSR_IRQ), \ + ((alt_u32 )(0)), \ + ((alt_u32) 0x0), \ + ((void *) 0x0), \ + ((void *) 0x0), \ + ((alt_u32) 0x0), \ + ((alt_u8) csr_if##_BURST_ENABLE), \ + ((alt_u8) csr_if##_BURST_WRAPPING_SUPPORT), \ + ((alt_u32) csr_if##_DATA_FIFO_DEPTH), \ + ((alt_u32) csr_if##_DATA_WIDTH), \ + ((alt_u32) csr_if##_MAX_BURST_COUNT), \ + ((alt_u32) csr_if##_MAX_BYTE), \ + ((alt_u64) csr_if##_MAX_STRIDE), \ + ((alt_u8) csr_if##_PROGRAMMABLE_BURST_ENABLE), \ + ((alt_u8) csr_if##_STRIDE_ENABLE), \ + csr_if##_TRANSFER_TYPE, \ + ((alt_u8) csr_if##_ENHANCED_FEATURES), \ + ((alt_u8) csr_if##_RESPONSE_PORT), \ + ((alt_u8) csr_if##_PREFETCHER_ENABLE) \ +}; + + +/* + * The macro ALTERA_MSGDMA_INIT is called by the auto-generated function + * alt_sys_init() to initialize a given device instance. + */ +#define ALTERA_MSGDMA_INIT(name, dev) \ + alt_msgdma_init(&dev, dev.irq_controller_ID, dev.irq_ID); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALTERA_MSGDMA_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_csr_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_csr_regs.h new file mode 100644 index 0000000..bd30d8b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_csr_regs.h @@ -0,0 +1,175 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#ifndef ALTERA_MSGDMA_CSR_REGS_H_ +#define ALTERA_MSGDMA_CSR_REGS_H_ + +#include "io.h" +/* + Enhanced features off: + + Bytes Access Type Description + ----- ----------- ----------- + 0-3 R/Clr Status(1) + 4-7 R/W Control(2) + 8-12 R Descriptor Fill Level(write fill level[15:0], read + fill level[15:0]) + 13-15 R Response Fill Level[15:0] + 16-31 N/A + + + Enhanced features on: + + Bytes Access Type Description + ----- ----------- ----------- + 0-3 R/Clr Status(1) + 4-7 R/W Control(2) + 8-12 R Descriptor Fill Level (write fill level[15:0], read + fill level[15:0]) + 13-15 R Response Fill Level[15:0] + 16-20 R Sequence Number (write sequence number[15:0], read + sequence number[15:0]) + 21-31 N/A + + (1) Writing a '1' to the interrupt bit of the status register clears the + interrupt bit (when applicable), all other bits are unaffected by writes. + (2) Writing to the software reset bit will clear the entire register + (as well as all the registers for the entire msgdma). + + Status Register: + + Bits Description + ---- ----------- + 0 Busy + 1 Descriptor Buffer Empty + 2 Descriptor Buffer Full + 3 Response Buffer Empty + 4 Response Buffer Full + 5 Stop State + 6 Reset State + 7 Stopped on Error + 8 Stopped on Early Termination + 9 IRQ + 10-31 + + Control Register: + + Bits Description + ---- ----------- + 0 Stop (will also be set if a stop on error/early termination + condition occurs) + 1 Software Reset + 2 Stop on Error + 3 Stop on Early Termination + 4 Global Interrupt Enable Mask + 5 Stop dispatcher (stops the dispatcher from issuing more read/write + commands) + 6-31 +*/ + + + +#define ALTERA_MSGDMA_CSR_STATUS_REG 0x0 +#define ALTERA_MSGDMA_CSR_CONTROL_REG 0x4 +#define ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL_REG 0x8 +#define ALTERA_MSGDMA_CSR_RESPONSE_FILL_LEVEL_REG 0xC +/* this register only exists when the enhanced features are enabled */ +#define ALTERA_MSGDMA_CSR_SEQUENCE_NUMBER_REG 0x10 + + +/* masks for the status register bits */ +#define ALTERA_MSGDMA_CSR_BUSY_MASK 1 +#define ALTERA_MSGDMA_CSR_BUSY_OFFSET 0 +#define ALTERA_MSGDMA_CSR_DESCRIPTOR_BUFFER_EMPTY_MASK (1 << 1) +#define ALTERA_MSGDMA_CSR_DESCRIPTOR_BUFFER_EMPTY_OFFSET 1 +#define ALTERA_MSGDMA_CSR_DESCRIPTOR_BUFFER_FULL_MASK (1 << 2) +#define ALTERA_MSGDMA_CSR_DESCRIPTOR_BUFFER_FULL_OFFSET 2 +#define ALTERA_MSGDMA_CSR_RESPONSE_BUFFER_EMPTY_MASK (1 << 3) +#define ALTERA_MSGDMA_CSR_RESPONSE_BUFFER_EMPTY_OFFSET 3 +#define ALTERA_MSGDMA_CSR_RESPONSE_BUFFER_FULL_MASK (1 << 4) +#define ALTERA_MSGDMA_CSR_RESPONSE_BUFFER_FULL_OFFSET 4 +#define ALTERA_MSGDMA_CSR_STOP_STATE_MASK (1 << 5) +#define ALTERA_MSGDMA_CSR_STOP_STATE_OFFSET 5 +#define ALTERA_MSGDMA_CSR_RESET_STATE_MASK (1 << 6) +#define ALTERA_MSGDMA_CSR_RESET_STATE_OFFSET 6 +#define ALTERA_MSGDMA_CSR_STOPPED_ON_ERROR_MASK (1 << 7) +#define ALTERA_MSGDMA_CSR_STOPPED_ON_ERROR_OFFSET 7 +#define ALTERA_MSGDMA_CSR_STOPPED_ON_EARLY_TERMINATION_MASK (1 << 8) +#define ALTERA_MSGDMA_CSR_STOPPED_ON_EARLY_TERMINATION_OFFSET 8 +#define ALTERA_MSGDMA_CSR_IRQ_SET_MASK (1 << 9) +#define ALTERA_MSGDMA_CSR_IRQ_SET_OFFSET 9 + +/* masks for the control register bits */ +#define ALTERA_MSGDMA_CSR_STOP_MASK 1 +#define ALTERA_MSGDMA_CSR_STOP_OFFSET 0 +#define ALTERA_MSGDMA_CSR_RESET_MASK (1 << 1) +#define ALTERA_MSGDMA_CSR_RESET_OFFSET 1 +#define ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK (1 << 2) +#define ALTERA_MSGDMA_CSR_STOP_ON_ERROR_OFFSET 2 +#define ALTERA_MSGDMA_CSR_STOP_ON_EARLY_TERMINATION_MASK (1 << 3) +#define ALTERA_MSGDMA_CSR_STOP_ON_EARLY_TERMINATION_OFFSET 3 +#define ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK (1 << 4) +#define ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_OFFSET 4 +#define ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK (1 << 5) +#define ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_OFFSET 5 + +/* masks for the FIFO fill levels and sequence number */ +#define ALTERA_MSGDMA_CSR_READ_FILL_LEVEL_MASK 0xFFFF +#define ALTERA_MSGDMA_CSR_READ_FILL_LEVEL_OFFSET 0 +#define ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_MASK 0xFFFF0000 +#define ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_OFFSET 16 +#define ALTERA_MSGDMA_CSR_RESPONSE_FILL_LEVEL_MASK 0xFFFF +#define ALTERA_MSGDMA_CSR_RESPONSE_FILL_LEVEL_OFFSET 0 +#define ALTERA_MSGDMA_CSR_READ_SEQUENCE_NUMBER_MASK 0xFFFF +#define ALTERA_MSGDMA_CSR_READ_SEQUENCE_NUMBER_OFFSET 0 +#define ALTERA_MSGDMA_CSR_WRITE_SEQUENCE_NUMBER_MASK 0xFFFF0000 +#define ALTERA_MSGDMA_CSR_WRITE_SEQUENCE_NUMBER_OFFSET 16 + + +/* read/write macros for each 32 bit register of the CSR port */ +#define IOWR_ALTERA_MSGDMA_CSR_STATUS(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_CSR_STATUS_REG, data) +#define IOWR_ALTERA_MSGDMA_CSR_CONTROL(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_CSR_CONTROL_REG, data) +#define IORD_ALTERA_MSGDMA_CSR_STATUS(base) \ + IORD_32DIRECT(base, ALTERA_MSGDMA_CSR_STATUS_REG) +#define IORD_ALTERA_MSGDMA_CSR_CONTROL(base) \ + IORD_32DIRECT(base, ALTERA_MSGDMA_CSR_CONTROL_REG) +#define IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(base) \ + IORD_32DIRECT(base, ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL_REG) +#define IORD_ALTERA_MSGDMA_CSR_RESPONSE_FILL_LEVEL(base) \ + IORD_32DIRECT(base, ALTERA_MSGDMA_CSR_RESPONSE_FILL_LEVEL_REG) +#define IORD_ALTERA_MSGDMA_CSR_SEQUENCE_NUMBER(base) \ + IORD_32DIRECT(base, ALTERA_MSGDMA_CSR_SEQUENCE_NUMBER_REG) + + + +#endif /*ALTERA_MSGDMA_ALTERA_MSGDMA_CSR_REGS_H_*/ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_descriptor_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_descriptor_regs.h new file mode 100644 index 0000000..21b1c31 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_descriptor_regs.h @@ -0,0 +1,163 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#ifndef ALTERA_MSGDMA_DESCRIPTOR_REGS_H_ +#define ALTERA_MSGDMA_DESCRIPTOR_REGS_H_ + +#include "io.h" + +/* + Descriptor formats: + + Standard Format: + + Offset | 3 2 1 0 + ------------------------------------------------------------------------------ + 0x0 | Read Address[31..0] + 0x4 | Write Address[31..0] + 0x8 | Length[31..0] + 0xC | Control[31..0] + + Extended Format: + +Offset| 3 2 1 0 + ------------------------------------------------------------------------------ + 0x0 | Read Address[31..0] + 0x4 | Write Address[31..0] + 0x8 | Length[31..0] + 0xC |Write Burst Count[7..0] | Read Burst Count[7..0] | Sequence Number[15..0] + 0x10 | Write Stride[15..0] | Read Stride[15..0] + 0x14 | Read Address[63..32] + 0x18 | Write Address[63..32] + 0x1C | Control[31..0] + + Note: The control register moves from offset 0xC to 0x1C depending on the + format used + +*/ + + + + +#define ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS_REG 0x0 +#define ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS_REG 0x4 +#define ALTERA_MSGDMA_DESCRIPTOR_LENGTH_REG 0x8 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_STANDARD_REG 0xC +#define ALTERA_MSGDMA_DESCRIPTOR_SEQUENCE_NUMBER_REG 0xC +#define ALTERA_MSGDMA_DESCRIPTOR_READ_BURST_REG 0xE +#define ALTERA_MSGDMA_DESCRIPTOR_WRITE_BURST_REG 0xF +#define ALTERA_MSGDMA_DESCRIPTOR_READ_STRIDE_REG 0x10 +#define ALTERA_MSGDMA_DESCRIPTOR_WRITE_STRIDE_REG 0x12 +#define ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS_HIGH_REG 0x14 +#define ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS_HIGH_REG 0x18 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_ENHANCED_REG 0x1C + + +/* masks and offsets for the sequence number and programmable burst counts */ +#define ALTERA_MSGDMA_DESCRIPTOR_SEQUENCE_NUMBER_MASK 0xFFFF +#define ALTERA_MSGDMA_DESCRIPTOR_SEQUENCE_NUMBER_OFFSET 0 +#define ALTERA_MSGDMA_DESCRIPTOR_READ_BURST_COUNT_MASK 0x00FF0000 +#define ALTERA_MSGDMA_DESCRIPTOR_READ_BURST_COUNT_OFFSET 16 +#define ALTERA_MSGDMA_DESCRIPTOR_WRITE_BURST_COUNT_MASK 0xFF000000 +#define ALTERA_MSGDMA_DESCRIPTOR_WRITE_BURST_COUNT_OFFSET 24 + + +/* masks and offsets for the read and write strides */ +#define ALTERA_MSGDMA_DESCRIPTOR_READ_STRIDE_MASK 0xFFFF +#define ALTERA_MSGDMA_DESCRIPTOR_READ_STRIDE_OFFSET 0 +#define ALTERA_MSGDMA_DESCRIPTOR_WRITE_STRIDE_MASK 0xFFFF0000 +#define ALTERA_MSGDMA_DESCRIPTOR_WRITE_STRIDE_OFFSET 16 + + +/* masks and offsets for the bits in the descriptor control field */ +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_TRANSMIT_CHANNEL_MASK 0xFF +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_TRANSMIT_CHANNEL_OFFSET 0 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GENERATE_SOP_MASK (1 << 8) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GENERATE_SOP_OFFSET 8 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GENERATE_EOP_MASK (1 << 9) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GENERATE_EOP_OFFSET 9 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_PARK_READS_MASK (1 << 10) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_PARK_READS_OFFSET 10 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_PARK_WRITES_MASK (1 << 11) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_PARK_WRITES_OFFSET 11 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_END_ON_EOP_MASK (1 << 12) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_END_ON_EOP_OFFSET 12 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_TRANSFER_COMPLETE_IRQ_MASK (1 << 14) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_TRANSFER_COMPLETE_IRQ_OFFSET 14 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_EARLY_TERMINATION_IRQ_MASK (1 << 15) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_EARLY_TERMINATION_IRQ_OFFSET 15 +/* the read master will use this as the transmit error, the dispatcher will use +this to generate an interrupt if any of the error bits are asserted by the +write master */ +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_ERROR_IRQ_MASK (0xFF << 16) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_ERROR_IRQ_OFFSET 16 +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_EARLY_DONE_ENABLE_MASK (1 << 24) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_EARLY_DONE_ENABLE_OFFSET 24 +/* at a minimum you always have to write '1' to this bit as it commits the +descriptor to the dispatcher */ +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK (1 << 31) +#define ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_OFFSET 31 + +/* Each register is byte lane accessible so the some of the values that are + * less than 32 bits wide are written to according to the field width. + */ +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_LENGTH(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_LENGTH_REG, data) +/* this pushes the descriptor into the read/write FIFOs when standard descriptors +are used */ +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_CONTROL_STANDARD(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_CONTROL_STANDARD_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_SEQUENCE_NUMBER(base, data) \ + IOWR_16DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_SEQUENCE_NUMBER_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_BURST(base, data) \ + IOWR_8DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_READ_BURST_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_BURST(base, data) \ + IOWR_8DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_WRITE_BURST_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_STRIDE(base, data) \ + IOWR_16DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_READ_STRIDE_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_STRIDE(base, data) \ + IOWR_16DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_WRITE_STRIDE_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS_HIGH(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS_HIGH_REG, data) +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS_HIGH(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS_HIGH_REG, data) +/* this pushes the descriptor into the read/write FIFOs when the extended +descriptors are used */ +#define IOWR_ALTERA_MSGDMA_DESCRIPTOR_CONTROL_ENHANCED(base, data) \ + IOWR_32DIRECT(base, ALTERA_MSGDMA_DESCRIPTOR_CONTROL_ENHANCED_REG, data) + + + +#endif /*ALTERA_MSGDMA_ALTERA_MSGDMA_DESCRIPTOR_REGS_H_*/ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_prefetcher_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_prefetcher_regs.h new file mode 100644 index 0000000..49d0815 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_prefetcher_regs.h @@ -0,0 +1,292 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#ifndef ALT_MSGDMA_PREFETCHER_REGS_H_ +#define ALT_MSGDMA_PREFETCHER_REGS_H_ + +#include "io.h" + +/* + MSGDMA Prefetcher core is an additional micro core to existing MSGDMA core which + already consists of dispatcher, read master and write master micro core. Prefetcher + core provides functionality to fetch a series of descriptors from memory that + describes the required data transfers before pass them to dispatcher core for data + transfer execution. +*/ + + +/* + * Component : MSGDMA PREFETCHER + * + */ +#define ALT_MSGDMA_PREFETCHER_CONTROL_OFST 0x00 +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_OFST 0x04 +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_OFST 0x08 +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ_OFST 0x0C +#define ALT_MSGDMA_PREFETCHER_STATUS_OFST 0x10 + +/* + * New MSGDMA PREFETCHER Descriptor fields. These are not prefetcher registers + * they are in the prefetcher descriptor structs + */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW value. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK (1 << 30) +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW value. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK 0xBFFFFFFF +/* The bit offset of the ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW field. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_BIT_OFFSET 30 +/* Extracts the ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_GET(value) (((value) & 0x40000000) >> 30) +/* Produces a ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET(value) (((value) << 30) & 0x40000000) + +/* + * Register : control + * + * The control register has two defined bits. + * + * DESC_POLL_EN and RUN . + * + * Detailed description available in their individual bitfields + * + * Register Layout + * + * Bits | Access | Reset | Description + * :-------|:-------|:------|:------------ + * [0] | R/W | 0x0 | RUN + * [1] | R/W | 0x0 | DESC_POLL_EN + * [2] | R/W1S | 0x0 | RESET_PREFETCHER + * [3] | R/W | 0x0 | GLOBAL_INTR_EN_MASK + * [4] | R/W | 0x0 | PARK_MODE + * [31:5] | R | 0x0 | RESERVED + * + */ + +/* bits making up the "control" register */ + +/* the RUN bit field in the control register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RUN_SET_MASK 0x1 +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RUN_CLR_MASK 0xFFFFFFFE +/* The bit offset of the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RUN_BIT_OFFSET 0 +/* Extracts the ALT_MSGDMA_PREFETCHER_CTRL_RUN field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RUN_GET(value) (((value) & 0x00000001) >> 0) +/* Produces a ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RUN_SET(value) (((value) << 0) & 0x00000001) + +/* the DESC_POLL_EN bit field in the control register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_MASK 0x2 +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_CLR_MASK 0xFFFFFFFD +/* The bit offset of the ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN register field. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_BIT_OFFSET 1 +/* Extracts the ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_GET(value) (((value) & 0x00000002) >> 1) +/* Produces a ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_SET(value) (((value) << 1) & 0x00000002) + +/* the RESET_PREFETCHER bit field in the control register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_CTRL_RESET register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RESET_SET_MASK 0x4 +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RESET_CLR_MASK 0xFFFFFFFB +/* The bit offset of the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RESET_BIT_OFFSET 2 +/* Extracts the ALT_MSGDMA_PREFETCHER_CTRL_RUN field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RESET_GET(value) (((value) & 0x00000004) >> 2) +/* Produces a ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RESET_SET(value) (((value) << 2) & 0x00000004) + +/* the GLOBAL_INTR_EN_MASK bit field in the control register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_MASK register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_SET_MASK 0x8 +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_CLR_MASK 0xFFFFFFF7 +/* The bit offset of the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_BIT_OFFSET 3 +/* Extracts the ALT_MSGDMA_PREFETCHER_CTRL_RUN field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_GET(value) (((value) & 0x00000008) >> 3) +/* Produces a ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_SET(value) (((value) << 3) & 0x00000008) + +/* the PARK_MODE bit field in the control register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_SET_MASK 0x10 +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_CLR_MASK 0xFFFFFFEF +/* The bit offset of the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_BIT_OFFSET 4 +/* Extracts the ALT_MSGDMA_PREFETCHER_CTRL_RUN field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_GET(value) (((value) & 0x00000010) >> 4) +/* Produces a ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_SET(value) (((value) << 4) & 0x00000010) + +/* + * Registers : Next Descriptor Pointer Low/High + * + * The register has no bit fields, the 64 bits represent an address. + * + * Register Layout + * + * Bits | Access | Reset | Description + * :-------|:-------|:------|:------------ + * [31:0] | R/W | 0x0 | NEXT_PTR_ADDR_LOW + * [63:32]| R/W | 0x0 | NEXT_PTR_ADDR_HIGH + * + */ + +/* bits making up the "Next Descriptor Pointer " register */ + +/* the NEXT_PTR_ADDR_LOW bit field in the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_REG register field value. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_SET_MASK 0xFFFFFFFF +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_REG register field value. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_CLR_MASK 0x0 +/* The bit offset of the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_REG register field. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_BIT_OFFSET 0 +/* Extracts the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_REG field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_GET(value) (((value) & 0xFFFFFFFF) >> 0) +/* Produces a ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_REG register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_SET(value) (((value) << 0) & 0xFFFFFFFF) + +/* the NEXT_PTR_ADDR_HIGH bit field in the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_REG register field value. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_SET_MASK 0xFFFFFFFF +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_REG register field value. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_CLR_MASK 0x0 +/* The bit offset of the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_REG register field. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_BIT_OFFSET 0 +/* Extracts the ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_REG field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_GET(value) (((value) & 0xFFFFFFFF) >> 0) +/* Produces a ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_REG register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_SET(value) (((value) << 0) & 0xFFFFFFFF) + + +/* + * Register : Descriptor Polling Frequency + * + * The Descriptor Polling Frequency register has one defined bit field. + * + * POLL_FREQ + * + * Detailed description available in their individual bitfields + * + * Register Layout + * + * Bits | Access | Reset | Description + * :--------|:-------|:------|:------------ + * [15:0] | R/W | 0x0 | POLL_FREQ + * [31:16] | R | 0x0 | RESERVED + * + */ + +/* bits making up the "DESC_POLL_FREQ" register */ + +/* the POLL_FREQ bit field in the ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ register field value. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ_SET_MASK 0xFFFF +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ_CLR_MASK 0xFFFF0000 +/* The bit offset of the ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ register field. */ +#define ALT_MSGDMA_PREFETCHER_CTRL_RUN_BIT_OFFSET 0 +/* Extracts the ALT_MSGDMA_PREFETCHER_CTRL_RUN field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ_GET(value) (((value) & 0x0000FFFF) >> 0) +/* Produces a ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ_SET(value) (((value) << 0) & 0x0000FFFF) + + +/* + * Register : Status + * + * The Status register has one defined bit field. + * + * IRQ + * + * Detailed description available in their individual bitfields + * + * Register Layout + * + * Bits | Access | Reset | Description + * :--------|:-------|:------|:------------ + * [0] | R/W1C | 0x0 | IRQ + * [31:1] | R | 0x0 | RESERVED + * + */ + +/* bits making up the "STATUS" register */ + +/* the IRQ bit field in the ALT_MSGDMA_PREFETCHER_STATUS register */ +/* The mask used to set the ALT_MSGDMA_PREFETCHER_STATUS_IRQ register field value. */ +#define ALT_MSGDMA_PREFETCHER_STATUS_IRQ_SET_MASK 0x1 +/* The mask used to clear the ALT_MSGDMA_PREFETCHER_STATUS_IRQ register field value. */ +#define ALT_MSGDMA_PREFETCHER_STATUS_IRQ_CLR_MASK 0xFFFFFFFE +/* The bit offset of the ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ register field. */ +#define ALT_MSGDMA_PREFETCHER_STATUS_IRQ_BIT_OFFSET 0 +/* Extracts the ALT_MSGDMA_PREFETCHER_CTRL_RUN field value from a register. */ +#define ALT_MSGDMA_PREFETCHER_STATUS_IRQ_GET(value) (((value) & 0x00000001) >> 0) +/* Produces a ALT_MSGDMA_PREFETCHER_CTRL_RUN register field value suitable for setting the register. */ +#define ALT_MSGDMA_PREFETCHER_STATUS_IRQ_SET(value) (((value) << 0) & 0x00000001) + + + +/*****************************************************************/ +/*** READ/WRITE macros for the MSGDMA PREFETCHER registers ***/ +/*****************************************************************/ +/* ALT_MSGDMA_PREFETCHER_CONTROL_REG */ +#define IORD_ALT_MSGDMA_PREFETCHER_CONTROL(base) \ + IORD_32DIRECT(base, ALT_MSGDMA_PREFETCHER_CONTROL_OFST) +#define IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(base, data) \ + IOWR_32DIRECT(base, ALT_MSGDMA_PREFETCHER_CONTROL_OFST, data) +/* ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_REG */ +#define IORD_ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW(base) \ + IORD_32DIRECT(base, ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_OFST) +#define IOWR_ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW(base, data) \ + IOWR_32DIRECT(base, ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_LOW_OFST, data) +/* ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_REG */ +#define IORD_ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH(base) \ + IORD_32DIRECT(base, ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_OFST) +#define IOWR_ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH(base, data) \ + IOWR_32DIRECT(base, ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH_OFST, data) +/* ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLLING_FREQ_REG */ +#define IORD_ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLLING_FREQ(base) \ + IORD_32DIRECT(base, ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ_OFST) +#define IOWR_ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLLING_FREQ(base, data) \ + IOWR_32DIRECT(base, ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLL_FREQ_OFST, data) +/* ALT_MSGDMA_PREFETCHER_STATUS_REG */ +#define IORD_ALT_MSGDMA_PREFETCHER_STATUS(base) \ + IORD_32DIRECT(base, ALT_MSGDMA_PREFETCHER_STATUS_OFST) +#define IOWR_ALT_MSGDMA_PREFETCHER_STATUS(base, data) \ + IOWR_32DIRECT(base, ALT_MSGDMA_PREFETCHER_STATUS_OFST, data) + +#endif /*ALT_MSGDMA_PREFETCHER_REGS_H_*/ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_response_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_response_regs.h new file mode 100644 index 0000000..65424d6 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_msgdma_response_regs.h @@ -0,0 +1,70 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#ifndef ALTERA_MSGDMA_RESPONSE_REGS_H_ +#define ALTERA_MSGDMA_RESPONSE_REGS_H_ + +#include "io.h" + +/* + The response slave port only carries the actual bytes transferred, + error, and early termination bits. Reading from the upper most byte + of the 2nd register pops the response FIFO. For proper FIFO popping + always read the actual bytes transferred followed by the error and early + termination bits using 'little endian' accesses. If a big endian + master accesses the response slave port make sure that address 0x7 is the + last byte lane access as it's the one that pops the reponse FIFO. + + If you use a pre-fetching descriptor master in front of the dispatcher + port then you do not need to access this response slave port. +*/ + + + +#define ALTERA_MSGDMA_RESPONSE_ACTUAL_BYTES_TRANSFERRED_REG 0x0 +#define ALTERA_MSGDMA_RESPONSE_ERRORS_REG 0x4 + +/* bits making up the "errors" register */ +#define ALTERA_MSGDMA_RESPONSE_ERROR_MASK 0xFF +#define ALTERA_MSGDMA_RESPONSE_ERROR_OFFSET 0 +#define ALTERA_MSGDMA_RESPONSE_EARLY_TERMINATION_MASK (1 << 8) +#define ALTERA_MSGDMA_RESPONSE_EARLY_TERMINATION_OFFSET 8 + + +/* read macros for each 32 bit register */ +#define IORD_ALTERA_MSGDMA_RESPONSE_ACTUAL_BYTES_TRANSFERRED(base) \ + IORD_32DIRECT(base, ALTERA_MSGDMA_RESPONSE_ACTUAL_BYTES_TRANSFERRED_REG) +/* this read pops the response FIFO */ +#define IORD_ALTERA_MSGDMA_RESPONSE_ERRORS_REG(base) \ + IORD_32DIRECT(base, ALTERA_MSGDMA_RESPONSE_ERRORS_REG) + + +#endif /*ALTERA_MSGDMA_RESPONSE_REGS_H_*/ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_onchip_flash.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_onchip_flash.h new file mode 100644 index 0000000..0d915fc --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_onchip_flash.h @@ -0,0 +1,167 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALT_ONCHIP_FLASH_H__ +#define __ALT_ONCHIP_FLASH_H__ + +#include "alt_types.h" +#include "sys/alt_flash_dev.h" +#include "sys/alt_llist.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* + * Getting started: + * Nios II Software Developer's Handbook (URL: http://www.altera.com/literature/lit-nio2.jsp) + * -> Section II. Hardware Abstraction Layer + * -> Chapter 6. Developing Programs Using the Hardware Abstraction Layer + * -> Using Flash Devices + */ + +/* + * Description of the flash + */ +typedef struct alt_onchip_flash_dev +{ + /* Flash common declaration */ + alt_flash_dev dev; + + /* IP specific information */ + int is_read_only; + void *csr_base; + int sector1_enabled; + int sector1_start_addr; + int sector1_end_addr; + int sector2_enabled; + int sector2_start_addr; + int sector2_end_addr; + int sector3_enabled; + int sector3_start_addr; + int sector3_end_addr; + int sector4_enabled; + int sector4_start_addr; + int sector4_end_addr; + int sector5_enabled; + int sector5_start_addr; + int sector5_end_addr; + int page_size; +} alt_onchip_flash_dev; + +/* +* Macros used by alt_sys_init.c +* +*/ +#define ALTERA_ONCHIP_FLASH_DATA_CSR_INSTANCE(name, data, csr, dev) \ +static alt_onchip_flash_dev dev = \ +{ \ + { \ + ALT_LLIST_ENTRY, \ + data##_NAME, \ + NULL, \ + NULL, \ + alt_onchip_flash_write, \ + alt_onchip_flash_read, \ + alt_onchip_flash_get_info, \ + alt_onchip_flash_erase_block, \ + alt_onchip_flash_write_block, \ + ((void*)(data##_BASE)), \ + ((int)(data##_SPAN)), \ + 0 \ + }, \ + data##_READ_ONLY_MODE, \ + ((void*)(csr##_BASE)), \ + data##_SECTOR1_ENABLED, \ + data##_SECTOR1_START_ADDR, \ + data##_SECTOR1_END_ADDR, \ + data##_SECTOR2_ENABLED, \ + data##_SECTOR2_START_ADDR, \ + data##_SECTOR2_END_ADDR, \ + data##_SECTOR3_ENABLED, \ + data##_SECTOR3_START_ADDR, \ + data##_SECTOR3_END_ADDR, \ + data##_SECTOR4_ENABLED, \ + data##_SECTOR4_START_ADDR, \ + data##_SECTOR4_END_ADDR, \ + data##_SECTOR5_ENABLED, \ + data##_SECTOR5_START_ADDR, \ + data##_SECTOR5_END_ADDR, \ + data##_BYTES_PER_PAGE \ +} + +/* + Public API + + Refer to Using Flash Devices in the + Developing Programs Using the Hardware Abstraction Layer chapter + of the Nios II Software Developer's Handbook. + +*/ + +int alt_onchip_flash_read(alt_flash_dev *flash_info, int offset, void *dest_addr, int length); + +int alt_onchip_flash_get_info(alt_flash_fd *fd, flash_region **info, int *number_of_regions); + +int alt_onchip_flash_erase_block(alt_flash_dev *flash_info, int block_offset); + +int alt_onchip_flash_write_block(alt_flash_dev *flash_info, int block_offset, int data_offset, const void *data, int length); + +int alt_onchip_flash_write(alt_flash_dev *flash_info, int offset, const void *src_addr, int length); + +/* + * Initialization function + */ +extern void altera_onchip_flash_init(alt_onchip_flash_dev *dev); + +/* + * alt_sys_init.c will call this macro automatically + */ +#define ALTERA_ONCHIP_FLASH_INIT(name, dev) { altera_onchip_flash_init(&dev); } + + +/* + Private API + + Helper functions used by Public API functions. +*/ + +int alt_onchip_flash_poll_for_status_to_go_idle(alt_onchip_flash_dev *flash); + +int alt_onchip_flash_poll_for_status_erase_passed(alt_onchip_flash_dev* flash); + +int alt_onchip_flash_poll_for_status_write_passed(alt_onchip_flash_dev* flash); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALT_ONCHIP_FLASH_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/altera_onchip_flash_regs.h b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_onchip_flash_regs.h new file mode 100644 index 0000000..6006e94 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/altera_onchip_flash_regs.h @@ -0,0 +1,241 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_ONCHIP_FLASH_REGS_H__ +#define __ALTERA_ONCHIP_FLASH_REGS_H__ + +#include + +/* + * Status Register +*/ +#define ALTERA_ONCHIP_FLASH_STATUS_REG 0 +#define ALTERA_ONCHIP_FLASH_STATUS_MSK (0x00007FFF) + +#define ALTERA_ONCHIP_FLASH_STATUS_BUSY_MSK (0x00000003) +#define ALTERA_ONCHIP_FLASH_STATUS_BUSY_IDLE (0x00000000) +#define ALTERA_ONCHIP_FLASH_STATUS_BUSY_ERASE (0x00000001) +#define ALTERA_ONCHIP_FLASH_STATUS_BUSY_WRITE (0x00000002) +#define ALTERA_ONCHIP_FLASH_STATUS_BUSY_READ (0x00000003) + +#define ALTERA_ONCHIP_FLASH_STATUS_READ_MSK (0x00000004) +#define ALTERA_ONCHIP_FLASH_STATUS_READ_PASSED (0x00000004) +#define ALTERA_ONCHIP_FLASH_STATUS_READ_FAILED (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_WRITE_MSK (0x00000008) +#define ALTERA_ONCHIP_FLASH_STATUS_WRITE_PASSED (0x00000008) +#define ALTERA_ONCHIP_FLASH_STATUS_WRITE_FAILED (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_ERASE_MSK (0x00000010) +#define ALTERA_ONCHIP_FLASH_STATUS_ERASE_PASSED (0x00000010) +#define ALTERA_ONCHIP_FLASH_STATUS_ERASE_FAILED (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_MSK (0x00000020) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_UNAVAILABLE (0x00000020) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_AVAILABLE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_MSK (0x00000040) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_UNAVAILABLE (0x00000040) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_AVAILABLE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_MSK (0x00000080) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_UNAVAILABLE (0x00000080) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_AVAILABLE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_MSK (0x00000100) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_UNAVAILABLE (0x00000100) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_AVAILABLE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_MSK (0x00000200) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_UNAVAILABLE (0x00000200) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_AVAILABLE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_READONLY_MSK (0x00000400) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_READONLY (0x00000400) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_READWRITE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_READONLY_MSK (0x00000800) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_READONLY (0x00000800) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_READWRITE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_READONLY_MSK (0x00001000) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_READONLY (0x00001000) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_READWRITE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_READONLY_MSK (0x00002000) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_READONLY (0x00002000) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_READWRITE (0x00000000) + +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_READONLY_MSK (0x00004000) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_READONLY (0x00004000) +#define ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_READWRITE (0x00000000) + +#define IOADDR_ALTERA_ONCHIP_FLASH_STATUS(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_ONCHIP_FLASH_STATUS_REG) + +#define IORD_ALTERA_ONCHIP_FLASH_STATUS(base) \ + IORD(base, ALTERA_ONCHIP_FLASH_STATUS_REG) + +#define IOWR_ALTERA_ONCHIP_FLASH_STATUS(base, data) \ + IOWR(base, ALTERA_ONCHIP_FLASH_STATUS_REG, data) + + +/* + * Control Register +*/ +#define ALTERA_ONCHIP_FLASH_CONTROL_REG 1 +#define ALTERA_ONCHIP_FLASH_CONTROL_MSK (0xCFFFFFFF) + +#define ALTERA_ONCHIP_FLASH_CONTROL_PAGE_ERASE_MSK (0x000FFFFF) +#define ALTERA_ONCHIP_FLASH_CONTROL_PAGE_ERASE_NOT_SET (0x000FFFFF) + +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_MSK (0x00700000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_SECTOR1 (0x00100000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_SECTOR2 (0x00200000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_SECTOR3 (0x00300000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_SECTOR4 (0x00400000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_SECTOR5 (0x00500000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_NOT_SET (0x00700000) + +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR1_WRITE_PROTECT_MSK (0x00800000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR1_WRITE_ENABLE (0x00000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR1_WRITE_DISABLE (0x00800000) + +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR2_WRITE_PROTECT_MSK (0x01000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR2_WRITE_ENABLE (0x00000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR2_WRITE_DISABLE (0x01000000) + +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR3_WRITE_PROTECT_MSK (0x02000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR3_WRITE_ENABLE (0x00000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR3_WRITE_DISABLE (0x02000000) + +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR4_WRITE_PROTECT_MSK (0x04000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR4_WRITE_ENABLE (0x00000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR4_WRITE_DISABLE (0x04000000) + +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR5_WRITE_PROTECT_MSK (0x08000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR5_WRITE_ENABLE (0x00000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_SECTOR5_WRITE_DISABLE (0x08000000) + +#define ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_PROTECT_MSK (0x0F800000) +#define ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_ENABLE (0x00000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_DISABLE (0x0F800000) + +#define ALTERA_ONCHIP_FLASH_CONTROL_ERASE_STATE_MSK (0xC0000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_ERASE_STATE_IDLE (0x00000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_ERASE_STATE_PENDING (0x40000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_ERASE_STATE_BUSY (0x80000000) +#define ALTERA_ONCHIP_FLASH_CONTROL_ERASE_STATE_RSVD (0xC0000000) + +#define IOADDR_ALTERA_ONCHIP_FLASH_CONTROL(base) \ + __IO_CALC_ADDRESS_NATIVE(base, ALTERA_ONCHIP_FLASH_CONTROL_REG) + +#define IORD_ALTERA_ONCHIP_FLASH_CONTROL(base) \ + IORD(base, ALTERA_ONCHIP_FLASH_CONTROL_REG) + +#define IOWR_ALTERA_ONCHIP_FLASH_CONTROL(base, data) \ + IOWR(base, ALTERA_ONCHIP_FLASH_CONTROL_REG, data) + + +/* + * Constant value +*/ +#define ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE (32/8) +/* 0.7 sec time out */ +#define ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE 700000 + +/* + * Functional Macros +*/ + +/* Enable Write and Erase Operation */ +#define ALTERA_ONCHIP_FLASH_ENABLE_WRITE_AND_ERASE_OPERATION(base) \ + ( \ + IOWR_ALTERA_ONCHIP_FLASH_CONTROL((base), \ + (IORD_ALTERA_ONCHIP_FLASH_CONTROL((base)) \ + & \ + ~( \ + ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_PROTECT_MSK | \ + ALTERA_ONCHIP_FLASH_CONTROL_PAGE_ERASE_MSK | \ + ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_MSK \ + ) \ + ) \ + | \ + ( \ + ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_ENABLE | \ + ALTERA_ONCHIP_FLASH_CONTROL_PAGE_ERASE_NOT_SET | \ + ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_NOT_SET \ + ) \ + ) \ + ) + +/* Disable Write and Erase Operation */ +#define ALTERA_ONCHIP_FLASH_DISABLE_WRITE_AND_ERASE_OPERATION(base) \ + ( \ + IOWR_ALTERA_ONCHIP_FLASH_CONTROL((base), \ + (IORD_ALTERA_ONCHIP_FLASH_CONTROL((base)) \ + & \ + ~( \ + ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_PROTECT_MSK | \ + ALTERA_ONCHIP_FLASH_CONTROL_PAGE_ERASE_MSK | \ + ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_MSK \ + ) \ + ) \ + | \ + ( \ + ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_DISABLE | \ + ALTERA_ONCHIP_FLASH_CONTROL_PAGE_ERASE_NOT_SET | \ + ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_NOT_SET \ + ) \ + ) \ + ) + +/* Page Erase Operation */ +#define ALTERA_ONCHIP_FLASH_PAGE_ERASE(base, page_erase_block_address) \ + ( \ + IOWR_ALTERA_ONCHIP_FLASH_CONTROL((base), \ + (IORD_ALTERA_ONCHIP_FLASH_CONTROL((base)) \ + & \ + ~( \ + ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_PROTECT_MSK | \ + ALTERA_ONCHIP_FLASH_CONTROL_PAGE_ERASE_MSK | \ + ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_MSK \ + ) \ + ) \ + | \ + ( \ + ALTERA_ONCHIP_FLASH_CONTROL_ALLSECTOR_WRITE_ENABLE | \ + (page_erase_block_address) | \ + ALTERA_ONCHIP_FLASH_CONTROL_SECTOR_ERASE_NOT_SET \ + ) \ + ) \ + ) + +#endif /* __ALTERA_ONCHIP_FLASH_REGS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/iniche/altera_eth_tse_iniche.h b/FPGA_nios/hit_pat_bsp/drivers/inc/iniche/altera_eth_tse_iniche.h new file mode 100644 index 0000000..9d0a23b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/iniche/altera_eth_tse_iniche.h @@ -0,0 +1,250 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef __ALTERA_ETH_TSE_INICHE_H__ +#define __ALTERA_ETH_TSE_INICHE_H__ + +#include "alt_iniche_dev.h" +#include "altera_eth_tse_regs.h" +#include "ins_tse_mac.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/* System Constant Definition Used in the TSE Driver Code */ +#define ALTERA_TSE_PKT_INIT_LEN 1528 + +#define ALTERA_TSE_ADMIN_STATUS_DOWN 2 +#define ALTERA_TSE_ADMIN_STATUS_UP 1 +#define ALTERA_TSE_MAX_MTU_SIZE 1514 +#define ALTERA_TSE_MIN_MTU_SIZE 14 +#define ALTERA_TSE_HAL_ADDR_LEN 6 + + + +/******************************* + * + * Public API for TSE Driver + * + *******************************/ + + + /* @Function Description: TSE MAC Driver Open/Initialization routine + * @API TYPE: Public + * @Param p_dec pointer to TSE device instance + * @Return SUCCESS + */ + +error_t altera_eth_tse_init( + alt_iniche_dev *p_dev); + + +/* @Function Description - Closing the TSE MAC Driver Interface + * + * + * @API TYPE - Public + * @param iface index of the NET interface associated with the TSE MAC. + * @return SUCCESS + */ +int tse_mac_close(int iface); + + + +/* @Function Description - TSE transmit API to send data to the MAC + * + * + * @API TYPE - Public + * @param net - NET structure associated with the TSE MAC instance + * @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 SEND_DROPPED, ENP_RESOURCE if error + * + */ +int tse_mac_raw_send(NET net, char * data, unsigned int data_bytes); + +/* @Function Description - TSE transmit API to send data to the MAC + * + * + * @API TYPE - Public + * @param pke - Packet containing data to send + * @return SUCCESS if success, else SEND_DROPPED, ENP_RESOURCE if error + * + */ +int tse_mac_pkt_send(PACKET pkt); + + +/******************************** + * + * Internal API for TSE Driver + * + *******************************/ + +/** @Function Description: TSE MAC Driver Open/Registration routine + * @API TYPE: Internal + * @Param index index of the NET structure associated with TSE instance + * @Return next index of NET + */ +int prep_tse_mac(int index, alt_tse_system_info *psys_info); + + + +/* @Function Description: TSE MAC Initialization routine. This function opens the + * device handle, configure the callback function and interrupts , + * for MSGDMA TX and MSGDMA RX block associated with the TSE MAC, + * Initialize the MAC Registers for the RX FIFO and TX FIFO + * threshold watermarks, initialize the tse device structure, + * set the MAC address of the device and enable the MAC + * + * @API TYPE: Internal + * @Param iface index of the NET structure associated with TSE instance + * @Return SUCCESS if ok, else ENP_RESOURCE, ENP_PARAM, ENP_LOGIC if error + */ +int tse_mac_init(int iface); + + + +/* @Function Description - TSE Driver MSGDMA RX ISR callback function + * + * + * @API TYPE - callback + * @param context - context of the TSE MAC instance + * @param intnum - temporary storage + * @return SUCCESS on success else ENP_LOGIC if error + */ +void tse_msgdmaRx_isr(void * context); + +/* @Function Description - TSE Driver MSGDMA TX ISR callback function + * + * + * @API TYPE - callback + * @param context - context of the TSE MAC instance + * @param intnum - temporary storage + * @return SUCCESS on success else ENP_LOGIC if error + */ +void tse_msgdmaTx_isr(void * context); + + +/* @Function Description - Init and setup MSGDMA RX Descriptor chain + * + * + * @API TYPE - Internal + * @return SUCCESS on success else ENP_NOBUFFER if error + */ +int tse_msgdma_read_init(ins_tse_info* tse_ptr); + + +/* @Function Description - Init and setup MSGDMA TX Descriptor chain + * + * + * @API TYPE - Internal + * @return SUCCESS on success else ENP_NOBUFFER if error + */ +int tse_msgdma_write_init(ins_tse_info* tse_ptr,unsigned int * ActualData,unsigned int len); + + +/* @Function Description - TSE Driver MSGDMA RX ISR callback function + * + * + * @API TYPE - callback internal function + * @return SUCCESS on success else ENP_NORESOURCE, ENP_NOBUFFER if error + */ +void tse_mac_rcv(ins_tse_info* tse_ptr); + +/* @Function Description - allocate rx descriptor chain memory + * + * + * @API TYPE - callback internal function + * @return SUCCESS on success else 1 if error + */ +int allocate_rx_descriptor_chain(ins_tse_info* tse_ptr); + + +int tse_mac_stats(void * pio, int iface); + + +/********************************** + * + * TSE Driver Structure Definition + * + **********************************/ + +typedef struct +{ + alt_iniche_dev dev; +} altera_eth_tse_if; + +typedef struct +{ + alt_iniche_dev *p_dev; + alt_u32 hw_mac_base_addr; + alt_u8 hw_channel_number; +} alt_tse_iniche_dev_driver_data; + +#define ALTERA_ETH_TSE_INSTANCE(inst_name, dev_inst) \ +altera_eth_tse_if dev_inst##_if[8]; \ +char *dev_inst##_name = inst_name##_NAME; + +#define ALTERA_ETH_TSE_INIT(inst_name, dev_inst) \ +{ \ + extern alt_u8 number_of_tse_mac; \ + extern alt_tse_iniche_dev_driver_data tse_iniche_dev_driver_data[MAXNETS]; \ + \ + int dev_inst##_loop_control = 0; \ + int dev_inst##_number_of_channel = inst_name##_NUMBER_OF_CHANNEL; \ + if(dev_inst##_number_of_channel < 1) { \ + dev_inst##_number_of_channel = 1; \ + } \ + \ + for(dev_inst##_loop_control = 0; dev_inst##_loop_control < dev_inst##_number_of_channel; dev_inst##_loop_control++) { \ + dev_inst##_if[dev_inst##_loop_control].dev.llist.next = 0; \ + dev_inst##_if[dev_inst##_loop_control].dev.llist.previous = 0; \ + dev_inst##_if[dev_inst##_loop_control].dev.name = dev_inst##_name; \ + dev_inst##_if[dev_inst##_loop_control].dev.init_func = altera_eth_tse_init; \ + \ + alt_iniche_dev_reg(&(dev_inst##_if[dev_inst##_loop_control].dev)); \ + tse_iniche_dev_driver_data[number_of_tse_mac].p_dev = &(dev_inst##_if[dev_inst##_loop_control].dev); \ + tse_iniche_dev_driver_data[number_of_tse_mac].hw_mac_base_addr = inst_name##_BASE; \ + tse_iniche_dev_driver_data[number_of_tse_mac].hw_channel_number = dev_inst##_loop_control; \ + number_of_tse_mac++; \ + } \ +} + +error_t altera_eth_tse_init( + alt_iniche_dev *p_dev); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __ALTERA_ETH_TSE_INICHE_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/inc/iniche/ins_tse_mac.h b/FPGA_nios/hit_pat_bsp/drivers/inc/iniche/ins_tse_mac.h new file mode 100644 index 0000000..4b6e01c --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/inc/iniche/ins_tse_mac.h @@ -0,0 +1,88 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifndef _ins_tse_regs_h_ +#define _ins_tse_regs_h_ + +#include "altera_msgdma.h" +#include "altera_msgdma_descriptor_regs.h" +#include "altera_msgdma_prefetcher_regs.h" +#include "altera_msgdma_csr_regs.h" +#include "altera_avalon_tse.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef ALT_INICHE +#include "ipport.h" +#include "tcpport.h" +#endif + +/* Base-Structure for all library functions */ +typedef struct{ + /* index number */ + int index; + + tse_mac_trans_info mi; /* MAC base driver data. */ + + /* driver specific */ + char mac_addr[8]; /* use 8 to word align */ + NET netp; /* pointer to Interniche NET struct */ + int txShift16OK; /* TX supports Shift16 */ + int rxShift16OK; /* RX supports Shift16 */ +/* Temporary variable to "protect" our transmit function - should be protected otherwise though */ + int sem; +/* Variable to store Channel number for Share Fifo System */ + int channel; + + // Location for the MSGDMA Descriptors + alt_msgdma_prefetcher_standard_descriptor *txdesc_list; + alt_msgdma_prefetcher_standard_descriptor *txdesc; + //The two lists are used to prepare one list while the other is executing + alt_msgdma_prefetcher_standard_descriptor *rxdesc_list[2]; + alt_msgdma_prefetcher_standard_descriptor *rxdesc[2]; + int rx_chain; + int rx_descriptor_index; + int tx_descriptor_index; + + // Pre-allocation of packet buffers for each RX descriptor + PACKET pkt_array_rx[2][ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE]; + + // Hardware location + void *tse; + +} ins_tse_info; + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _ins_tse_regs_h_*/ diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_sysid_qsys.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_sysid_qsys.c new file mode 100644 index 0000000..3dfca88 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_sysid_qsys.c @@ -0,0 +1,82 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include "altera_avalon_sysid_qsys.h" +#include "altera_avalon_sysid_qsys_regs.h" +#include "alt_types.h" +#include + +/* +* This component is special: there's only one of it. +* Therefore we can dispense with a bunch of complexity +* normally associated with components, such as specialized +* structs containing parameter info, and instead use that +* info by name directly out of system.h. A downside of this +* approach is that each time the system is regenerated, and +* system.h changes, this file must be recompiled. Fortunately +* this file is, and is likely to remain, quite small. +*/ +#include "system.h" + +#ifdef SYSID_BASE +/* +* return values: +* 0 if the hardware and software appear to be in sync +* 1 if software appears to be older than hardware +* -1 if hardware appears to be older than software +*/ + +alt_32 alt_avalon_sysid_qsys_test(void) +{ + /* Read the hardware-tag, aka value0, from the hardware. */ + alt_u32 hardware_id = IORD_ALTERA_AVALON_SYSID_QSYS_ID(SYSID_BASE); + + /* Read the time-of-generation, aka value1, from the hardware register. */ + alt_u32 hardware_timestamp = IORD_ALTERA_AVALON_SYSID_QSYS_TIMESTAMP(SYSID_BASE); + + /* Return 0 if the hardware and software appear to be in sync. */ + if ((SYSID_TIMESTAMP == hardware_timestamp) && (SYSID_ID == hardware_id)) + { + return 0; + } + + /* + * Return 1 if software appears to be older than hardware (that is, + * the value returned by the hardware is larger than that recorded by + * the generator function). + * If the hardware time happens to match the generator program's value + * (but the hardware tag, value0, doesn't match or 0 would have been + * returned above), return an arbitrary value, let's say -1. + */ + return ((alt_32)(hardware_timestamp - SYSID_TIMESTAMP)) > 0 ? 1 : -1; +} +#endif diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_sc.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_sc.c new file mode 100644 index 0000000..715723d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_sc.c @@ -0,0 +1,110 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "sys/alt_alarm.h" +#include "sys/alt_irq.h" + +#include "altera_avalon_timer.h" +#include "altera_avalon_timer_regs.h" + +#include "alt_types.h" +#include "sys/alt_log_printf.h" + +/* + * alt_avalon_timer_sc_irq() is the interrupt handler used for the system + * clock. This is called periodically when a timer interrupt occurs. The + * function first clears the interrupt condition, and then calls the + * alt_tick() function to notify the system that a timer tick has occurred. + * + * alt_tick() increments the system tick count, and updates any registered + * alarms, see alt_tick.c for further details. + */ +#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 +{ + alt_irq_context cpu_sr; + + /* clear the interrupt */ + IOWR_ALTERA_AVALON_TIMER_STATUS (base, 0); + + /* + * 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); + + /* ALT_LOG - see altera_hal/HAL/inc/sys/alt_log_printf.h */ + ALT_LOG_SYS_CLK_HEARTBEAT(); + + /* + * Notify the system of a clock tick. disable interrupts + * during this time to safely support ISR preemption + */ + cpu_sr = alt_irq_disable_all(); + alt_tick (); + alt_irq_enable_all(cpu_sr); +} + +/* + * alt_avalon_timer_sc_init() is called to initialise the timer that will be + * used to provide the periodic system clock. This is called from the + * 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) +{ + /* set the system clock frequency */ + + alt_sysclk_init (freq); + + /* set to free running mode */ + + IOWR_ALTERA_AVALON_TIMER_CONTROL (base, + ALTERA_AVALON_TIMER_CONTROL_ITO_MSK | + 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, + base, NULL); +#else + alt_irq_register (irq, base, alt_avalon_timer_sc_irq); +#endif +} diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_ts.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_ts.c new file mode 100644 index 0000000..c5df1b4 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_ts.c @@ -0,0 +1,143 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "system.h" +#include "sys/alt_timestamp.h" + +#include "altera_avalon_timer.h" +#include "altera_avalon_timer_regs.h" + +#include "alt_types.h" + +/* + * These functions are only available if a timestamp device has been selected + * for this system. + */ + +#if (ALT_TIMESTAMP_CLK_BASE != none_BASE) + +/* + * The function alt_timestamp_start() can be called at application level to + * initialise the timestamp facility. In this case the period register is + * set to full scale, i.e. 0xffffffff, and then started running. Note that + * the period register may not be writable, depending on the hardware + * configuration, in which case this function does not reset the period. + * + * The timer is not run in continuous mode, so that the user can detect timer + * roll-over, i.e. alt_timestamp() returns 0. + * + * The return value of this function is 0 upon sucess and -1 if in timestamp + * device has not been registered. + */ + +int alt_timestamp_start(void) +{ + void* base = altera_avalon_timer_ts_base; + + if (!altera_avalon_timer_ts_freq) + { + return -1; + } + else + { + if(ALT_TIMESTAMP_COUNTER_SIZE == 64) { + IOWR_ALTERA_AVALON_TIMER_CONTROL (base,ALTERA_AVALON_TIMER_CONTROL_STOP_MSK); + IOWR_ALTERA_AVALON_TIMER_PERIOD_0 (base, 0xFFFF); + IOWR_ALTERA_AVALON_TIMER_PERIOD_1 (base, 0xFFFF);; + IOWR_ALTERA_AVALON_TIMER_PERIOD_2 (base, 0xFFFF); + IOWR_ALTERA_AVALON_TIMER_PERIOD_3 (base, 0xFFFF); + IOWR_ALTERA_AVALON_TIMER_CONTROL (base, ALTERA_AVALON_TIMER_CONTROL_START_MSK); + } else { + IOWR_ALTERA_AVALON_TIMER_CONTROL (base,ALTERA_AVALON_TIMER_CONTROL_STOP_MSK); + IOWR_ALTERA_AVALON_TIMER_PERIODL (base, 0xFFFF); + IOWR_ALTERA_AVALON_TIMER_PERIODH (base, 0xFFFF); + IOWR_ALTERA_AVALON_TIMER_CONTROL (base, ALTERA_AVALON_TIMER_CONTROL_START_MSK); + } + } + return 0; +} + +/* + * alt_timestamp() returns the current timestamp count. In the event that + * the timer has run full period, or there is no timestamp available, this + * function return -1. + * + * The returned timestamp counts up from the last time the period register + * was reset. + */ + +alt_timestamp_type alt_timestamp(void) +{ + + void* base = altera_avalon_timer_ts_base; + + if (!altera_avalon_timer_ts_freq) + { +#if (ALT_TIMESTAMP_COUNTER_SIZE == 64) + return 0xFFFFFFFFFFFFFFFFULL; +#else + return 0xFFFFFFFF; +#endif + } + else + { +#if (ALT_TIMESTAMP_COUNTER_SIZE == 64) + IOWR_ALTERA_AVALON_TIMER_SNAP_0 (base, 0); + alt_timestamp_type snap_0 = IORD_ALTERA_AVALON_TIMER_SNAP_0(base) & ALTERA_AVALON_TIMER_SNAP_0_MSK; + alt_timestamp_type snap_1 = IORD_ALTERA_AVALON_TIMER_SNAP_1(base) & ALTERA_AVALON_TIMER_SNAP_1_MSK; + alt_timestamp_type snap_2 = IORD_ALTERA_AVALON_TIMER_SNAP_2(base) & ALTERA_AVALON_TIMER_SNAP_2_MSK; + alt_timestamp_type snap_3 = IORD_ALTERA_AVALON_TIMER_SNAP_3(base) & ALTERA_AVALON_TIMER_SNAP_3_MSK; + + return (0xFFFFFFFFFFFFFFFFULL - ( (snap_3 << 48) | (snap_2 << 32) | (snap_1 << 16) | (snap_0) )); +#else + IOWR_ALTERA_AVALON_TIMER_SNAPL (base, 0); + alt_timestamp_type lower = IORD_ALTERA_AVALON_TIMER_SNAPL(base) & ALTERA_AVALON_TIMER_SNAPL_MSK; + alt_timestamp_type upper = IORD_ALTERA_AVALON_TIMER_SNAPH(base) & ALTERA_AVALON_TIMER_SNAPH_MSK; + + return (0xFFFFFFFF - ((upper << 16) | lower)); +#endif + } +} + +/* + * Return the number of timestamp ticks per second. This will be 0 if no + * timestamp device has been registered. + */ + +alt_u32 alt_timestamp_freq(void) +{ + return altera_avalon_timer_ts_freq; +} + +#endif /* timestamp available */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_vars.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_vars.c new file mode 100644 index 0000000..57c431d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_timer_vars.c @@ -0,0 +1,45 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +#include + +#include "altera_avalon_timer.h" +#include "alt_types.h" + +/* + * Variables used to store the timestamp parameters. These are initialised + * from alt_sys_init() using the ALTERA_AVALON_TIMER_INIT macro + * defined in altera_avalon_timer.h. + */ + +void* altera_avalon_timer_ts_base = (void*) 0; +alt_u32 altera_avalon_timer_ts_freq = 0; diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_tse.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_tse.c new file mode 100644 index 0000000..9c2acc1 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_tse.c @@ -0,0 +1,2339 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "altera_avalon_tse.h" +#include "sys/alt_cache.h" +#include +#include +#include +#include + +void no_printf (char *fmt, ...) {} + +#ifdef __ALTERA_MSGDMA + + +/** @Function Description - Perform initialization steps on transaction info structure to prepare it for . + * use by the library functions with two MSGDMAs and extra initialization Flags + * @API Type: Internal + * @param mi Main Device Structure. + * @param mac_base Base Address of the Control interface for the TSE MAC + * @param tx_msgdma MSGDMA device handle for TSE transmit data path + * @param rx_msgdma MSGDMA device handle for TSE receive data path + * @param cfgflags initialization flags for the device + * @return 0 + */ + +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) { + + mi->base = (np_tse_mac*)mac_base; + mi->tx_msgdma = (alt_msgdma_dev *)tx_msgdma; + mi->rx_msgdma = (alt_msgdma_dev *)rx_msgdma; + mi->cfgflags = cfgflags; + return SUCCESS; +} + +/** @Function Description - Synchronous MSGDMA copy from buffer memory into transmit FIFO. Waits until + * SGDMA has completed. Raw function without any error checks. + * @API Type: Internal + * @param mi Main Device Structure. + * @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) +{ + + alt_32 timeout; + alt_u8 result = 0; + + // Make sure DMA controller is not busy from a former command + // and TX is able to accept data + timeout = 0; + while ( (IORD_ALTERA_MSGDMA_CSR_STATUS(mi->tx_msgdma->csr_base) & + ALTERA_MSGDMA_CSR_BUSY_MASK) ) { + if(timeout++ == ALTERA_TSE_MSGDMA_BUSY_TIME_OUT_CNT) { + tse_dprintf(4, "WARNING : TX MSGDMA Timeout\n"); + return ENP_RESOURCE; // avoid being stuck here + } + } + + // Start MSGDMA (blocking call) + alt_dcache_flush(txDesc,sizeof(alt_msgdma_standard_descriptor)); + result = alt_msgdma_standard_descriptor_sync_transfer( + mi->tx_msgdma, + txDesc); + + if (result != 0) { + tse_dprintf(4, "WARNING :alt_msgdma_standard_descriptor_sync_transfer Error code 0x%x\n",result); + return -1; + } + + return 0; +} + + +/** @Function Description - Asynchronous MSGDMA copy from rxFIFO into given buffer memory area. + * Raw function without any error checks. + * + * @API Type: Internal + * @param mi Main Device Structure. + * @param rxDesc Pointer to the receive MSGDMA descriptor list + * @return 0 if ok, else error (-1) + * + * Note: At the point of this function call return, + * the MSGDMA asynchronous operation may not have been + * completed yet, so the function does not return + * the actual bytes transferred for current descriptor + */ +alt_32 tse_mac_aRxRead( + tse_mac_trans_info *mi, + alt_msgdma_prefetcher_standard_descriptor *rxDesc) +{ + alt_u8 result; + + result = alt_msgdma_start_prefetcher_with_std_desc_list( + mi->rx_msgdma, + rxDesc,0,0,1,1); + + if (result != 0) { return -1; } + + return SUCCESS; +} + +/** @Function Description - Asynchronous MSGDMA transfer from buffer to txFIFO + * + * + * @API Type: Internal + * @param mi Main Device Structure. + * @param rxDesc Pointer to the transmit MSGDMA descriptor list + * @return 0 if ok, or (-1) if error + * + */ +alt_32 tse_mac_aTxWrite( + tse_mac_trans_info *mi, + alt_msgdma_prefetcher_standard_descriptor *txDesc) +{ + alt_u8 result; + + result = alt_msgdma_start_prefetcher_with_std_desc_list( + mi->tx_msgdma, + txDesc,0,0,1,1); + + if (result != 0) { return -1; } + + return SUCCESS; +} + + +#endif /* __ALTERA_MSGDMA */ + +/* Definition of TSE system */ +extern alt_tse_system_info tse_mac_device[MAXNETS]; + +/* PHY profile*/ +alt_tse_phy_profile *pphy_profiles[TSE_MAX_PHY_PROFILE]; +alt_u8 phy_profile_count = 0; + +/* MAC in TSE system */ +alt_tse_mac_group *pmac_groups[TSE_MAX_MAC_IN_SYSTEM]; +alt_u8 mac_group_count = 0; +alt_u8 max_mac_system = MAXNETS; + +/******************************* + * + * Public API for TSE Driver + * + *******************************/ + +/* @Function Description: Perform a software Reset. Reset operation will ocur with some latency. + * 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) +{ + alt_32 timeout; + alt_32 cc; + + cc = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac); + + // 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)); + + + // 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; + while( (IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac) & ALTERA_TSEMAC_CMD_SW_RESET_MSK) != 0 && timeout < ALTERA_TSE_SW_RESET_TIME_OUT_CNT) timeout++; + + IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac,cc); // Restore + return SUCCESS; +} + + + +/* @Function Description: Perform switching of the TSE MAC into MII (10/100) mode. + * 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) +{ + alt_32 helpvar; + + helpvar = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac); + helpvar &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + + IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac,helpvar); + return SUCCESS; +} + + +/* @Function Description: Perform switching of the TSE MAC into GMII (Gigabit) mode. + * 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) +{ + alt_32 helpvar; + + helpvar = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac); + helpvar |= ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + + IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac,helpvar); + return SUCCESS; +} + + + +/* @Function Description - Add additional PHYs which are not supported by default into PHY profile for PHY detection and auto negotiation + * + * @API TYPE - Public + * @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) +{ + alt_32 i; + + /* search PHY profile for same ID */ + for(i = 0; i < phy_profile_count; i++) + { + if(pphy_profiles[i]->oui == phy->oui && pphy_profiles[i]->model_number == phy->model_number) + { + 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); + tse_dprintf(4, "In case of same PHY OUI and PHY Model Number in profile, first added PHY setting will be used\n"); + } + } + + /* Allocate memory space to store the profile */ + pphy_profiles[phy_profile_count] = (alt_tse_phy_profile *) malloc(sizeof(alt_tse_phy_profile)); + if(!pphy_profiles[phy_profile_count]) { + tse_dprintf(1, "ERROR : Unable to allocate memory for pphy_profile[%d]\n", phy_profile_count); + return ALTERA_TSE_MALLOC_FAILED; + } + + /* Store PHY information */ + *pphy_profiles[phy_profile_count] = *phy; + strcpy(pphy_profiles[phy_profile_count]->name, phy->name); + + phy_profile_count++; + + return phy_profile_count - 1; +} + +/* @Function Description - Add TSE System to tse_mac_device[] array to customize TSE System + * + * @API TYPE - Public + * @param psys_mac pointer to alt_tse_system_mac structure describing MAC of the system + * @param psys_msgdma pointer to alt_tse_system_msgdma structure describing MSGDMA of the system + * @param psys_mem pointer to alt_tse_system_desc_mem structure describing Descriptor Memory of the system + * @param psys_phy pointer to alt_tse_system_phy structure describing PHY of the system + * @return SUCCESS on success + * ALTERA_TSE_MALLOC_FAILED if memory allocation failed + * ALTERA_TSE_SYSTEM_DEF_ERROR if definition of system incorrect or pointer == NULL + */ +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 ) { + + int i; + int loop_end; + + alt_tse_system_mac *pmac = psys_mac; + alt_tse_system_msgdma *pmsgdma = psys_msgdma; + alt_tse_system_desc_mem *pmem = psys_mem; + alt_tse_system_shared_fifo *pfifo = psys_shared_fifo; + alt_tse_system_phy *pphy = psys_phy; + + 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) { + loop_end = 1; + } + else if(pmac->tse_num_of_channel > 0) { + loop_end = pmac->tse_num_of_channel; + } + else { + tse_dprintf(2, "ERROR : Invalid number of channel specified!\n"); + return ALTERA_TSE_SYSTEM_DEF_ERROR; + } + + for(i = 0; i < loop_end; i++) { + + /* Make sure the boundary of array is not exceeded */ + if(tse_system_count >= MAXNETS) { + tse_dprintf(2, "ERROR : Number of TSE System added exceed the size of array!\n"); + tse_dprintf(2, "ERROR : Size of array = %d, Number of TSE System = %d\n", MAXNETS, tse_system_count); + } + + /* Add MAC info to alt_tse_system_info structure */ + if(pmac == 0) { + tse_dprintf(2, "ERROR : MAC system structure == NULL\n"); + tse_dprintf(2, "ERROR : Please pass in correct pointer to alt_tse_system_add_sys()\n"); + return ALTERA_TSE_SYSTEM_DEF_ERROR; + } + + tse_mac_device[tse_system_count].tse_mac_base = pmac->tse_mac_base + (i * 0x400); + tse_mac_device[tse_system_count].tse_tx_depth = pmac->tse_tx_depth; + tse_mac_device[tse_system_count].tse_rx_depth = pmac->tse_rx_depth; + tse_mac_device[tse_system_count].tse_use_mdio = pmac->tse_use_mdio; + tse_mac_device[tse_system_count].tse_en_maclite = pmac->tse_en_maclite; + tse_mac_device[tse_system_count].tse_maclite_gige = pmac->tse_maclite_gige; + tse_mac_device[tse_system_count].tse_multichannel_mac = pmac->tse_multichannel_mac; + tse_mac_device[tse_system_count].tse_num_of_channel = pmac->tse_num_of_channel; + tse_mac_device[tse_system_count].tse_mdio_shared = pmac->tse_mdio_shared; + tse_mac_device[tse_system_count].tse_number_of_mac_mdio_shared = pmac->tse_number_of_mac_mdio_shared; + tse_mac_device[tse_system_count].tse_pcs_ena = pmac->tse_pcs_ena; + tse_mac_device[tse_system_count].tse_pcs_sgmii = pmac->tse_pcs_sgmii; + + /* Add MSGDMA info to alt_tse_system_info structure */ + if(pmsgdma == 0) { + tse_dprintf(2, "ERROR : MSGDMA system structure == NULL\n"); + tse_dprintf(2, "ERROR : Please pass in correct pointer to alt_tse_system_add_sys() for tse_mac_device[%d]\n", tse_system_count); + return ALTERA_TSE_SYSTEM_DEF_ERROR; + } + + tse_mac_device[tse_system_count].tse_msgdma_tx = (char *) malloc(strlen(pmsgdma->tse_msgdma_tx) + 1); + if(!tse_mac_device[tse_system_count].tse_msgdma_tx) { + tse_dprintf(1, "ERROR : Unable to allocate memory for tse_mac_device[%d].tse_msgdma_tx\n", tse_system_count); + return ALTERA_TSE_MALLOC_FAILED; + } + strcpy(tse_mac_device[tse_system_count].tse_msgdma_tx, pmsgdma->tse_msgdma_tx); + + tse_mac_device[tse_system_count].tse_msgdma_rx = (char *) malloc(strlen(pmsgdma->tse_msgdma_rx) + 1); + if(!tse_mac_device[tse_system_count].tse_msgdma_rx) { + tse_dprintf(1, "ERROR : Unable to allocate memory for tse_mac_device[%d].tse_msgdma_rx\n", tse_system_count); + return ALTERA_TSE_MALLOC_FAILED; + } + strcpy(tse_mac_device[tse_system_count].tse_msgdma_rx, pmsgdma->tse_msgdma_rx); + + tse_mac_device[tse_system_count].tse_msgdma_rx_irq = pmsgdma->tse_msgdma_rx_irq; + + /* Add descriptor memory info to alt_tse_system_info structure */ + if(pmem == 0) { + tse_mac_device[tse_system_count].ext_desc_mem = TSE_INT_DESC_MEM; + tse_mac_device[tse_system_count].desc_mem_base = TSE_INT_DESC_MEM; + } + else { + tse_mac_device[tse_system_count].ext_desc_mem = pmem->ext_desc_mem; + tse_mac_device[tse_system_count].desc_mem_base = pmem->desc_mem_base; + } + + /* Add shared fifo info to alt_tse_system_info structure */ + if(pfifo == 0) { + tse_mac_device[tse_system_count].use_shared_fifo = TSE_NO_SHARED_FIFO; + tse_mac_device[tse_system_count].tse_shared_fifo_tx_ctrl_base = TSE_NO_SHARED_FIFO; + tse_mac_device[tse_system_count].tse_shared_fifo_tx_stat_base = TSE_NO_SHARED_FIFO; + tse_mac_device[tse_system_count].tse_shared_fifo_tx_depth = TSE_NO_SHARED_FIFO; + + tse_mac_device[tse_system_count].tse_shared_fifo_rx_ctrl_base = TSE_NO_SHARED_FIFO; + tse_mac_device[tse_system_count].tse_shared_fifo_rx_stat_base = TSE_NO_SHARED_FIFO; + tse_mac_device[tse_system_count].tse_shared_fifo_rx_depth = TSE_NO_SHARED_FIFO; + } + else { + tse_mac_device[tse_system_count].use_shared_fifo = pfifo->use_shared_fifo; + tse_mac_device[tse_system_count].tse_shared_fifo_tx_ctrl_base = pfifo->tse_shared_fifo_tx_ctrl_base; + tse_mac_device[tse_system_count].tse_shared_fifo_tx_stat_base = pfifo->tse_shared_fifo_tx_stat_base; + tse_mac_device[tse_system_count].tse_shared_fifo_tx_depth = pfifo->tse_shared_fifo_tx_depth; + + tse_mac_device[tse_system_count].tse_shared_fifo_rx_ctrl_base = pfifo->tse_shared_fifo_rx_ctrl_base; + tse_mac_device[tse_system_count].tse_shared_fifo_rx_stat_base = pfifo->tse_shared_fifo_rx_stat_base; + tse_mac_device[tse_system_count].tse_shared_fifo_rx_depth = pfifo->tse_shared_fifo_rx_depth; + } + + /* Add PHY info to alt_tse_system_info structure */ + if(pphy == 0) { + tse_mac_device[tse_system_count].tse_phy_mdio_address = TSE_PHY_AUTO_ADDRESS; + tse_mac_device[tse_system_count].tse_phy_cfg = 0; + } + else { + tse_mac_device[tse_system_count].tse_phy_mdio_address = pphy->tse_phy_mdio_address; + tse_mac_device[tse_system_count].tse_phy_cfg = pphy->tse_phy_cfg; + } + + /* Point to next structure */ + pmsgdma++; + if(pmem) pmem++; + if(pfifo) pfifo++; + if(pphy) pphy++; + + tse_system_count++; + max_mac_system = tse_system_count; + } + + return SUCCESS; + +} + +/* @Function Description - Enable MDIO sharing for multiple single channel MAC + * + * @API TYPE - Public + * @param psys_mac_list pointer to array of alt_tse_system_mac structure sharing MDIO block + * @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) { + alt_32 i; + alt_32 j; + + alt_tse_system_mac *psys_mac; + + for(i = 0; i < number_of_mac; i++) { + psys_mac = psys_mac_list[i]; + + if(psys_mac == 0) { + tse_dprintf(2, "ERROR : MAC system structure == NULL\n"); + tse_dprintf(2, "ERROR : Please pass in correct pointer to alt_tse_sys_enable_mdio_sharing()\n"); + return ALTERA_TSE_SYSTEM_DEF_ERROR; + } + + for(j = 0; j < max_mac_system; j++) { + + if(psys_mac->tse_mac_base == tse_mac_device[j].tse_mac_base) { + if(tse_mac_device[j].tse_multichannel_mac) { + tse_dprintf(2, "ERROR : MDIO sharing supported by default for Multi-channel MAC\n"); + tse_dprintf(2, "ERROR : Do not include Multi-channel MAC in the MAC List\n"); + return ALTERA_TSE_SYSTEM_DEF_ERROR; + } + + tse_mac_device[j].tse_mdio_shared = 1; + tse_mac_device[j].tse_number_of_mac_mdio_shared = number_of_mac; + } + } + } + + return SUCCESS; +} + +/* @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) { + alt_tse_mac_group *pmac_group = alt_tse_get_mac_info(pmac)->pmac_group; + return alt_tse_phy_get_common_speed(pmac_group); +} + +/* @Function Description: Set the common speed to all PHYs connected to the MAC within the same group + * @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) { + alt_tse_mac_group *pmac_group = alt_tse_get_mac_info(pmac)->pmac_group; + return alt_tse_phy_set_common_speed(pmac_group, common_speed); +} + + +/******************************** + * + * Internal API for TSE Driver + * + *******************************/ + +/* @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) { + alt_32 i; + + for(i = 0; i < max_mac_system; i++) { + if(psys_info == &tse_mac_device[i]) { + return i; + } + } + return ALTERA_TSE_NO_INDEX_FOUND; +} + +/* @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) { + alt_32 i; + + for(i = 0; i < mac_group_count; i++) { + if(pmac_group == pmac_groups[i]) { + return i; + } + } + return ALTERA_TSE_NO_INDEX_FOUND; +} + + +/* @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) { + alt_32 i; + + for(i = 0; i < pmac_info->pmac_group->channel; i++) { + if(pmac_info == pmac_info->pmac_group->pmac_info[i]) { + return i; + } + } + + return ALTERA_TSE_NO_INDEX_FOUND; +} + +/* @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) { + alt_32 i; + alt_32 j; + alt_tse_mac_group *pmac_group = 0; + alt_tse_mac_info *pmac_info = 0; + + for(i = 0; i < mac_group_count; i++) { + pmac_group = pmac_groups[i]; + for(j = 0; j < pmac_group->channel; j++) { + pmac_info = pmac_group->pmac_info[j]; + if(((np_tse_mac *) pmac_info->psys_info->tse_mac_base) == pmac) { + return pmac_info; + } + } + } + + return 0; +} + +/* @Function Description: Perform switching of the TSE MAC speed. + * COMMAND_CONFIG register is restored after reset. + * @API Type: Internal + * @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) +{ + alt_32 helpvar; + + helpvar = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac); + + /* 1000 Mbps */ + if(speed == TSE_PHY_SPEED_1000) { + helpvar |= ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + helpvar &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK; + } + /* 100 Mbps */ + else if(speed == TSE_PHY_SPEED_100) { + helpvar &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + helpvar &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK; + } + /* 10 Mbps */ + else if(speed == TSE_PHY_SPEED_10) { + helpvar &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + helpvar |= ALTERA_TSEMAC_CMD_ENA_10_MSK; + } + else { + return ENP_PARAM; + } + + IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac, helpvar); + return SUCCESS; +} + +/* @Function Description: Perform switching of the TSE MAC duplex mode. + * COMMAND_CONFIG register is restored after reset. + * @API Type: Internal + * @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) +{ + alt_32 helpvar; + + helpvar = IORD_ALTERA_TSEMAC_CMD_CONFIG(pmac); + + /* Half Duplex */ + if(duplex == TSE_PHY_DUPLEX_HALF) { + helpvar |= ALTERA_TSEMAC_CMD_HD_ENA_MSK; + } + /* Full Duplex */ + else if(duplex == TSE_PHY_DUPLEX_FULL) { + helpvar &= ~ALTERA_TSEMAC_CMD_HD_ENA_MSK; + } + else { + return ENP_PARAM; + } + + IOWR_ALTERA_TSEMAC_CMD_CONFIG(pmac, helpvar); + return SUCCESS; + +} + + + +/** @Function Description - Determine link speed our PHY negotiated with our link partner. + * This is fully vendor specific depending on the PHY you are using. + * + * @API TYPE - Internal + * @param tse.mi.base MAC register map. + * @return + * ---------------------------------------------------------------------------------- + * | BIT | Value: Description | + * ---------------------------------------------------------------------------------- + * | 31-23 | Reserved | + * | 23 | 1: Argument *pmac not found from the list of MAC detected during init | + * | 22 | 1: No MDIO used by the MAC | + * | 21 | 1: No PHY detected | + * | 20 | 1: No common speed found for Multi-port MAC | + * | 19 | 1: PHY auto-negotiation not completed | + * | 18 | 1: No PHY profile match the detected PHY | + * | 17 | 1: PHY Profile not defined correctly | + * | 16 | 1: Invalid speed read from PHY | + * | 4-15 | Reserved | + * | 3 | 1: 10 Mbps link | + * | 2 | 1: 100 Mbps link | + * | 1 | 1: 1000 Mbps link | + * | 0 | 1: Full Duplex 0: Half Duplex | + * ---------------------------------------------------------------------------------- + * + * If the link speed cannot be determined, it is fall back to 100 Mbps (customizable by changing ALTERA_TSE_MAC_SPEED_DEFAULT) + * Full duplex (customizable by changing ALTERA_TSE_DUPLEX_MODE_DEFAULT) + */ + +#define ALT_TSE_SPEED_DUPLEX(speed, duplex) ((duplex & 0x01) |\ + (((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) { + + alt_u8 speed = ALTERA_TSE_MAC_SPEED_DEFAULT; + alt_u8 duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT; /* 1 = full ; 0 = half*/ + alt_32 result = ALT_TSE_SPEED_DUPLEX(speed, duplex); + + alt_tse_phy_info *pphy = 0; + alt_tse_mac_info *pmac_info = 0; + alt_tse_mac_group *pmac_group = 0; + alt_tse_system_info *psys = 0; + + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = 0; + alt_8 mac_group_index = 0; + + /* initialized PHYs only once */ + static alt_u8 is_init = 0; + if(is_init == 0) { + alt_tse_phy_init(); + is_init = 1; + } + + /* Look for pmac_group and pmac_info structure based on pmac or iface */ + pmac_info = alt_tse_get_mac_info(pmac); + + if(pmac_info == 0) { + speed = ALTERA_TSE_MAC_SPEED_DEFAULT; + duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT; + result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_NO_PMAC_FOUND; + 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" : + 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"); + return result; + } + + pphy = pmac_info->pphy_info; + pmac_group = pmac_info->pmac_group; + psys = pmac_info->psys_info; + + mac_info_index = alt_tse_get_mac_info_index(pmac_info); + mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* MDIO is not used */ + if (pmac_group->pmac_info[0]->psys_info->tse_use_mdio == 0) + { + speed = ALTERA_TSE_MAC_SPEED_DEFAULT; + duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT; + result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_NO_MDIO; + usleep(ALTERA_NOMDIO_TIMEOUT_THRESHOLD); + if(psys->tse_phy_cfg) { + tse_dprintf(4, "WARNING : PHY[%d.%d] - MDIO not enabled! Running user configuration...\n", mac_group_index, mac_info_index); + result = psys->tse_phy_cfg(pmac); + } + 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" : + speed == TSE_PHY_SPEED_100 ? "100" : + speed == TSE_PHY_SPEED_10 ? "10" : "Unknown", + duplex == 1 ? "Full" : "Half"); + } + return result; + } + + /* 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; + + /* if no PHY connected to the MAC */ + if(pphy == 0) { + speed = ALTERA_TSE_MAC_SPEED_DEFAULT; + duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT; + result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_NO_PHY; + 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" : + speed == TSE_PHY_SPEED_100 ? "100" : + speed == TSE_PHY_SPEED_10 ? "10" : "Unknown", + duplex == 1 ? "Full" : "Half"); + return result; + } + + /* Small MAC */ + if(pmac_info->mac_type == ALTERA_TSE_MACLITE_10_100) { + alt_tse_phy_set_adv_1000(pphy, 0); + alt_tse_phy_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD); + } + else if(pmac_info->mac_type == ALTERA_TSE_MACLITE_1000) { + alt_tse_phy_set_adv_100(pphy, 0); + alt_tse_phy_set_adv_10(pphy, 0); + alt_tse_phy_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD); + } + + /* check link connection for this PHY */ + if(alt_tse_phy_check_link(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD) == TSE_PHY_AN_NOT_COMPLETE) { + speed = ALTERA_TSE_MAC_SPEED_DEFAULT; + duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT; + result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_AN_NOT_COMPLETE; + 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" : + speed == TSE_PHY_SPEED_100 ? "100" : + speed == TSE_PHY_SPEED_10 ? "10" : "Unknown", + duplex == 1 ? "Full" : "Half"); + return result; + } + + IOWR(&pmac_group_base->MDIO_ADDR1, 0, pphy->mdio_address); + + /* 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 + #endif + + /* if PHY not found in profile */ + if(pphy->pphy_profile == 0) { + tse_dprintf(3, "WARNING : PHY[%d.%d] - PHY not found in PHY profile\n", mac_group_index, mac_info_index); + speed = ALTERA_TSE_MAC_SPEED_DEFAULT; + duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT; + result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_NO_PHY_PROFILE; + } + // retrieve duplex information from PHY + else + { + if(pphy->pphy_profile->link_status_read) + { + result = pphy->pphy_profile->link_status_read(pmac_group_base); + speed = (result & 0x02) ? TSE_PHY_SPEED_1000 : + (result & 0x04) ? TSE_PHY_SPEED_100 : + (result & 0x08) ? TSE_PHY_SPEED_10 : TSE_PHY_SPEED_INVALID; + duplex = (result & 0x01) ? TSE_PHY_DUPLEX_FULL : TSE_PHY_DUPLEX_HALF; + + if(result & ALT_TSE_E_INVALID_SPEED) + { + tse_dprintf(3, "WARNING : PHY[%d.%d] - Invalid speed read from PHY\n", mac_group_index, mac_info_index); + } + } + else if(pphy->pphy_profile->status_reg_location == 0) + { + tse_dprintf(3, "WARNING : PHY[%d.%d] - PHY Specific Status register information not provided in profile\n", mac_group_index, mac_info_index); + speed = ALTERA_TSE_MAC_SPEED_DEFAULT; + duplex = ALTERA_TSE_DUPLEX_MODE_DEFAULT; + result = ALT_TSE_SPEED_DUPLEX(speed, duplex) | ALT_TSE_E_PROFILE_INCORRECT_DEFINED; + } + 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); + duplex = alt_tse_phy_rd_mdio_reg(pphy, pphy->pphy_profile->status_reg_location, pphy->pphy_profile->duplex_bit_location, 1); + + result = ALT_TSE_SPEED_DUPLEX(speed, duplex); + } + } + + #else + /* 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" : + speed == TSE_PHY_SPEED_100 ? "100" : + speed == TSE_PHY_SPEED_10 ? "10" : "Unknown", + duplex == 1 ? "Full" : "Half"); + + return result; +} + + +/* @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) { + np_tse_mac *pmac_group_base = (np_tse_mac *) pphy->pmac_info->pmac_group->pmac_info[0]->psys_info->tse_mac_base; + return IORD(&pmac_group_base->MDIO_ADDR1, 0); +} + + +/* @Function Description: Write MDIO address to the MDIO address1 register of first MAC within MAC group + * @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) { + np_tse_mac *pmac_group_base = (np_tse_mac *) pphy->pmac_info->pmac_group->pmac_info[0]->psys_info->tse_mac_base; + IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdio_address); + + return SUCCESS; +} + +/** @Function Description - Write value of data with bit_length number of bits to MDIO register based on register location reg_num + * and start from bit location lsb_num. + * + * @API TYPE - Internal + * @param pphy pointer to alt_tse_phy_info structure + * @param reg_num location of MDIO register to be written. + * @param lsb_num least significant bit location of MDIO register to be written. + * @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) +{ + + 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; + + bit_mask = 0x00; + /* 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++) + { + bit_mask <<= 1; + bit_mask |= 0x01; + } + + /* shifting mask to left by bit_num */ + bit_mask <<= lsb_num; + + /* read register data */ + temp_data = IORD(&pmac->mdio1, reg_num); + + /* clear bits to be written */ + temp_data &= ~bit_mask; + + /* OR-ed together corresponding bits data */ + temp_data |= ((data << lsb_num) & bit_mask); + + /* write data to MDIO register */ + IOWR(&pmac->mdio1, reg_num, temp_data); + + return SUCCESS; + +} + + + +/* @Function Description - Read bit_length number of bits from MDIO register based on register location reg_num + * and start from bit location lsb_num. + * + * @API TYPE - Internal + * @param pphy pointer to alt_tse_phy_info structure + * @param reg_num location of MDIO register to be read. + * @param lsb_num least significant bit location of MDIO register to be read. + * @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) +{ + 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; + + bit_mask = 0x00; + /* 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++) + { + bit_mask <<= 1; + bit_mask |= 0x01; + } + + /* read register data */ + temp_data = IORD(&pmac->mdio1, reg_num); + + /* shifting read data */ + temp_data >>= lsb_num; + + return (temp_data & bit_mask); +} + + + +/* @Function Description: Add supported PHY to profile + * @API Type: Internal + * @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() { + + /* supported PHY definition */ + + /* ------------------------------ */ + /* Marvell PHY on PHYWORKX board */ + /* ------------------------------ */ + + alt_tse_phy_profile MV88E1111 = {"Marvell 88E1111", /* Marvell 88E1111 */ + MV88E1111_OUI, /* OUI */ + MV88E1111_MODEL, /* Vender Model Number */ + MV88E1111_REV, /* Model Revision Number */ + 0x11, /* Location of Status Register */ + 14, /* Location of Speed Status */ + 13, /* Location of Duplex Status */ + 10, /* Location of Link Status */ + &marvell_phy_cfg /* Function pointer to configure Marvell PHY */ + }; + + + /* ---------------------------------- */ + /* Marvell Quad PHY on PHYWORKX board */ + /* ---------------------------------- */ + + alt_tse_phy_profile MV88E1145 = {"Marvell Quad PHY 88E1145", /* Marvell 88E1145 */ + MV88E1145_OUI, /* OUI */ + MV88E1145_MODEL, /* Vender Model Number */ + MV88E1145_REV, /* Model Revision Number */ + 0x11, /* Location of Status Register */ + 14, /* Location of Speed Status */ + 13, /* Location of Duplex Status */ + 10, /* Location of Link Status */ + &marvell_phy_cfg /* Function pointer to configure Marvell PHY */ + }; + + /* ------------------------------ */ + /* National PHY on PHYWORKX board */ + /* ------------------------------ */ + + alt_tse_phy_profile DP83865 = {"National DP83865", /* National DP83865 */ + DP83865_OUI, /* OUI */ + DP83865_MODEL, /* Vender Model Number */ + DP83865_REV, /* Model Revision Number */ + 0x11, /* Location of Status Register */ + 3, /* Location of Speed Status */ + 1, /* Location of Duplex Status */ + 2 /* Location of Link Status */ + }; + + /* -------------------------------------- */ + /* National 10/100 PHY on PHYWORKX board */ + /* -------------------------------------- */ + + alt_tse_phy_profile DP83848C = {"National DP83848C", /* National DP83848C */ + DP83848C_OUI, /* OUI */ + DP83848C_MODEL, /* Vender Model Number */ + DP83848C_REV, /* Model Revision Number */ + 0, /* Location of Status Register (ignored) */ + 0, /* Location of Speed Status (ignored) */ + 0, /* Location of Duplex Status (ignored) */ + 0, /* Location of Link Status (ignored) */ + 0, /* No function pointer configure National DP83848C */ + &DP83848C_link_status_read /* Function pointer to read from PHY specific status register */ + }; + + /* -------------------------------------- */ + /* Intel PHY on C10LP EVA board */ + /* -------------------------------------- */ + + alt_tse_phy_profile PEF7071 = {"Intel PEF7071", /* National DP83848C */ + PEF7071_OUI, /* OUI */ + PEF7071_MODEL, /* Vender Model Number */ + PEF7071_REV, /* Model Revision Number */ + 0, /* Location of Status Register */ + 0, /* Location of Speed Status */ + 0, /* Location of Duplex Status */ + 0, /* Location of Link Status */ + &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); + alt_tse_phy_add_profile(&MV88E1145); + alt_tse_phy_add_profile(&DP83865); + alt_tse_phy_add_profile(&DP83848C); + alt_tse_phy_add_profile(&PEF7071); + + + return phy_profile_count; +} + +/* @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() { + + alt_8 i; + /* display PHY in profile */ + tse_dprintf(6, "List of PHY profiles supported (Total profiles = %d)...\n", phy_profile_count); + + for(i = 0; i < phy_profile_count; i++) + { + tse_dprintf(6, "Profile No.%2d :\n", i); + tse_dprintf(6, "PHY Name : %s\n", pphy_profiles[i]->name); + + tse_dprintf(6, "PHY OUI : 0x%06x\n", (int)pphy_profiles[i]->oui); + tse_dprintf(6, "PHY Model Num. : 0x%02x\n", pphy_profiles[i]->model_number); + tse_dprintf(6, "PHY Rev. Num. : 0x%02x\n", pphy_profiles[i]->revision_number); + + tse_dprintf(6, "Status Register : 0x%02x\n", pphy_profiles[i]->status_reg_location); + + tse_dprintf(6, "Speed Bit : %d\n", pphy_profiles[i]->speed_lsb_location); + + tse_dprintf(6, "Duplex Bit : %d\n", pphy_profiles[i]->duplex_bit_location); + + tse_dprintf(6, "Link Bit : %d\n\n", pphy_profiles[i]->link_bit_location); + + } + + return phy_profile_count; +} + + + +/* @Function Description: Store information of all the MAC available in the system + * @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() { + + alt_8 i; + alt_8 j; + + alt_tse_mac_group *pmac_group = 0; + alt_tse_mac_info *pmac_info = 0; + alt_tse_system_info *psys = 0; + + /* reset number of MAC group */ + mac_group_count = 0; + + /* loop through every alt_tse_system_info structure */ + for(i = 0; i < max_mac_system; i++) { + psys = &tse_mac_device[i]; + + if((psys->tse_msgdma_tx != 0) && (psys->tse_msgdma_rx != 0)) { + tse_dprintf(5, "INFO : TSE MAC %d found at address 0x%08x\n", mac_group_count, (int) psys->tse_mac_base); + + /* Allocate memory for the structure */ + pmac_group = (alt_tse_mac_group *) malloc(sizeof(alt_tse_mac_group)); + if(!pmac_group) { + tse_dprintf(1, "ERROR : Unable to allocate memory for MAC Group[%d]\n", mac_group_count); + return ALTERA_TSE_MALLOC_FAILED; + } + + /* Non-multi-channel MAC considered as 1 channel */ + if(psys->tse_multichannel_mac) { + pmac_group->channel = psys->tse_num_of_channel; + tse_dprintf(6, "INFO : Multi Channel = Yes\n"); + tse_dprintf(6, "INFO : Number of channel = %d\n", pmac_group->channel); + tse_dprintf(6, "INFO : MDIO Shared = Yes\n"); + } + else if(psys->tse_mdio_shared) { + pmac_group->channel = psys->tse_number_of_mac_mdio_shared; + tse_dprintf(6, "INFO : Multi Channel = No\n"); + tse_dprintf(6, "INFO : MDIO Shared = Yes\n"); + tse_dprintf(6, "INFO : Number of MAC Share MDIO = %d\n", pmac_group->channel); + } + else { + pmac_group->channel = 1; + tse_dprintf(6, "INFO : Multi Channel = No\n"); + tse_dprintf(6, "INFO : MDIO Shared = No\n"); + } + + for(j = 0; j < pmac_group->channel; j++) { + /* Allocate memory for the structure */ + pmac_info = (alt_tse_mac_info *) malloc(sizeof(alt_tse_mac_info)); + if(!pmac_info) { + tse_dprintf(1, "ERROR : Unable to allocate memory for MAC Group[%d]->pmac_info[%d]\n", mac_group_count, j); + return ALTERA_TSE_MALLOC_FAILED; + } + + pmac_info->pmac_group = pmac_group; + + pmac_info->pphy_info = 0; + + pmac_info->psys_info = &tse_mac_device[i + j]; + + /* 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)){ + tse_dprintf(2, "ERROR : tse_mac_device[%d] does not defined correctly!\n", i + j); + return ALTERA_TSE_SYSTEM_DEF_ERROR; + } + + /* MAC type detection */ + if(pmac_info->psys_info->tse_en_maclite) { + if(pmac_info->psys_info->tse_maclite_gige) { + pmac_info->mac_type = ALTERA_TSE_MACLITE_1000; + } + else { + pmac_info->mac_type = ALTERA_TSE_MACLITE_10_100; + } + } + else { + pmac_info->mac_type = ALTERA_TSE_FULL_MAC; + } + + if((pmac_info->psys_info->tse_mdio_shared) && (!pmac_info->psys_info->tse_multichannel_mac)){ + tse_dprintf(6, "INFO : MAC %2d Address = 0x%08x\n", j, (int) pmac_info->psys_info->tse_mac_base); + tse_dprintf(6, "INFO : MAC %2d Device = tse_mac_device[%d]\n", j, i + j); + + switch(pmac_info->mac_type) { + case ALTERA_TSE_MACLITE_1000: + tse_dprintf(6, "INFO : MAC %2d Type = %s\n", j, "1000 Mbps Small MAC"); + break; + case ALTERA_TSE_MACLITE_10_100: + tse_dprintf(6, "INFO : MAC %2d Type = %s\n", j, "10/100 Mbps Small MAC"); + break; + case ALTERA_TSE_FULL_MAC: + tse_dprintf(6, "INFO : MAC %2d Type = %s\n", j, "10/100/1000 Ethernet MAC"); + break; + default : + tse_dprintf(6, "INFO : MAC %2d Type = %s\n", j, "Unknown"); + break; + } + + if(pmac_info->psys_info->tse_pcs_ena) { + tse_dprintf(6, "INFO : PCS %2d Enable = %s\n", j, pmac_info->psys_info->tse_pcs_ena ? "Yes" : "No"); + tse_dprintf(6, "INFO : PCS %2d SGMII Enable = %s\n", j, pmac_info->psys_info->tse_pcs_sgmii ? "Yes" : "No"); + } + } + else { + /* display only once for all MAC, except shared MDIO MACs */ + if(j == 0) { + switch(pmac_info->mac_type) { + case ALTERA_TSE_MACLITE_1000: + tse_dprintf(6, "INFO : MAC Type = %s\n", "1000 Mbps Small MAC"); + break; + case ALTERA_TSE_MACLITE_10_100: + tse_dprintf(6, "INFO : MAC Type = %s\n", "10/100 Mbps Small MAC"); + break; + case ALTERA_TSE_FULL_MAC: + tse_dprintf(6, "INFO : MAC Type = %s\n", "10/100/1000 Ethernet MAC"); + break; + default : + tse_dprintf(6, "INFO : MAC Type = %s\n", "Unknown"); + break; + } + + if(pmac_info->psys_info->tse_pcs_ena) { + tse_dprintf(6, "INFO : PCS Enable = %s\n", pmac_info->psys_info->tse_pcs_ena ? "Yes" : "No"); + tse_dprintf(6, "INFO : PCS SGMII Enable = %s\n", pmac_info->psys_info->tse_pcs_sgmii ? "Yes" : "No"); + } + } + + if(pmac_info->psys_info->tse_multichannel_mac) { + tse_dprintf(6, "INFO : Channel %2d Address = 0x%08x\n", j, (int) pmac_info->psys_info->tse_mac_base); + tse_dprintf(6, "INFO : Channel %2d Device = tse_mac_device[%d]\n", j, i + j); + } + else { + tse_dprintf(6, "INFO : MAC Address = 0x%08x\n", (int) pmac_info->psys_info->tse_mac_base); + tse_dprintf(6, "INFO : MAC Device = tse_mac_device[%d]\n", i + j); + } + } + + /* store the pointer in MAC group variable for the detected channel */ + pmac_group->pmac_info[j] = pmac_info; + } + + /* store the pointer in global variable */ + pmac_groups[mac_group_count] = pmac_group; + + mac_group_count++; + + /* skip for subsequent Multi-channel MAC */ + i += (pmac_group->channel - 1); + + } + } + return SUCCESS; +} + + +/* @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) { + + alt_32 phyid; + alt_32 phyid2 = 0; + alt_u8 phyadd; + + alt_u32 oui; + alt_u8 model_number; + alt_u8 revision_number; + + alt_32 i; + + alt_u8 is_phy_in_profile; + alt_32 return_value = 0; + + alt_8 phy_info_count = 0; + + alt_tse_phy_info *pphy = 0; + alt_tse_mac_info *pmac_info = 0; + alt_tse_system_info *psys = 0; + + np_tse_mac *pmac_group_base = (np_tse_mac *) pmac_group->pmac_info[0]->psys_info->tse_mac_base; + + /* Record previous MDIO address, to be restored at the end of function */ + alt_32 mdioadd_prev = IORD(&pmac_group_base->MDIO_ADDR1, 0); + + /* get index of the pointers in pointer array list */ + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* 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 + { + IOWR(&pmac_group_base->MDIO_ADDR1, 0, phyadd); + phyid = IORD(&pmac_group_base->mdio1.PHY_ID1,0); // read PHY ID + phyid2 = IORD(&pmac_group_base->mdio1.PHY_ID2,0); // read PHY ID + + /* PHY found */ + if (phyid != phyid2) + { + pphy = (alt_tse_phy_info *) malloc(sizeof(alt_tse_phy_info)); + if(!pphy) { + tse_dprintf(1, "ERROR : Unable to allocate memory for phy_info[%d.%d]\n", mac_group_index, phy_info_count); + return ALTERA_TSE_MALLOC_FAILED; + } + + /* store PHY address */ + pphy->mdio_address = phyadd; + + /* get oui, model number, and revision number from PHYID and PHYID2 */ + oui = (phyid << 6) | ((phyid2 >> 10) & 0x3f); + model_number = (phyid2 >> 4) & 0x3f; + revision_number = phyid2 & 0x0f; + + /* map the PHY with PHY in profile */ + is_phy_in_profile = 0; + for(i = 0; i < phy_profile_count; i++) { + + /* if PHY match with PHY in profile */ + if((pphy_profiles[i]->oui == oui) && (pphy_profiles[i]->model_number == model_number)) + { + pphy->pphy_profile = pphy_profiles[i]; + + /* 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); + is_phy_in_profile = 1; + break; + } + } + /* PHY not found in PHY profile */ + if(is_phy_in_profile == 0) { + pphy->pphy_profile = 0; + tse_dprintf(3, "WARNING : Unknown PHY found at PHY address 0x%02x of MAC Group[%d]\n", phyadd, mac_group_index); + tse_dprintf(3, "WARNING : Please add PHY information to PHY profile\n"); + return_value++; + } + + tse_dprintf(6, "INFO : PHY OUI = 0x%06x\n", (int) oui); + tse_dprintf(6, "INFO : PHY Model Number = 0x%02x\n", model_number); + tse_dprintf(6, "INFO : PHY Revision Number = 0x%01x\n", revision_number); + + /* map the detected PHY to connected MAC */ + if(alt_tse_mac_associate_phy(pmac_group, pphy) == TSE_PHY_MAP_SUCCESS) { + + pmac_info = pphy->pmac_info; + psys = pmac_info->psys_info; + + /* 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 + + /* Reset auto-negotiation advertisement */ + alt_tse_phy_set_adv_1000(pphy, 1); + alt_tse_phy_set_adv_100(pphy, 1); + alt_tse_phy_set_adv_10(pphy, 1); + + /* check link connection for this PHY */ + alt_tse_phy_restart_an(pphy, ALTERA_CHECKLINK_TIMEOUT_THRESHOLD); + + /* Perform additional setting if there is any */ + /* Profile specific */ + if(pphy->pphy_profile) { + if(pphy->pphy_profile->phy_cfg) { + tse_dprintf(6, "INFO : Applying additional PHY configuration of %s\n", pphy->pphy_profile->name); + pphy->pphy_profile->phy_cfg(pmac_group_base); + } + } + + /* Initialize PHY, call user's function pointer in alt_tse_system_info structure */ + /* Individual PHY specific */ + if(psys->tse_phy_cfg) { + tse_dprintf(6, "INFO : Applying additional user PHY configuration\n"); + psys->tse_phy_cfg(pmac_group_base); + } + } + + tse_dprintf(6, "\n"); + + phy_info_count++; + } + } + + TK_SLEEP(100); //Wait a little bit for PHY reset after specific configuration + + + /* check to verify the number of connected PHY match the number of channel */ + if(pmac_group->channel != phy_info_count) { + if(phy_info_count == 0) { + tse_dprintf(2, "ERROR : MAC Group[%d] - No PHY connected!\n", mac_group_index); + } + 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); + } + } + + /* Restore previous MDIO address */ + IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdioadd_prev); + + return return_value; +} + + + + +/* @Function Description: Associate the PHYs connected to the structure in alt_tse_system_info.h + * @API Type: Internal + * @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) { + + alt_32 i; + alt_32 return_value = TSE_PHY_MAP_SUCCESS; + + alt_u8 is_mapped; + + alt_tse_system_info *psys = 0; + alt_tse_mac_info *pmac_info = 0; + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = 0; + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + alt_8 sys_info_index = 0; + + is_mapped = 0; + + for(i = 0; i < pmac_group->channel; i++) { + pmac_info = pmac_group->pmac_info[i]; + psys = pmac_info->psys_info; + + /* map according to the PHY address in alt_tse_system_info.h */ + if(psys->tse_phy_mdio_address == pphy->mdio_address) { + mac_info_index = alt_tse_get_mac_info_index(pmac_info); + sys_info_index = alt_tse_get_system_index(psys); + + pmac_info->pphy_info = pphy; + pphy->pmac_info = pmac_info; + tse_dprintf(5, "INFO : PHY[%d.%d] - Explicitly mapped to tse_mac_device[%d]\n", mac_group_index, mac_info_index, sys_info_index); + is_mapped = 1; + break; + } + } + + /* 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) { + for(i = 0; i < pmac_group->channel; i++) { + pmac_info = pmac_group->pmac_info[i]; + psys = pmac_info->psys_info; + + /* alt_tse_system_info structure definition error */ + if((psys->tse_msgdma_tx == 0) || (psys->tse_msgdma_rx == 0)){ + continue; + } + + if(psys->tse_phy_mdio_address == TSE_PHY_AUTO_ADDRESS) { + mac_info_index = alt_tse_get_mac_info_index(pmac_info); + sys_info_index = alt_tse_get_system_index(psys); + + pmac_info->pphy_info = pphy; + pphy->pmac_info = pmac_info; + psys->tse_phy_mdio_address = pphy->mdio_address; + tse_dprintf(5, "INFO : PHY[%d.%d] - Automatically mapped to tse_mac_device[%d]\n", mac_group_index, mac_info_index, sys_info_index); + is_mapped = 1; + break; + } + } + } + + /* Still cannot find any matched MAC-PHY */ + if(is_mapped == 0) { + pphy->pmac_info = 0; + 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); + return_value = TSE_PHY_MAP_ERROR; + } + + return return_value; +} + + + + +/* @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) { + + alt_tse_system_info *psys = pmac_info->psys_info; + np_tse_mac *pmac = (np_tse_mac *) psys->tse_mac_base; + alt_tse_mac_group *pmac_group = pmac_info->pmac_group; + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info); + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + if(psys->tse_pcs_ena) { + tse_dprintf(5, "INFO : PCS[%d.%d] - Configuring PCS operating mode\n", mac_group_index, mac_info_index); + + alt_32 data = IORD(&pmac->mdio0.CONTROL, ALTERA_TSE_PCS_IF_MODE); + + if(psys->tse_pcs_sgmii) { + tse_dprintf(5, "INFO : PCS[%d.%d] - PCS SGMII mode enabled\n", mac_group_index, mac_info_index); + IOWR(&pmac->mdio0.CONTROL, ALTERA_TSE_PCS_IF_MODE, data | 0x03); + } + else { + tse_dprintf(5, "INFO : PCS[%d.%d] - PCS SGMII mode disabled\n", mac_group_index, mac_info_index); + IOWR(&pmac->mdio0.CONTROL, ALTERA_TSE_PCS_IF_MODE, data & ~0x03); + } + } + + return SUCCESS; +} + + + +/* @Function Description: Detect and initialize all the PHYs connected + * @API Type: Internal + * @param pmac N/A + * @return SUCCESS + */ +alt_32 alt_tse_phy_init() { + alt_8 i = 0; + alt_8 j = 0; + + alt_tse_mac_group *pmac_group = 0; + alt_tse_mac_info *pmac_info = 0; + + /* add supported PHYs */ + alt_tse_phy_add_profile_default(); + + /* display PHY in profile */ + alt_tse_phy_print_profile(); + + 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++) { + pmac_group = pmac_groups[i]; + + if(pmac_group->pmac_info[0]->psys_info->tse_use_mdio) { + + /* get connected PHYs */ + alt_tse_mac_get_phy(pmac_group); + } + else { + tse_dprintf(3, "WARNING : MAC Groups[%d]->pmac_info[%d] MDIO is not used, unable to run PHY detection\n", i, j); + } + + /* Configure PCS mode if MAC+PCS system is used */ + for(j = 0; j < pmac_group->channel; j++) { + pmac_info = pmac_group->pmac_info[j]; + + alt_tse_phy_cfg_pcs(pmac_info); + } + } + + return SUCCESS; +} + + +/* @Function Description: Restart Auto-Negotiation for the PHY + * @API Type: Internal + * @param pphy Pointer to the alt_tse_phy_info structure + * 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) { + + /* pointer to MAC associated and MAC group */ + alt_tse_mac_info *pmac_info = pphy->pmac_info; + alt_tse_mac_group *pmac_group = pmac_info->pmac_group; + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info); + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* Record previous MDIO address, to be restored at the end of function */ + alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy); + + /* write PHY address to MDIO to access the i-th PHY */ + alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address); + + if(!alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_ABILITY, 1)) { + tse_dprintf(3, "WARNING : PHY[%d.%d] - PHY not capable for Auto-Negotiation\n", mac_group_index, mac_info_index); + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return TSE_PHY_AN_NOT_CAPABLE; + } + + /* enable Auto-Negotiation */ + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_AN_ENA, 1, 1); + + /* send PHY reset command */ + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_RESTART_AN, 1, 1); + tse_dprintf(5, "INFO : PHY[%d.%d] - Restart Auto-Negotiation, checking PHY link...\n", mac_group_index, mac_info_index); + + alt_32 timeout = 0; + while(alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1) == 0 ){ + if(timeout++ > timeout_threshold) { + tse_dprintf(4, "WARNING : PHY[%d.%d] - Auto-Negotiation FAILED\n", mac_group_index, mac_info_index); + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return TSE_PHY_AN_NOT_COMPLETE; + } + usleep(1000); + } + tse_dprintf(5, "INFO : PHY[%d.%d] - Auto-Negotiation PASSED\n", mac_group_index, mac_info_index); + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return TSE_PHY_AN_COMPLETE; +} + + +/* @Function Description: Check link status of PHY and start Auto-Negotiation if it has not yet done + * @API Type: Internal + * @param pphy Pointer to the alt_tse_phy_info structure + * 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) +{ + alt_32 timeout=0; + + /* pointer to MAC associated and MAC group */ + alt_tse_mac_info *pmac_info = pphy->pmac_info; + alt_tse_mac_group *pmac_group = pmac_info->pmac_group; + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info); + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* Record previous MDIO address, to be restored at the end of function */ + alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy); + + /* write PHY address to MDIO to access the i-th PHY */ + alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address); + + /* if Auto-Negotiation not complete yet, then restart Auto-Negotiation */ + /* 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); + while( ((alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_LOOPBACK, 1)) != 0) || + ((alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1)) == 0) ) + { + if (timeout++ > timeout_threshold) + { + tse_dprintf(5, "INFO : PHY[%d.%d] - Link not yet established, restart auto-negotiation...\n", mac_group_index, mac_info_index); + /* 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) + { + tse_dprintf(3, "WARNING : PHY[%d.%d] - Link could not established\n", mac_group_index, mac_info_index); + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return TSE_PHY_AN_NOT_COMPLETE; + } + } + usleep(1000); + } + tse_dprintf(5, "INFO : PHY[%d.%d] - Link established\n", mac_group_index, mac_info_index); + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return TSE_PHY_AN_COMPLETE; +} + +/* @Function Description: Get link capability of PHY and link partner + * @API Type: Internal + * @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) { + alt_32 return_value = TSE_PHY_AN_COMPLETE; + + /* pointer to MAC associated and MAC group */ + alt_tse_mac_info *pmac_info = pphy->pmac_info; + alt_tse_mac_group *pmac_group = pmac_info->pmac_group; + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info); + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* Record previous MDIO address, to be restored at the end of function */ + alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy); + + /* write PHY address to MDIO to access the i-th PHY */ + alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address); + + if(!alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_ABILITY, 1)) { + tse_dprintf(3, "WARNING : PHY[%d.%d] - PHY not capable for Auto-Negotiation\n", mac_group_index, mac_info_index); + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return TSE_PHY_AN_NOT_CAPABLE; + } + + /* check whether link has been established */ + alt_tse_phy_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD); + + if(alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_AN_COMPLETE, 1) == 0) { + return_value = TSE_PHY_AN_NOT_COMPLETE; + } + + /* 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); + 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); + 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); + 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); + + 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); + 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); + 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); + 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); + 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); + 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); + 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); + + /* 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); + 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); + + 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); + 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); + 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); + 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); + 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); + + tse_dprintf(6, "INFO : PHY[%d.%d] - Capability of PHY :\n", mac_group_index, mac_info_index); + tse_dprintf(6, "INFO : 1000 Base-X Full Duplex = %d\n", pphy->link_capability.cap_1000_base_x_full); + tse_dprintf(6, "INFO : 1000 Base-X Half Duplex = %d\n", pphy->link_capability.cap_1000_base_x_half); + tse_dprintf(6, "INFO : 1000 Base-T Full Duplex = %d\n", pphy->link_capability.cap_1000_base_t_full); + tse_dprintf(6, "INFO : 1000 Base-T Half Duplex = %d\n", pphy->link_capability.cap_1000_base_t_half); + tse_dprintf(6, "INFO : 100 Base-T4 = %d\n", pphy->link_capability.cap_100_base_t4); + tse_dprintf(6, "INFO : 100 Base-X Full Duplex = %d\n", pphy->link_capability.cap_100_base_x_full); + tse_dprintf(6, "INFO : 100 Base-X Half Duplex = %d\n", pphy->link_capability.cap_100_base_x_half); + tse_dprintf(6, "INFO : 100 Base-T2 Full Duplex = %d\n", pphy->link_capability.cap_100_base_t2_full); + tse_dprintf(6, "INFO : 100 Base-T2 Half Duplex = %d\n", pphy->link_capability.cap_100_base_t2_half); + tse_dprintf(6, "INFO : 10 Base-T Full Duplex = %d\n", pphy->link_capability.cap_10_base_t_full); + tse_dprintf(6, "INFO : 10 Base-T Half Duplex = %d\n", pphy->link_capability.cap_10_base_t_half); + tse_dprintf(6, "\n"); + + tse_dprintf(6, "INFO : PHY[%d.%d] - Link Partner Capability :\n", mac_group_index, mac_info_index); + tse_dprintf(6, "INFO : 1000 Base-T Full Duplex = %d\n", pphy->link_capability.lp_1000_base_t_full); + tse_dprintf(6, "INFO : 1000 Base-T Half Duplex = %d\n", pphy->link_capability.lp_1000_base_t_half); + tse_dprintf(6, "INFO : 100 Base-T4 = %d\n", pphy->link_capability.lp_100_base_t4); + tse_dprintf(6, "INFO : 100 Base-TX Full Duplex = %d\n", pphy->link_capability.lp_100_base_tx_full); + tse_dprintf(6, "INFO : 100 Base-TX Half Duplex = %d\n", pphy->link_capability.lp_100_base_tx_half); + tse_dprintf(6, "INFO : 10 Base-TX Full Duplex = %d\n", pphy->link_capability.lp_10_base_tx_full); + tse_dprintf(6, "INFO : 10 Base-TX Half Duplex = %d\n", pphy->link_capability.lp_10_base_tx_half); + tse_dprintf(6, "\n"); + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return return_value; + +} + + +/* @Function Description: Set the advertisement of PHY for 1000 Mbps + * @API Type: Internal + * @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) { + alt_u8 cap; + + /* pointer to MAC associated and MAC group */ + alt_tse_mac_info *pmac_info = pphy->pmac_info; + alt_tse_mac_group *pmac_group = pmac_info->pmac_group; + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info); + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* Record previous MDIO address, to be restored at the end of function */ + alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy); + + /* write PHY address to MDIO to access the i-th PHY */ + alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address); + + /* if enable = 1, set advertisement based on PHY capability */ + if(enable) { + cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_EXT_STATUS, TSE_PHY_MDIO_EXT_STATUS_1000BASE_T_FULL, 1); + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_1000BASE_T_CTRL, TSE_PHY_MDIO_1000BASE_T_CTRL_FULL_ADV, 1, cap); + 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); + + /* 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); + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_1000BASE_T_CTRL, TSE_PHY_MDIO_1000BASE_T_CTRL_HALF_ADV, 1, cap); + 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); + } + /* 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); + 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); + + /* 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); + tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement 1000 Base-T half Duplex set to %d\n", mac_group_index, mac_info_index, 0); + } + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return SUCCESS; +} + + +/* @Function Description: Set the advertisement of PHY for 100 Mbps + * @API Type: Internal + * @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) { + alt_u8 cap; + + /* pointer to MAC associated and MAC group */ + alt_tse_mac_info *pmac_info = pphy->pmac_info; + alt_tse_mac_group *pmac_group = pmac_info->pmac_group; + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = alt_tse_get_mac_info_index(pmac_info); + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* Record previous MDIO address, to be restored at the end of function */ + alt_u8 mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy); + + /* write PHY address to MDIO to access the i-th PHY */ + alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address); + + /* if enable = 1, set advertisement based on PHY capability */ + if(enable) { + cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_T4, 1); + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_T4, 1, cap); + tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 100 Base-T4 set to %d\n", mac_group_index, mac_info_index, cap); + + cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_X_FULL, 1); + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_TX_FULL, 1, cap); + 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); + + cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_100BASE_X_HALF, 1); + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_TX_HALF, 1, cap); + 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); + } + /* 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); + tse_dprintf(6, "INFO : PHY[%d.%d] - Advertisement of 100 Base-T4 set to %d\n", mac_group_index, mac_info_index, 0); + + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_TX_FULL, 1, 0); + 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); + + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_100BASE_TX_HALF, 1, 0); + 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); + } + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return SUCCESS; +} + + +/* @Function Description: Set the advertisement of PHY for 10 Mbps + * @API Type: Internal + * @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) { + alt_u8 cap; + + /* pointer to MAC associated and MAC group */ + alt_tse_mac_info *pmac_info = pphy->pmac_info; + alt_tse_mac_group *pmac_group = pmac_info->pmac_group; + + /* get index of the pointers in pointer array list */ + int mac_info_index = alt_tse_get_mac_info_index(pmac_info); + int mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* Record previous MDIO address, to be restored at the end of function */ + int mdioadd_prev = alt_tse_phy_rd_mdio_addr(pphy); + + /* write PHY address to MDIO to access the i-th PHY */ + alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address); + + /* if enable = 1, set advertisement based on PHY capability */ + if(enable) { + cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_10BASE_T_FULL, 1); + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_10BASE_TX_FULL, 1, cap); + 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); + + cap = alt_tse_phy_rd_mdio_reg(pphy, TSE_PHY_MDIO_STATUS, TSE_PHY_MDIO_STATUS_10BASE_T_HALF, 1); + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_10BASE_TX_HALF, 1, cap); + 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); + } + /* 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); + 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); + + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_ADV, TSE_PHY_MDIO_ADV_10BASE_TX_HALF, 1, 0); + 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); + } + + /* Restore previous MDIO address */ + alt_tse_phy_wr_mdio_addr(pphy, mdioadd_prev); + + return SUCCESS; +} + + + + +/* @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) { + + alt_32 i; + alt_u8 common_1000 = 1; + alt_u8 common_100 = 1; + alt_u8 common_10 = 1; + + alt_32 common_speed; + + alt_u8 none_an_complete = 1; + + alt_tse_mac_info *pmac_info = 0; + alt_tse_phy_info *pphy = 0; + + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* reset Auto-Negotiation advertisement */ + for(i = 0; i < pmac_group->channel; i++) { + pmac_info = pmac_group->pmac_info[i]; + pphy = pmac_info->pphy_info; + + /* run only if PHY connected */ + if(pphy) { + alt_tse_phy_set_adv_1000(pphy, 1); + alt_tse_phy_set_adv_100(pphy, 1); + alt_tse_phy_set_adv_10(pphy, 1); + } + tse_dprintf(6, "\n"); + } + + /* loop through every PHY connected */ + for(i = 0; i < pmac_group->channel; i++) { + + pmac_info = pmac_group->pmac_info[i]; + pphy = pmac_info->pphy_info; + + /* if no PHY connected */ + if(!pphy) { + continue; + } + + /* get PHY capability */ + /* skip for PHY with Auto-Negotiation not completed */ + if(alt_tse_phy_get_cap(pphy) != TSE_PHY_AN_COMPLETE) { + continue; + } + + none_an_complete = 0; + + /* Small MAC */ + if(pmac_info->mac_type == ALTERA_TSE_MACLITE_10_100) { + common_1000 = 0; + } + else if(pmac_info->mac_type == ALTERA_TSE_MACLITE_1000) { + common_100 = 0; + common_10 = 0; + } + + /* 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)); + //(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) | + (pphy->link_capability.cap_100_base_x_half & pphy->link_capability.lp_100_base_tx_half) | + (pphy->link_capability.cap_100_base_t4 & pphy->link_capability.lp_100_base_t4)); + common_10 &= ((pphy->link_capability.cap_10_base_t_full & pphy->link_capability.lp_10_base_tx_full) | + (pphy->link_capability.cap_10_base_t_half & pphy->link_capability.lp_10_base_tx_half)); + + } + + /* get common speed based on capabilities */ + if(none_an_complete == 1) { + common_speed = TSE_PHY_SPEED_NO_COMMON; + tse_dprintf(2, "ERROR : MAC Group[%d] - None of the PHYs Auto-Negotiation completed!\n", mac_group_index); + } + else if(common_1000) { + common_speed = TSE_PHY_SPEED_1000; + tse_dprintf(5, "INFO : MAC Group[%d] - Common Speed : %d Mbps\n", mac_group_index, 1000); + } + else if(common_100) { + common_speed = TSE_PHY_SPEED_100; + tse_dprintf(5, "INFO : MAC Group[%d] - Common Speed : %d Mbps\n", mac_group_index, 100); + } + else if(common_10) { + common_speed = TSE_PHY_SPEED_10; + tse_dprintf(5, "INFO : MAC Group[%d] - Common Speed : %d Mbps\n", mac_group_index, 10); + } + else { + common_speed = TSE_PHY_SPEED_NO_COMMON; + tse_dprintf(2, "ERROR : MAC Group[%d] - No common speed at all!\n", mac_group_index); } + + return common_speed; +} + + +/* @Function Description: Set the common speed to 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 + * 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) { + + alt_32 i; + + alt_u8 speed; + alt_u8 duplex; + + alt_u8 gb_capable; + + alt_tse_phy_info *pphy = 0; + alt_tse_mac_info *pmac_info = 0; + alt_tse_system_info *psys = 0; + + /* get index of the pointers in pointer array list */ + alt_8 mac_info_index = 0; + alt_8 mac_group_index = alt_tse_get_mac_group_index(pmac_group); + + /* 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; + alt_32 mdioadd_prev = IORD(&pmac_group_base->MDIO_ADDR1, 0); + + if((common_speed < TSE_PHY_SPEED_10) || (common_speed > TSE_PHY_SPEED_1000)) { + tse_dprintf(2, "ERROR : MAC Group[%d] - Invalid common speed specified! common speed = %d\n", mac_group_index, (int)common_speed); + /* Restore previous MDIO address */ + IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdioadd_prev); + return TSE_PHY_SPEED_NO_COMMON; + } + + /* loop through every PHY connected */ + for(i = 0; i < pmac_group->channel; i++) { + pmac_info = pmac_group->pmac_info[i]; + mac_info_index = alt_tse_get_mac_info_index(pmac_info); + + pphy = pmac_info->pphy_info; + + /* if no PHY connected */ + if(!pphy) { + continue; + } + + psys = pmac_info->psys_info; + + /* write PHY address to MDIO to access the i-th PHY */ + alt_tse_phy_wr_mdio_addr(pphy, pphy->mdio_address); + + /* capability of PHY supports 1000 Mbps */ + gb_capable = pphy->link_capability.cap_1000_base_t_full || pphy->link_capability.cap_1000_base_t_half || + pphy->link_capability.cap_1000_base_x_full || pphy->link_capability.cap_1000_base_x_half; + + /* if PHY does not supports 1000 Mbps, and common speed is 1000 Mbps */ + if((!gb_capable) && (common_speed == TSE_PHY_SPEED_1000)) { + 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); + /* Restore previous MDIO address */ + IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdioadd_prev); + return TSE_PHY_SPEED_NO_COMMON; + } + + /* 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)) { + + /* if PHY supports 1000 Mbps, write msb of speed */ + if(gb_capable) { + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_SPEED_MSB, 1, common_speed >> 1); + } + /* write lsb of speed */ + alt_tse_phy_wr_mdio_reg(pphy, TSE_PHY_MDIO_CONTROL, TSE_PHY_MDIO_CONTROL_SPEED_LSB, 1, common_speed); + + /* continue to next PHY */ + continue; + } + + /* set Auto-Negotiation advertisement based on common speed */ + if(common_speed == TSE_PHY_SPEED_1000) { + alt_tse_phy_set_adv_1000(pphy, 1); + alt_tse_phy_set_adv_100(pphy, 1); + alt_tse_phy_set_adv_10(pphy, 1); + } + else if(common_speed == TSE_PHY_SPEED_100) { + alt_tse_phy_set_adv_1000(pphy, 0); + alt_tse_phy_set_adv_100(pphy, 1); + alt_tse_phy_set_adv_10(pphy, 1); + } + else if(common_speed == TSE_PHY_SPEED_10) { + alt_tse_phy_set_adv_1000(pphy, 0); + alt_tse_phy_set_adv_100(pphy, 0); + alt_tse_phy_set_adv_10(pphy, 1); + } + else { + alt_tse_phy_set_adv_1000(pphy, 0); + alt_tse_phy_set_adv_100(pphy, 0); + alt_tse_phy_set_adv_10(pphy, 0); + } + + /* 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) { + + /* read both msb and lsb of speed bits if PHY support 1000 Mbps */ + if(gb_capable) { + + /* 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); + } + + /* 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); + } + + /* if current speed != common speed, then restart Auto-Negotiation */ + if(speed != common_speed) { + alt_tse_phy_restart_an(pphy, ALTERA_AUTONEG_TIMEOUT_THRESHOLD); + } + + /* 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); + + /* Set MAC duplex register */ + alt_tse_mac_set_duplex((np_tse_mac *)psys->tse_mac_base, 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)); + } + 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)); + + /* Set MAC speed register */ + alt_tse_mac_set_speed(pmac_group_base, common_speed); + + /* Restore previous MDIO address */ + IOWR(&pmac_group_base->MDIO_ADDR1, 0, mdioadd_prev); + + return common_speed; +} + + + +/* @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) { + + 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) { + tse_dprintf(5, "MARVELL : Enabling auto crossover\n"); + IOWR(&pmac->mdio1.CONTROL, 16, 0x0078); + tse_dprintf(5, "MARVELL : PHY reset\n"); + dat = IORD(&pmac->mdio1.CONTROL, 0); + IOWR(&pmac->mdio1.CONTROL, 0, dat | PCS_CTL_sw_reset); + } + + return 0; +} + + +/* @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) { + + alt_u16 dat = IORD(&pmac->mdio1.reg1b, 0); + dat &= 0xfff0; + + tse_dprintf(5, "MARVELL : Mode changed to GMII to copper mode\n"); + IOWR(&pmac->mdio1.reg1b, 0, dat | 0xf); + + tse_dprintf(5, "MARVELL : Disable RGMII Timing Control\n"); + dat = IORD(&pmac->mdio1.reg14, 0); + dat &= ~0x82; + IOWR(&pmac->mdio1.reg14, 0, dat); + + tse_dprintf(5, "MARVELL : PHY reset\n"); + dat = IORD(&pmac->mdio1.CONTROL, 0); + IOWR(&pmac->mdio1.CONTROL, 0, dat | PCS_CTL_sw_reset); + + return 1; +} + +/* @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) { + + alt_u16 dat = IORD(&pmac->mdio1.reg1b, 0); + dat &= 0xfff0; + + tse_dprintf(5, "MARVELL : Mode changed to SGMII without clock with SGMII Auto-Neg to copper mode\n"); + IOWR(&pmac->mdio1.reg1b, 0, dat | 0x4); + + tse_dprintf(5, "MARVELL : Disable RGMII Timing Control\n"); + dat = IORD(&pmac->mdio1.reg14, 0); + dat &= ~0x82; + IOWR(&pmac->mdio1.reg14, 0, dat); + + tse_dprintf(5, "MARVELL : PHY reset\n"); + dat = IORD(&pmac->mdio1.CONTROL, 0); + IOWR(&pmac->mdio1.CONTROL, 0, dat | PCS_CTL_sw_reset); + + return 1; +} + +/* @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) { + + + alt_u16 dat = IORD(&pmac->mdio1.reg1b, 0); + dat &= 0xfff0; + + tse_dprintf(5, "MARVELL : Mode changed to RGMII/Modified MII to Copper mode\n"); + IOWR(&pmac->mdio1.reg1b, 0, dat | 0xb); + + tse_dprintf(5, "MARVELL : Enable RGMII Timing Control\n"); + dat = IORD(&pmac->mdio1.reg14, 0); + dat &= ~0x82; + dat |= 0x82; + IOWR(&pmac->mdio1.reg14, 0, dat); + + tse_dprintf(5, "MARVELL : PHY reset\n"); + dat = IORD(&pmac->mdio1.CONTROL, 0); + IOWR(&pmac->mdio1.CONTROL, 0, dat | PCS_CTL_sw_reset); + + return 1; + +} + +/* @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) { + alt_u32 link_status = 0; + alt_u32 reg_status = IORD(&pmac->mdio1.reg10, 0); + + /* If speed == 10 Mbps */ + if(reg_status & 0x2) { + link_status |= 0x8; + } + /* Else speed = 100 Mbps */ + else { + link_status |= 0x4; + } + + /* If duplex == Full */ + if(reg_status & 0x4) { + link_status |= 0x1; + } + + return link_status; +} + +/* @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) +{ + alt_u16 dat; + + dat = IORD(&pmac->mdio1.reg14, 0); + dat &= 0x3FFF; + dat |= 0x0100; + IOWR(&pmac->mdio1.reg14, 0, dat); + + return 0; + +} + +/* @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) +{ + alt_u32 link_status = 0; + alt_u32 reg18 = IORD(&pmac->mdio1.reg18, 0); + + if ((reg18 & 0x3)==0) { link_status |= 0x8; } /* If speed == 10 Mbps */ + if ((reg18 & 0x3)==1) { link_status |= 0x4; } /* Else speed = 100 Mbps */ + if ((reg18 & 0x3)==2) { link_status |= 0x2; } /* Else speed = 1000 Mbps */ + + /* If duplex == Full */ + if(reg18 & 0x8) { + link_status |= 0x1; + } + + return link_status; +} diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_tse_system_info.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_tse_system_info.c new file mode 100644 index 0000000..2fb6e8d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_tse_system_info.c @@ -0,0 +1,61 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#ifdef ALT_INICHE + #include "ipport.h" +#endif + +#include "altera_avalon_tse.h" +#include "altera_avalon_tse_system_info.h" +#include "system.h" + +#ifdef TSE_MY_SYSTEM +/* define TSE_MY_SYSTEM to customize tse_mac_device[] structure using global array initialization */ + extern alt_tse_system_info tse_mac_device[MAXNETS]; +#else + +/* use tse_mac_device[] structure as defined in this file + * or + * customize tse_mac_device[] structure using API alt_tse_system_add_sys() and alt_tse_sys_enable_mdio_sharing() */ +alt_tse_system_info tse_mac_device[MAXNETS] = { + + /************************************************************************************/ + #if ( defined(TSE_0_TSE_BASE) && defined(TSE_0_DMA_TX_CSR_NAME) && defined(TSE_0_DMA_RX_CSR_NAME) ) + #ifdef DESCRIPTOR_MEMORY_BASE + TSE_SYSTEM_EXT_MEM_NO_SHARED_FIFO(TSE_0_TSE, 0, TSE_0_DMA_TX, TSE_0_DMA_RX, TSE_PHY_AUTO_ADDRESS, 0, DESCRIPTOR_MEMORY) + #else + TSE_SYSTEM_INT_MEM_NO_SHARED_FIFO(TSE_0_TSE, 0, TSE_0_DMA_TX, TSE_0_DMA_RX, TSE_PHY_AUTO_ADDRESS, 0) + #endif + #endif + /************************************************************************************/ +}; + +#endif /* TSE_MY_SYSTEM */ + diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_fd.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_fd.c new file mode 100644 index 0000000..c07024a --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_fd.c @@ -0,0 +1,100 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2007 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include "alt_types.h" +#include "sys/alt_dev.h" +#include "altera_avalon_uart.h" + +extern int altera_avalon_uart_read(altera_avalon_uart_state* sp, + char* buffer, int space, int flags); +extern int altera_avalon_uart_write(altera_avalon_uart_state* sp, + const char* ptr, int count, int flags); +extern int altera_avalon_uart_ioctl(altera_avalon_uart_state* sp, + int req, void* arg); +extern int altera_avalon_uart_close(altera_avalon_uart_state* sp, int flags); + +/* ----------------------------------------------------------------------- */ +/* --------------------- WRAPPERS FOR ALT FD SUPPORT --------------------- */ +/* + * + */ + +int +altera_avalon_uart_read_fd(alt_fd* fd, char* buffer, int space) +{ + altera_avalon_uart_dev* dev = (altera_avalon_uart_dev*) fd->dev; + + return altera_avalon_uart_read(&dev->state, buffer, space, + fd->fd_flags); +} + +int +altera_avalon_uart_write_fd(alt_fd* fd, const char* buffer, int space) +{ + altera_avalon_uart_dev* dev = (altera_avalon_uart_dev*) fd->dev; + + return altera_avalon_uart_write(&dev->state, buffer, space, + fd->fd_flags); +} + +#if !defined(ALT_USE_SMALL_DRIVERS) && !defined(ALTERA_AVALON_UART_SMALL) + +/* + * Fast driver + */ + +/* + * To reduce the code footprint of this driver, the ioctl() function is not + * included by default. If you wish to use the ioctl features provided + * below, you can do so by adding the option : -DALTERA_AVALON_UART_USE_IOCTL + * to CPPFLAGS in the Makefile (or through the Eclipse IDE). + */ + +#ifdef ALTERA_AVALON_UART_USE_IOCTL + +int +altera_avalon_uart_ioctl_fd(alt_fd* fd, int req, void* arg) +{ + altera_avalon_uart_dev* dev = (altera_avalon_uart_dev*) fd->dev; + + return altera_avalon_uart_ioctl(&dev->state, req, arg); +} + +#endif /* ALTERA_AVALON_UART_USE_IOCTL */ + +int +altera_avalon_uart_close_fd(alt_fd* fd) +{ + altera_avalon_uart_dev* dev = (altera_avalon_uart_dev*) fd->dev; + + return altera_avalon_uart_close(&dev->state, fd->fd_flags); +} + +#endif /* fast driver */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_init.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_init.c new file mode 100644 index 0000000..92484d6 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_init.c @@ -0,0 +1,312 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2009 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include + +#include "sys/alt_dev.h" +#include "sys/alt_irq.h" +#include "sys/ioctl.h" +#include "sys/alt_errno.h" + +#include "altera_avalon_uart.h" +#include "altera_avalon_uart_regs.h" + +#if !defined(ALT_USE_SMALL_DRIVERS) && !defined(ALTERA_AVALON_UART_SMALL) + +/* ----------------------------------------------------------- */ +/* ------------------------- FAST DRIVER --------------------- */ +/* ----------------------------------------------------------- */ + +/* + * altera_avalon_uart_init() is called by the auto-generated function + * alt_sys_init() in order to initialize a particular instance of this device. + * It is responsible for configuring the device and associated software + * constructs. + */ + +#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 + +static void altera_avalon_uart_rxirq(altera_avalon_uart_state* sp, + alt_u32 status); +static void altera_avalon_uart_txirq(altera_avalon_uart_state* sp, + alt_u32 status); + +void +altera_avalon_uart_init(altera_avalon_uart_state* sp, + alt_u32 irq_controller_id, alt_u32 irq) +{ + void* base = sp->base; + int error; + + /* + * 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) || + ALT_SEM_CREATE (&sp->read_lock, 1) || + ALT_SEM_CREATE (&sp->write_lock, 1); + + if (!error) + { + /* enable interrupts at the device */ + sp->ctrl = ALTERA_AVALON_UART_CONTROL_RTS_MSK | + ALTERA_AVALON_UART_CONTROL_RRDY_MSK | + ALTERA_AVALON_UART_CONTROL_DCTS_MSK; + + IOWR_ALTERA_AVALON_UART_CONTROL(base, sp->ctrl); + + /* register the interrupt handler */ +#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT + alt_ic_isr_register(irq_controller_id, irq, altera_avalon_uart_irq, sp, + 0x0); +#else + alt_irq_register (irq, sp, altera_avalon_uart_irq); +#endif + } +} + +/* + * altera_avalon_uart_irq() is the interrupt handler registered at + * configuration time for processing UART interrupts. It vectors + * interrupt requests to either altera_avalon_uart_rxirq() (for incoming + * data), or altera_avalon_uart_txirq() (for outgoing data). + */ +#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 +{ + alt_u32 status; + + altera_avalon_uart_state* sp = (altera_avalon_uart_state*) context; + void* base = sp->base; + + /* + * Read the status register in order to determine the cause of the + * interrupt. + */ + + status = IORD_ALTERA_AVALON_UART_STATUS(base); + + /* Clear any error flags set at the device */ + IOWR_ALTERA_AVALON_UART_STATUS(base, 0); + + /* Dummy read to ensure IRQ is negated before ISR returns */ + IORD_ALTERA_AVALON_UART_STATUS(base); + + /* process a read irq */ + if (status & ALTERA_AVALON_UART_STATUS_RRDY_MSK) + { + altera_avalon_uart_rxirq(sp, status); + } + + /* process a write irq */ + if (status & (ALTERA_AVALON_UART_STATUS_TRDY_MSK | + ALTERA_AVALON_UART_STATUS_DCTS_MSK)) + { + altera_avalon_uart_txirq(sp, status); + } + + +} + +/* + * altera_avalon_uart_rxirq() is called by altera_avalon_uart_irq() to + * process a receive interrupt. It transfers the incoming character into + * 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) +{ + alt_u32 next; + + /* If there was an error, discard the data */ + + if (status & (ALTERA_AVALON_UART_STATUS_PE_MSK | + ALTERA_AVALON_UART_STATUS_FE_MSK)) + { + return; + } + + /* + * 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) + { + ALT_FLAG_POST (sp->events, ALT_UART_READ_RDY, OS_FLAG_SET); + } + + /* Determine which slot to use next in the circular buffer */ + + next = (sp->rx_end + 1) & ALT_AVALON_UART_BUF_MSK; + + /* Transfer data from the device to the circular buffer */ + + sp->rx_buf[sp->rx_end] = IORD_ALTERA_AVALON_UART_RXDATA(sp->base); + + sp->rx_end = next; + + next = (sp->rx_end + 1) & ALT_AVALON_UART_BUF_MSK; + + /* + * 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) + { + sp->ctrl &= ~ALTERA_AVALON_UART_CONTROL_RRDY_MSK; + IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl); + } +} + +/* + * altera_avalon_uart_txirq() is called by altera_avalon_uart_irq() to + * process a transmit interrupt. It transfers data from the transmit + * 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) +{ + /* Transfer data if there is some ready to be transfered */ + + if (sp->tx_start != sp->tx_end) + { + /* + * 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) || + (status & ALTERA_AVALON_UART_STATUS_CTS_MSK)) + { + + /* + * 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)) + { + ALT_FLAG_POST (sp->events, + ALT_UART_WRITE_RDY, + OS_FLAG_SET); + } + + /* Write the data to the device */ + + IOWR_ALTERA_AVALON_UART_TXDATA(sp->base, sp->tx_buf[sp->tx_start]); + + sp->tx_start = (++sp->tx_start) & ALT_AVALON_UART_BUF_MSK; + + /* + * 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; + } + else + { + /* + * CTS is low and we are using flow control, so disable the transmit + * interrupt while we wait for CTS to go high again. This will be + * detected using the DCTS interrupt. + * + * There is a race condition here. "status" may indicate that + * CTS is low, but it actually went high before DCTS was cleared on + * 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); + + if (!(status & ALTERA_AVALON_UART_STATUS_CTS_MSK)) + { + sp->ctrl &= ~ALTERA_AVALON_UART_CONTROL_TRDY_MSK; + } + } + } + + /* + * 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) + { + sp->ctrl &= ~(ALTERA_AVALON_UART_CONTROL_TRDY_MSK | + ALTERA_AVALON_UART_CONTROL_DCTS_MSK); + } + + IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl); +} + +/* + * The close() routine is implemented to drain the UART transmit buffer + * when not in "small" mode. This routine will wait for transimt data to be + * emptied unless the driver flags have been set to non-blocking mode. + * This routine should be called indirectly (i.e. though the C library + * close() routine) so that the file descriptor associated with the relevant + * stream (i.e. stdout) can be closed as well. This routine does not manage + * file descriptors. + * + * 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) +{ + /* + * Wait for all transmit data to be emptied by the UART ISR. + */ + while (sp->tx_start != sp->tx_end) { + if (flags & O_NONBLOCK) { + return -EWOULDBLOCK; + } + } + + return 0; +} + +#endif /* fast driver */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_ioctl.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_ioctl.c new file mode 100644 index 0000000..4f281d5 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_ioctl.c @@ -0,0 +1,153 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include +#include + +#include "sys/alt_irq.h" +#include "sys/ioctl.h" +#include "sys/alt_errno.h" + +#include "altera_avalon_uart_regs.h" +#include "altera_avalon_uart.h" + + +#if !defined(ALT_USE_SMALL_DRIVERS) && !defined(ALTERA_AVALON_UART_SMALL) + +/* ----------------------------------------------------------- */ +/* ------------------------- FAST DRIVER --------------------- */ +/* ----------------------------------------------------------- */ + +/* + * To reduce the code footprint of this driver, the ioctl() function is not + * included by default. If you wish to use the ioctl features provided + * below, you can do so by adding the option : -DALTERA_AVALON_UART_USE_IOCTL + * to CPPFLAGS in the Makefile (or through the Eclipse IDE). + */ + +#ifdef ALTERA_AVALON_UART_USE_IOCTL + +/* + * altera_avalon_uart_ioctl() is called by the system ioctl() function to handle + * ioctl requests for the UART. The only ioctl requests supported are TIOCMGET + * and TIOCMSET. + * + * TIOCMGET returns a termios structure that describes the current device + * configuration. + * + * TIOCMSET sets the device (if possible) to match the requested configuration. + * The requested configuration is described using a termios structure passed + * through the input argument "arg". + */ + +static int altera_avalon_uart_tiocmget(altera_avalon_uart_state* sp, + struct termios* term); +static int altera_avalon_uart_tiocmset(altera_avalon_uart_state* sp, + struct termios* term); + +int +altera_avalon_uart_ioctl(altera_avalon_uart_state* sp, int req, void* arg) +{ + int rc = -ENOTTY; + + switch (req) + { + case TIOCMGET: + rc = altera_avalon_uart_tiocmget(sp, (struct termios*) arg); + break; + case TIOCMSET: + rc = altera_avalon_uart_tiocmset(sp, (struct termios*) arg); + break; + default: + break; + } + return rc; +} + +/* + * altera_avalon_uart_tiocmget() is used by altera_avalon_uart_ioctl() to fill + * in the input termios structure with the current device configuration. + * + * See termios.h for further details on the contents of the termios structure. + */ + +static int +altera_avalon_uart_tiocmget(altera_avalon_uart_state* sp, + struct termios* term) +{ + memcpy (term, &sp->termios, sizeof (struct termios)); + return 0; +} + +/* + * altera_avalon_uart_tiocmset() is used by altera_avalon_uart_ioctl() to + * configure the device according to the settings in the input termios + * structure. In practice the only configuration that can be changed is the + * baud rate, and then only if the hardware is configured to have a writable + * baud register. + */ + +static int +altera_avalon_uart_tiocmset(altera_avalon_uart_state* sp, + struct termios* term) +{ + speed_t speed; + + speed = sp->termios.c_ispeed; + + /* Update the settings if the hardware supports it */ + + if (!(sp->flags & ALT_AVALON_UART_FB)) + { + sp->termios.c_ispeed = sp->termios.c_ospeed = term->c_ispeed; + } + /* + * If the request was for an unsupported setting, return an error. + */ + + if (memcmp(term, &sp->termios, sizeof (struct termios))) + { + sp->termios.c_ispeed = sp->termios.c_ospeed = speed; + return -EIO; + } + + /* + * Otherwise, update the hardware. + */ + + IOWR_ALTERA_AVALON_UART_DIVISOR(sp->base, + ((sp->freq/sp->termios.c_ispeed) - 1)); + + return 0; +} + +#endif /* ALTERA_AVALON_UART_USE_IOCTL */ + +#endif /* fast driver */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_read.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_read.c new file mode 100644 index 0000000..5286ba3 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_read.c @@ -0,0 +1,240 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include + +#include "sys/alt_irq.h" +#include "sys/ioctl.h" +#include "sys/alt_errno.h" + +#include "altera_avalon_uart.h" +#include "altera_avalon_uart_regs.h" + +#if defined(ALT_USE_SMALL_DRIVERS) || defined(ALTERA_AVALON_UART_SMALL) + +/* ----------------------------------------------------------- */ +/* ----------------------- SMALL DRIVER ---------------------- */ +/* ----------------------------------------------------------- */ + +/* + * altera_avalon_uart_read() is called by the system read() function in order to + * read a block of data from the UART. "len" is the maximum length of the data + * to read, and "ptr" indicates the destination address. "fd" is the file + * descriptor for the device to be read from. + * + * Permission checks are made before the call to altera_avalon_uart_read(), so + * we know that the file descriptor has been opened with the correct permissions + * for this operation. + * + * The return value is the number of bytes actually read. + * + * This implementation polls the device waiting for characters. At most it can + * only return one character, regardless of how many are requested. If the + * device is being accessed in non-blocking mode then it is possible for this + * function to return without reading any characters. In this case errno is + * set to EWOULDBLOCK. + */ + +int +altera_avalon_uart_read(altera_avalon_uart_state* sp, char* ptr, int len, + int flags) +{ + int block; + unsigned int status; + + block = !(flags & O_NONBLOCK); + + do + { + status = IORD_ALTERA_AVALON_UART_STATUS(sp->base); + + /* clear any error flags */ + + IOWR_ALTERA_AVALON_UART_STATUS(sp->base, 0); + + if (status & ALTERA_AVALON_UART_CONTROL_RRDY_MSK) + { + ptr[0] = IORD_ALTERA_AVALON_UART_RXDATA(sp->base); + + if (!(status & (ALTERA_AVALON_UART_STATUS_PE_MSK | + ALTERA_AVALON_UART_STATUS_FE_MSK))) + { + return 1; + } + } + } + while (block); + + ALT_ERRNO = EWOULDBLOCK; + + return 0; +} + +#else + +/* ----------------------------------------------------------- */ +/* ----------------------- FAST DRIVER ----------------------- */ +/* ----------------------------------------------------------- */ + +/* + * altera_avalon_uart_read() is called by the system read() function in order to + * read a block of data from the UART. "len" is the maximum length of the data + * to read, and "ptr" indicates the destination address. "sp" is the state + * pointer for the device to be read from. + * + * Permission checks are made before the call to altera_avalon_uart_read(), so + * we know that the file descriptor has been opened with the correct permissions + * for this operation. + * + * The return value is the number of bytes actually read. + * + * This function does not communicate with the device directly. Instead data is + * transfered from a circular buffer. The interrupt handler is then responsible + * for copying data from the device into this buffer. + */ + +int +altera_avalon_uart_read(altera_avalon_uart_state* sp, char* ptr, int len, + int flags) +{ + alt_irq_context context; + int block; + alt_u8 read_would_block = 0; + int count = 0; + + /* + * Construct a flag to indicate whether the device is being accessed in + * blocking or non-blocking mode. + */ + + block = !(flags & O_NONBLOCK); + + /* + * 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); + + /* + * Loop, copying data from the circular buffer to the destination address + * supplied in "ptr". This loop is terminated when the required number of + * bytes have been read. If the circular buffer is empty, and no data has + * been read, then the loop will block (when in blocking mode). + * + * If the circular buffer is empty, and some data has already been + * transferred, or the device is being accessed in non-blocking mode, then + * the loop terminates without necessarily reading all the requested data. + */ + + do + { + /* + * Read the required amount of data, until the circular buffer runs + * empty + */ + + while ((count < len) && (sp->rx_start != sp->rx_end)) + { + count++; + *ptr++ = sp->rx_buf[sp->rx_start]; + + sp->rx_start = (sp->rx_start+1) & ALT_AVALON_UART_BUF_MSK; + } + + /* + * 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)) + { + if (!block) + { + /* Set errno to indicate the reason we're not returning any data */ + + ALT_ERRNO = EWOULDBLOCK; + read_would_block = 1; + break; + } + else + { + /* Block waiting for some data to arrive */ + + /* First, ensure read interrupts are enabled to avoid deadlock */ + + context = alt_irq_disable_all (); + sp->ctrl |= ALTERA_AVALON_UART_CONTROL_RRDY_MSK; + IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl); + alt_irq_enable_all (context); + + /* + * When running in a multi-threaded mode, we pend on the read event + * 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, + ALT_UART_READ_RDY, + OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME, + 0); + } + } + } + while (!count && len); + + /* + * 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); + + /* + * Ensure that interrupts are enabled, so that the circular buffer can + * re-fill. + */ + + context = alt_irq_disable_all (); + sp->ctrl |= ALTERA_AVALON_UART_CONTROL_RRDY_MSK; + IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl); + alt_irq_enable_all (context); + + /* Return the number of bytes read */ + if(read_would_block) { + return -EWOULDBLOCK; + } + else { + return count; + } +} + +#endif /* fast driver */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_write.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_write.c new file mode 100644 index 0000000..0658e02 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_avalon_uart_write.c @@ -0,0 +1,232 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include + +#include "sys/alt_dev.h" +#include "sys/alt_irq.h" +#include "sys/ioctl.h" +#include "sys/alt_errno.h" + +#include "altera_avalon_uart_regs.h" +#include "altera_avalon_uart.h" + +#if defined(ALT_USE_SMALL_DRIVERS) || defined(ALTERA_AVALON_UART_SMALL) + +/* ----------------------------------------------------------- */ +/* ------------------------ SMALL DRIVER --------------------- */ +/* ----------------------------------------------------------- */ + +/* + * altera_avalon_uart_write() is called by the system write() function in + * order to write a block of data to the UART. + * "len" is the length of the data to write, + * and "ptr" indicates the source address. "fd" is the file descriptor for the + * device to be read from. + * + * Permission checks are made before the call to altera_avalon_uart_write(), so + * we know that the file descriptor has been opened with the correct permissions + * for this operation. + * + * The return value is the number of bytes actually written. + * + * This function will block on the devices transmit register, until all + * characters have been transmitted. This is unless the device is being + * accessed in non-blocking mode. In this case this function will return as + * soon as the device reports that it is not ready to transmit. + * + * Since this is the small footprint version of the UART driver, the value of + * CTS is ignored. + */ + +int +altera_avalon_uart_write(altera_avalon_uart_state* sp, const char* ptr, int len, + int flags) +{ + int block; + unsigned int status; + int count; + + block = !(flags & O_NONBLOCK); + count = len; + + do + { + status = IORD_ALTERA_AVALON_UART_STATUS(sp->base); + + if (status & ALTERA_AVALON_UART_STATUS_TRDY_MSK) + { + IOWR_ALTERA_AVALON_UART_TXDATA(sp->base, *ptr++); + count--; + } + } + while (block && count); + + if (count) + { + ALT_ERRNO = EWOULDBLOCK; + } + + return (len - count); +} + +#else /* Using the "fast" version of the driver */ + +/* ----------------------------------------------------------- */ +/* ------------------------- FAST DRIVER --------------------- */ +/* ----------------------------------------------------------- */ + +/* + * altera_avalon_uart_write() is called by the system write() function in order + * to write a block of data to the UART. "len" is the length of the data to + * write, and "ptr" indicates the source address. "sp" is the state pointer + * for the device to be written to. + * + * Permission checks are made before the call to altera_avalon_uart_write(), so + * we know that the file descriptor has been opened with the correct permissions + * for this operation. + * + * The return value is the number of bytes actually written. + * + * This function does not communicate with the device directly. Instead data is + * transfered to a circular buffer. The interrupt handler is then responsible + * for copying data from this buffer into the device. + */ + +int +altera_avalon_uart_write(altera_avalon_uart_state* sp, const char* ptr, int len, + int flags) +{ + alt_irq_context context; + int no_block; + alt_u32 next; + int count = len; + + /* + * Construct a flag to indicate whether the device is being accessed in + * blocking or non-blocking mode. + */ + + no_block = (flags & O_NONBLOCK); + + /* + * 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); + + /* + * 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) + { + /* Determine the next slot in the buffer to access */ + + next = (sp->tx_end + 1) & ALT_AVALON_UART_BUF_MSK; + + /* block waiting for space if necessary */ + + if (next == sp->tx_start) + { + if (no_block) + { + /* Set errno to indicate why this function returned early */ + + ALT_ERRNO = EWOULDBLOCK; + break; + } + else + { + /* Block waiting for space in the circular buffer */ + + /* First, ensure transmit interrupts are enabled to avoid deadlock */ + + context = alt_irq_disable_all (); + sp->ctrl |= (ALTERA_AVALON_UART_CONTROL_TRDY_MSK | + ALTERA_AVALON_UART_CONTROL_DCTS_MSK); + IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl); + alt_irq_enable_all (context); + + /* wait for space to come free */ + + do + { + /* + * When running in a multi-threaded mode, we pend on the write event + * 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, + ALT_UART_WRITE_RDY, + OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME, + 0); + } + while ((next == sp->tx_start)); + } + } + + count--; + + /* Add the next character to the transmit buffer */ + + sp->tx_buf[sp->tx_end] = *ptr++; + sp->tx_end = next; + } + + /* + * 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); + + /* + * Ensure that interrupts are enabled, so that the circular buffer can + * drain. + */ + + context = alt_irq_disable_all (); + sp->ctrl |= ALTERA_AVALON_UART_CONTROL_TRDY_MSK | + ALTERA_AVALON_UART_CONTROL_DCTS_MSK; + IOWR_ALTERA_AVALON_UART_CONTROL(sp->base, sp->ctrl); + alt_irq_enable_all (context); + + /* return the number of bytes written */ + + return (len - count); +} + +#endif /* fast driver */ diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_generic_quad_spi_controller.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_generic_quad_spi_controller.c new file mode 100644 index 0000000..ef6b9e4 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_generic_quad_spi_controller.c @@ -0,0 +1,797 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2015 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include +#include +#include +#include +#include "sys/param.h" +#include "alt_types.h" +#include "altera_generic_quad_spi_controller_regs.h" +#include "altera_generic_quad_spi_controller.h" +#include "priv/alt_busy_sleep.h" +#include "sys/alt_debug.h" +#include "sys/alt_cache.h" + + +ALT_INLINE alt_32 static alt_qspi_validate_read_write_arguments(alt_qspi_controller_dev *flash_info,alt_u32 offset, alt_u32 length); +alt_32 static alt_qspi_poll_for_write_in_progress(alt_qspi_controller_dev* qspi_flash_info); + +/* + * Public API + * + * Refer to “Using Flash Devices†in the + * Developing Programs Using the Hardware Abstraction Layer chapter + * of the Nios II Software Developer’s Handbook. + */ + + + /** + * alt_qspi_controller_lock + * + * Locks the range of the memory sectors, which + * protected from write and erase. + * + * Arguments: + * - *flash_info: Pointer to general flash device structure. + * - sectors_to_lock: Block protection bits in EPCQ/QSPI ==> Bit4 | Bit3 | Bit2 | Bit1 | Bit0 + * TB | BP3 | BP2 | BP1 | BP0 + * For details of setting sectors protection, please refer to EPCQ/QSPI datasheet. + * + * Returns: + * 0 -> success + * -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) +{ + alt_u32 mem_op_value = 0; /* value to write to EPCQ_MEM_OP register */ + alt_qspi_controller_dev* qspi_flash_info = NULL; + alt_u32 result = 0; + alt_32 status = 0; + + /* return -EINVAL if flash_info is NULL */ + if(NULL == flash_info || 0 > sectors_to_lock) + { + return -EINVAL; + } + + qspi_flash_info = (alt_qspi_controller_dev*)flash_info; + + /* sector value should occupy bits 17:8 */ + mem_op_value = sectors_to_lock << 8; + + /* sector protect commands 0b11 occupies lower 2 bits */ + mem_op_value |= ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_PROTECT_CMD; + + /* 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); + + /* poll write in progress to make sure no operation is in progress */ + status = alt_qspi_poll_for_write_in_progress(qspi_flash_info); + if(status != 0) + { + return status; + } + + status = IORD_ALTERA_QSPI_CONTROLLER_STATUS(qspi_flash_info->csr_base); + result |= (status >> 2) & 0x07; /* extract out BP3 - BP0 */ + result |= (status >> 3) & 0x08; /* extract out BP4 */ + result |= (status >> 1) & 0x10; /* extract out TOP/BOTTOM bit */ + + if(result != sectors_to_lock) + { + return -ENOLCK; + } + + return 0; +} + +/** + * alt_qspi_controller_get_info + * + * Pass the table of erase blocks to the user. This flash will return a single + * flash_region that gives the number and size of sectors for the device used. + * + * Arguments: + * - *fd: Pointer to general flash device structure. + * - **info: Pointer to flash region + * - *number_of_regions: Pointer to number of regions + * + * For details of setting sectors protection, please refer to EPCQ/QSPI datasheet. + * + * Returns: + * 0 -> success + * -EINVAL -> Invalid arguments + * -EIO -> Could be hardware problem. +**/ +int 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 */ +) +{ + alt_flash_dev* flash = NULL; + + /* return -EINVAL if fd,info and number_of_regions are NULL */ + if(NULL == fd || NULL == info || NULL == number_of_regions) + { + return -EINVAL; + } + + flash = (alt_flash_dev*)fd; + + *number_of_regions = flash->number_of_regions; + + if (!flash->number_of_regions) + { + return -EIO; + } + else + { + *info = &flash->region_info[0]; + } + + return 0; +} + +/** + * alt_qspi_controller_erase_block + * + * This function erases a single flash sector. + * + * Arguments: + * - *flash_info: Pointer to QSPI flash device structure. + * - block_offset: byte-addressed offset, from start of flash, of the sector to be erased + * + * Returns: + * 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) +{ + alt_32 ret_code = 0; + alt_u32 mem_op_value = 0; /* value to write to EPCQ_MEM_OP register */ + alt_qspi_controller_dev* qspi_flash_info = NULL; + alt_u32 sector_number = 0; + + /* return -EINVAL if flash_info is NULL */ + if(NULL == flash_info) + { + return -EINVAL; + } + + qspi_flash_info = (alt_qspi_controller_dev*)flash_info; + + /* + * Sanity checks that block_offset is within the flash memory span and that the + * block offset is sector aligned. + * + */ + if((block_offset < 0) + || (block_offset >= qspi_flash_info->size_in_bytes) + || (block_offset & (qspi_flash_info->sector_size - 1)) != 0) + { + return -EINVAL; + } + + /* calculate current sector/block number */ + sector_number = (block_offset/(qspi_flash_info->sector_size)); + + /* sector value should occupy bits 23:8 */ + mem_op_value = (sector_number << 8) & ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_VALUE_MASK; + + /* sector erase commands 0b10 occupies lower 2 bits */ + mem_op_value |= ALTERA_QSPI_CONTROLLER_MEM_OP_SECTOR_ERASE_CMD; + + /* 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); + + /* check whether erase triggered a illegal erase interrupt */ + if((IORD_ALTERA_QSPI_CONTROLLER_ISR(qspi_flash_info->csr_base) & + 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, + ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_ERASE_MASK ); + return -EIO; /* erase failed, sector might be protected */ + } + + return ret_code; +} + +/** + * alt_qspi_controller_write_block + * + * This function writes one block/sector of data to flash. The length of the write can NOT + * spill into the adjacent sector. + * + * It assumes that someone has already erased the appropriate sector(s). + * + * Arguments: + * - *flash_info: Pointer to QSPI flash device structure. + * - block_offset: byte-addressed offset, from the start of flash, of the sector to written to + * - data-offset: Byte offset (unaligned access) of write into flash memory. + * For best performance, word(32 bits - aligned access) offset of write is recommended. + * - *src_addr: source buffer + * - length: size of writing + * + * Returns: + * 0 -> success + * -EINVAL -> Invalid arguments + * -EIO -> write failed, sector might be protected +**/ +int alt_qspi_controller_write_block +( + alt_flash_dev *flash_info, /** flash device info */ + 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 */ +) +{ + alt_u32 buffer_offset = 0; /** offset into data buffer to get write data */ + alt_u32 remaining_length = length; /** length left to write */ + alt_u32 write_offset = data_offset; /** offset into flash to write too */ + + alt_qspi_controller_dev *qspi_flash_info = (alt_qspi_controller_dev*)flash_info; + + /* + * 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 + || data_offset < 0 + || NULL == flash_info + || NULL == data + || data_offset >= qspi_flash_info->size_in_bytes + || block_offset >= qspi_flash_info->size_in_bytes + || length > (qspi_flash_info->sector_size - (data_offset - block_offset)) + || length < 0 + || (block_offset & (qspi_flash_info->sector_size - 1)) != 0) + { + return -EINVAL; + } + + /* + * Do writes one 32-bit word at a time. + * 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 */ + alt_u32 padding = 0; /** bytes to pad the next word that is written */ + alt_u32 bytes_to_copy = sizeof(alt_u32); /** number of bytes from source to copy */ + + /* + * 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))) + { + /* + * data is not word aligned + * calculate padding bytes need to add before start of a data offset + */ + padding = write_offset & (sizeof(alt_u32) - 1); + + /* update variables to account for padding being added */ + bytes_to_copy -= padding; + + if(bytes_to_copy > remaining_length) + { + bytes_to_copy = remaining_length; + } + + write_offset = write_offset - padding; + if(0 != (write_offset & (sizeof(alt_u32) - 1))) + { + return -EINVAL; + } + } + else + { + if(bytes_to_copy > remaining_length) + { + bytes_to_copy = remaining_length; + } + } + + /* prepare the word to be written */ + memcpy((((void*)&word_to_write)) + padding, ((void*)data) + buffer_offset, bytes_to_copy); + + /* update offset and length variables */ + buffer_offset += bytes_to_copy; + remaining_length -= bytes_to_copy; + + /* write to flash 32 bits at a time */ + IOWR_32DIRECT(qspi_flash_info->data_base, write_offset, word_to_write); + + /* check whether write triggered a illegal write interrupt */ + if((IORD_ALTERA_QSPI_CONTROLLER_ISR(qspi_flash_info->csr_base) & + 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, + ALTERA_QSPI_CONTROLLER_ISR_ILLEGAL_WRITE_MASK ); + return -EIO; /** write failed, sector might be protected */ + } + + /* update current offset */ + write_offset = write_offset + sizeof(alt_u32); + } + + return 0; +} + +/** + * alt_qspi_controller_write + * + * Program the data into the flash at the selected address. + * + * The different between this function and alt_qspi_controller_write_block function + * is that this function (alt_qspi_controller_write) will automatically erase a block as needed + * Arguments: + * - *flash_info: Pointer to QSPI flash device structure. + * - offset: Byte offset (unaligned access) of write to flash memory. For best performance, + * word(32 bits - aligned access) offset of write is recommended. + * - *src_addr: source buffer + * - length: size of writing + * + * Returns: + * 0 -> success + * -EINVAL -> Invalid arguments + * -EIO -> write failed, sector might be protected + * +**/ +int 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 */ +) +{ + alt_32 ret_code = 0; + + alt_qspi_controller_dev *qspi_flash_info = NULL; + + alt_u32 write_offset = offset; /** address of next byte to write */ + alt_u32 remaining_length = length; /** length of write data left to be written */ + alt_u32 buffer_offset = 0; /** offset into source buffer to get write data */ + alt_u32 i = 0; + + /* return -EINVAL if flash_info and src_addr are NULL */ + if(NULL == flash_info || NULL == src_addr) + { + return -EINVAL; + } + + qspi_flash_info = (alt_qspi_controller_dev*)flash_info; + + /* 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); + + if(0 != ret_code) + { + return ret_code; + } + + /* + * 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++) + { + alt_u32 block_offset = 0; /** block offset in byte addressing */ + alt_u32 offset_within_current_sector = 0; /** offset into current sector to write */ + alt_u32 length_to_write = 0; /** length to write to current sector */ + + if(0 >= remaining_length) + { + break; /* out of data to write */ + } + + /* calculate current sector/block offset in byte addressing */ + block_offset = write_offset & ~(qspi_flash_info->sector_size - 1); + + /* calculate offset into sector/block if there is one */ + if(block_offset != write_offset) + { + offset_within_current_sector = write_offset - block_offset; + } + + /* erase sector */ + ret_code = alt_qspi_controller_erase_block(flash_info, block_offset); + + if(0 != ret_code) + { + return ret_code; + } + + /* 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, + remaining_length); + + /* write data to erased block */ + ret_code = alt_qspi_controller_write_block(flash_info, block_offset, write_offset, + src_addr + buffer_offset, length_to_write); + + + if(0 != ret_code) + { + return ret_code; + } + + /* update remaining length and buffer_offset pointer */ + remaining_length -= length_to_write; + buffer_offset += length_to_write; + write_offset += length_to_write; + } + + return ret_code; +} + +/** + * alt_qspi_controller_read + * + * There's no real need to use this function as opposed to using memcpy directly. It does + * do some sanity checks on the bounds of the read. + * + * Arguments: + * - *flash_info: Pointer to general flash device structure. + * - offset: offset read from flash memory. + * - *dest_addr: destination buffer + * - length: size of reading + * + * Returns: + * 0 -> success + * -EINVAL -> Invalid arguments +**/ +int 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 */ +) +{ + alt_32 ret_code = 0; + alt_qspi_controller_dev *qspi_flash_info = NULL; + + /* return -EINVAL if flash_info and dest_addr are NULL */ + if(NULL == flash_info || NULL == dest_addr) + { + return -EINVAL; + } + + qspi_flash_info = (alt_qspi_controller_dev*)flash_info; + + /* validate arguments */ + ret_code = alt_qspi_validate_read_write_arguments(qspi_flash_info, offset, length); + + /* copy data from flash to destination address */ + if(0 == ret_code) + { + memcpy(dest_addr, (alt_u8*)qspi_flash_info->data_base + offset, length); + } + + return ret_code; +} + +/** + * altera_qspi_controller_init + * + * alt_sys_init.c will call this function automatically through macro + * + * Information in system.h is checked against expected values that are determined by the silicon_id. + * If the information doesn't match then this system is configured incorrectly. Most likely the wrong + * type of EPCS or EPCQ/QSPI device was selected when instantiating the soft IP. + * + * Arguments: + * - *flash: Pointer to QSPI flash device structure. + * + * Returns: + * 0 -> success + * -EINVAL -> Invalid arguments. + * -ENODEV -> System is configured incorrectly. +**/ +alt_32 altera_qspi_controller_init(alt_qspi_controller_dev *flash) +{ + alt_u32 silicon_id = 0; + alt_u32 size_in_bytes = 0; + alt_u32 number_of_sectors = 0; + + /* return -EINVAL if flash is NULL */ + if(NULL == flash) + { + return -EINVAL; + } + + /* return -ENODEV if CSR slave is not attached */ + if(NULL == (void *)flash->csr_base) + { + return -ENODEV; + } + + + /* + * If flash is an EPCQ/QSPI device, we read the QSPI_RD_RDID register for the ID + * If flash is an EPCS device, we read the QSPI_RD_SID register for the ID + * + * Whether or not the flash is a EPCQ, QSPI or EPCS is indicated in the system.h. The system.h gets + * this value from the hw.tcl of the IP. If this value is set incorrectly, then things will go + * badly. + * + * 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) + { + /* 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); + silicon_id &= ALTERA_QSPI_CONTROLLER_RDID_MASK; + + /* 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) + { + case ALTERA_QSPI_CONTROLLER_RDID_QSPI16: + { + number_of_sectors = 32; + break; + } + case ALTERA_QSPI_CONTROLLER_RDID_QSPI32: + { + number_of_sectors = 64; + break; + } + case ALTERA_QSPI_CONTROLLER_RDID_QSPI64: + { + number_of_sectors = 128; + break; + } + case ALTERA_QSPI_CONTROLLER_RDID_QSPI128: + { + number_of_sectors = 256; + break; + } + case ALTERA_QSPI_CONTROLLER_RDID_QSPI256: + { + number_of_sectors = 512; + break; + } + case ALTERA_QSPI_CONTROLLER_RDID_QSPI512: + { + number_of_sectors = 1024; + break; + } + case ALTERA_QSPI_CONTROLLER_RDID_QSPI1024: + { + number_of_sectors = 2048; + break; + } + default: + { + return -ENODEV; + } + } + } + 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); + silicon_id &= ALTERA_QSPI_CONTROLLER_SID_MASK; + + /* Determine which EPCS device so we can figure out various properties */ + switch(silicon_id) + { + case ALTERA_QSPI_CONTROLLER_SID_EPCS16: + { + number_of_sectors = 32; + break; + } + case ALTERA_QSPI_CONTROLLER_SID_EPCS64: + { + number_of_sectors = 128; + break; + } + case ALTERA_QSPI_CONTROLLER_SID_EPCS128: + { + number_of_sectors = 256; + break; + } + default: + { + return -ENODEV; + } + } + } + + /* Calculate size of flash based on number of sectors */ + size_in_bytes = number_of_sectors * flash->sector_size; + + /* + * 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 || + number_of_sectors != flash->number_of_sectors) + { + flash->dev.number_of_regions = 0; + return -ENODEV; + } + else + { + flash->silicon_id = silicon_id; + flash->number_of_sectors = number_of_sectors; + + /* + * 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; + flash->dev.region_info[0].offset = 0; + flash->dev.region_info[0].region_size = size_in_bytes; + flash->dev.region_info[0].number_of_blocks = number_of_sectors; + flash->dev.region_info[0].block_size = flash->sector_size; + } + + + /* + * Register this device as a valid flash device type + * + * Only register the device if it's configured correctly. + */ + alt_flash_device_register(&(flash->dev)); + + + return 0; +} + + +/* + * Private API + * + * Helper functions used by Public API functions. + * + * Arguments: + * - *flash_info: Pointer to QSPI flash device structure. + * - offset: Offset of read/write from base address. + * - length: Length of read/write in bytes. + * + * Returns: + * 0 -> success + * -EINVAL -> Invalid arguments + */ +/** + * Used to check that arguments to a read or write are valid + */ +ALT_INLINE alt_32 static 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 */ +) +{ + alt_qspi_controller_dev *qspi_flash_info = NULL; + alt_u32 start_address = 0; + alt_32 end_address = 0; + + /* return -EINVAL if flash_info is NULL */ + if(NULL == flash_info) + { + return -EINVAL; + } + + qspi_flash_info = (alt_qspi_controller_dev*)flash_info; + + start_address = qspi_flash_info->data_base + offset; /** first address of read or write */ + end_address = start_address + length; /** last address of read or write (not inclusive) */ + + /* make sure start and end address is less then the end address of the flash */ + if( + start_address >= qspi_flash_info->data_end || + end_address >= qspi_flash_info->data_end || + offset < 0 || + length < 0 + ) + { + return -EINVAL; + } + + return 0; +} + +/* + * Private function that polls write in progress bit QSPI_RD_STATUS. + * + * Write in progress will be set if any of the following operations are in progress: + * -WRITE STATUS REGISTER + * -WRITE NONVOLATILE CONFIGURATION REGISTER + * -PROGRAM + * -ERASE + * + * Assumes QSPI was configured correctly. + * + * If ALTERA_QSPI_CONTROLLER_1US_TIMEOUT_VALUE is set, the function will time out after + * a period of time determined by that value. + * + * Arguments: + * - *qspi_flash_info: Pointer to QSPI flash device structure. + * + * Returns: + * 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) +{ + /* 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; + alt_u16 counter = 0; +#endif + + /* return -EINVAL if qspi_flash_info is NULL */ + if(NULL == qspi_flash_info) + { + return -EINVAL; + } + + /* 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 */ +#if ALTERA_QSPI_CONTROLLER_1US_TIMEOUT_VALUE > 0 + if(timeout <= counter ) + { + return -ETIME; + } + + counter++; +#endif + + } + + return 0; +} + + diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_msgdma.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_msgdma.c new file mode 100644 index 0000000..db8449c --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_msgdma.c @@ -0,0 +1,1806 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ +#include +#include +#include +#include +#include "altera_msgdma_descriptor_regs.h" +#include "altera_msgdma_csr_regs.h" +#include "altera_msgdma_response_regs.h" +#include "io.h" +#include "altera_msgdma.h" +#include "priv/alt_busy_sleep.h" +#include "sys/alt_errno.h" +#include "sys/alt_irq.h" +#include "sys/alt_stdio.h" +#include "sys/alt_cache.h" + + + + +/******************************************************************************* + * Private API + ******************************************************************************/ +static int alt_msgdma_write_standard_descriptor ( + alt_u32 *csr_base, + alt_u32 *descriptor_base, + alt_msgdma_standard_descriptor *descriptor); +static int alt_msgdma_write_extended_descriptor ( + alt_u32 *csr_base, + alt_u32 *descriptor_base, + alt_msgdma_extended_descriptor *descriptor); +static void alt_msgdma_irq(void *context); +static int alt_msgdma_construct_standard_descriptor( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control); +static int alt_msgdma_construct_extended_descriptor( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u8 write_burst_count, + alt_u16 read_stride, + alt_u16 write_stride); +static int alt_msgdma_descriptor_async_transfer ( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *standard_desc, + alt_msgdma_extended_descriptor *extended_desc); +static int alt_msgdma_descriptor_sync_transfer ( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *standard_desc, + alt_msgdma_extended_descriptor *extended_desc); +/* The list of registered msgdma components */ +ALT_LLIST_HEAD(alt_msgdma_list); + +/* + * Functions for writing descriptor structure to the dispatcher. If you disable + * some of the extended features in the hardware then you should pass in 0 for + * that particular descriptor element. These disabled elements will not be + * buffered by the dispatcher block. + * + * This function is non-blocking and will return an error code if there is no + * room to write another descriptor to the dispatcher. It is recommended to call + * 'read_descriptor_buffer_full' and make sure it returns '0' before calling + * this function. + */ +static int alt_msgdma_write_standard_descriptor ( + alt_u32 *csr_base, + alt_u32 *descriptor_base, + alt_msgdma_standard_descriptor *descriptor) +{ + if (0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(csr_base) & + ALTERA_MSGDMA_CSR_DESCRIPTOR_BUFFER_FULL_MASK)) + { + /*at least one descriptor buffer is full, returning so that this function + is non-blocking*/ + return -ENOSPC; + } + + IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS(descriptor_base, + (alt_u32)descriptor->read_address); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS(descriptor_base, + ( alt_u32)descriptor->write_address); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_LENGTH(descriptor_base, + descriptor->transfer_length); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_CONTROL_STANDARD(descriptor_base, + descriptor->control); + return 0; +} + +/* + * This function is used for writing extended descriptors to the dispatcher. + It handles only 32-bit descriptors. + */ +static int alt_msgdma_write_extended_descriptor ( + alt_u32 *csr_base, + alt_u32 *descriptor_base, + alt_msgdma_extended_descriptor *descriptor) +{ + if (0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(csr_base) & + ALTERA_MSGDMA_CSR_DESCRIPTOR_BUFFER_FULL_MASK)) + { + /*at least one descriptor buffer is full, returning so that this function + is non-blocking*/ + return -ENOSPC; + } + + IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS( + descriptor_base, + (alt_u32)descriptor->read_address_low); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS( + descriptor_base, + (alt_u32)descriptor->write_address_low); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_LENGTH( + descriptor_base, + descriptor->transfer_length); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_SEQUENCE_NUMBER( + descriptor_base, + descriptor->sequence_number); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_BURST( + descriptor_base, + descriptor->read_burst_count); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_BURST( + descriptor_base, + descriptor->write_burst_count); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_STRIDE( + descriptor_base, + descriptor->read_stride); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_STRIDE( + descriptor_base, + descriptor->write_stride); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_READ_ADDRESS_HIGH(descriptor_base, 0); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_WRITE_ADDRESS_HIGH(descriptor_base, 0); + IOWR_ALTERA_MSGDMA_DESCRIPTOR_CONTROL_ENHANCED( + descriptor_base, + descriptor->control); + return 0; +} + +/* + * alt_msgdma_irq() + * + * Interrupt handler for the Modular Scatter-Gather DMA controller. + */ +static void alt_msgdma_irq(void *context) +{ + alt_msgdma_dev *dev = (alt_msgdma_dev *) context; + alt_irq_context cpu_sr; + alt_u32 temporary_control; + + + /* disable global interrupt*/ + if (dev->prefetcher_enable) + { + temporary_control = + IORD_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base) + & ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_CLR_MASK; + + IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, + temporary_control); + + /* clear the IRQ status- W1C */ + IOWR_ALT_MSGDMA_PREFETCHER_STATUS(dev->prefetcher_base, + ALT_MSGDMA_PREFETCHER_STATUS_IRQ_SET_MASK); + } + else + { + temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base) + & (~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK); + + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, temporary_control); + /* clear the IRQ status */ + IOWR_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base, + ALTERA_MSGDMA_CSR_IRQ_SET_MASK); + } + + /* + * 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) + { + cpu_sr = alt_irq_disable_all(); + dev->callback (dev->callback_context); + alt_irq_enable_all(cpu_sr); + } + + /* enable global interrupt */ + if (dev->prefetcher_enable) + { + temporary_control = + IORD_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base) + | ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_SET_MASK; + + IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, + temporary_control); + } + else + { + temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base) + | (ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK); + + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, temporary_control); + } + + return; +} +/* + * Helper functions for constructing mm_to_st, st_to_mm, mm_to_mm standard + * descriptors. Unnecessary elements are set to 0 for completeness and will be + * ignored by the hardware. + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to argument which + * has larger value than hardware setting value) + */ +static int alt_msgdma_construct_standard_descriptor( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control) +{ + if(dev->max_byte < length || + dev->enhanced_features != 0 + ) + { + return -EINVAL; + } + descriptor->read_address = read_address; + descriptor->write_address = write_address; + descriptor->transfer_length = length; + descriptor->control = control | ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK; + + return 0; +} + +/* + * Helper functions for constructing mm_to_st, st_to_mm, mm_to_mm extended + * descriptors. Unnecessary elements are set to 0 for completeness and will be + * ignored by the hardware. + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to argument which + * has larger value than hardware setting value) + */ +static int alt_msgdma_construct_extended_descriptor( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u8 write_burst_count, + alt_u16 read_stride, + alt_u16 write_stride) +{ + if(dev->max_byte < length || + dev->max_stride < read_stride || + dev->max_stride < write_stride || + dev->enhanced_features != 1 + ) + { + return -EINVAL; + } + + descriptor->read_address_low = read_address; + descriptor->write_address_low = write_address; + descriptor->transfer_length = length; + descriptor->sequence_number = sequence_number; + descriptor->read_burst_count = read_burst_count; + descriptor->write_burst_count = write_burst_count; + descriptor->read_stride = read_stride; + descriptor->write_stride = write_stride; + descriptor->read_address_high = NULL; + descriptor->write_address_high = NULL; + descriptor->control = control | ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK; + + return 0 ; + +} + +/* + * Helper functions for descriptor in async transfer. + * Arguments:# This driver supports HAL types + * - *dev: Pointer to msgdma device (instance) structure. + * - *standard_desc: Pointer to single standard descriptor. + * - *extended_desc: Pointer to single extended descriptor. + * + *note: Either one of both *standard_desc and *extended_desc must + * be assigned with NULL, another with proper pointer value. + * Failing to do so can cause the function return with "-EPERM " + * + * If a callback routine has been previously registered with this + * particular msgdma controller, transfer will be set up to enable interrupt + * generation. It is the responsibility of the application developer to check + * source interruption, status completion and creating suitable interrupt + * handling. Note: "stop on error" of CSR control register is always masking + * within this function. The CSR control can be set by user through calling + * "alt_register_callback" by passing user used defined control setting. + * + * Returns: + * 0 -> success + * -ENOSPC -> FIFO descriptor buffer is full + * -EPERM -> operation not permitted due to descriptor type conflict + * -ETIME -> Time out and skipping the looping after 5 msec. + */ +static int alt_msgdma_descriptor_async_transfer ( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *standard_desc, + alt_msgdma_extended_descriptor *extended_desc) +{ + alt_u32 control = 0; + alt_irq_context context = 0; + alt_u16 counter = 0; + alt_u32 fifo_read_fill_level = ( + IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) & + 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) & + ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_MASK) >> + 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) || + (dev->descriptor_fifo_depth <= fifo_read_fill_level)) + { + /*at least one write or read FIFO descriptor buffer is full, + returning so that this function is non-blocking*/ + return -ENOSPC; + } + + /* + * 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); + + /* 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; + /* making sure the read-modify-write below can't be pre-empted */ + context = alt_irq_disable_all(); + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, control); + /* + * Clear any (previous) status register information + * that might occlude our error checking later. + */ + IOWR_ALTERA_MSGDMA_CSR_STATUS( + dev->csr_base, + IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)); + alt_irq_enable_all(context); + + if (NULL != standard_desc && NULL == extended_desc) + { + /*writing descriptor structure to the dispatcher, wait until descriptor + write is succeed*/ + while(0 != alt_msgdma_write_standard_descriptor ( + dev->csr_base, dev->descriptor_base, standard_desc)) + { + alt_busy_sleep(1); /* delay 1us */ + if(5000 <= counter) /* time_out if waiting longer than 5 msec */ + { + alt_printf("time out after 5 msec while waiting" + " free FIFO buffer for storing standard descriptor\n"); + + /* + * 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); + + return -ETIME; + } + counter++; + } + } + else if (NULL == standard_desc && NULL != extended_desc) + { + counter = 0; /* reset counter */ + /*writing descriptor structure to the dispatcher, wait until descriptor + write is succeed*/ + while(0 != alt_msgdma_write_extended_descriptor ( + dev->csr_base, + dev->descriptor_base, + extended_desc)) + { + alt_busy_sleep(1); /* delay 1us */ + if(5000 <= counter) /* time_out if waiting longer than 5 msec */ + { + alt_printf("time out after 5 msec while waiting free FIFO buffer" + " for storing extended descriptor\n"); + /* + * 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); + + return -ETIME; + } + counter++; + } + } + else + { + /* + * 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); + + /* operation not permitted due to descriptor type conflict */ + return -EPERM; + } + + /* + * 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) + { + + control |= (dev->control | + ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK | + ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK ); + control &= (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK); + /* making sure the read-modify-write below can't be pre-empted */ + context = alt_irq_disable_all(); + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, control); + alt_irq_enable_all(context); + } + /* + * No callback has been registered. Set up controller to: + * - Run + * - Stop on an error with any particular descriptor + * - Disable interrupt generation + */ + else + { + control |= (dev->control | + ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK ); + control &= (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK) & + (~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK); + /* making sure the read-modify-write below can't be pre-empted */ + context = alt_irq_disable_all(); + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, control); + alt_irq_enable_all(context); + } + + /* + * 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); + + return 0; +} + +/* + * Helper functions for descriptor in sync transfer. + * Arguments: + * - *dev: Pointer to msgdma device (instance) structure. + * - *standard_desc: Pointer to single standard descriptor. + * - *extended_desc: Pointer to single extended descriptor. + * + * Note: Either one of both *standard_desc and *extended_desc must + * be assigned with NULL, another with proper pointer value. + * Failing to do so can cause the function return with "-EPERM " + * + * "stop on error" of CSR control register is always being masked and interrupt + * is always disabled within this function. + * The CSR control can be set by user through calling "alt_register_callback" + * with passing user defined control setting. + * + * Returns: + * 0 -> success + * error -> errors or conditions causing msgdma stop issuing commands to masters. + * check the bit set in the error with CSR status register. + * -EPERM -> operation not permitted due to descriptor type conflict + * -ETIME -> Time out and skipping the looping after 5 msec. + */ +static int alt_msgdma_descriptor_sync_transfer ( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *standard_desc, + alt_msgdma_extended_descriptor *extended_desc) +{ + alt_u32 control=0; + alt_irq_context context=0; + alt_u32 csr_status = 0; + alt_u16 counter = 0; + alt_u32 fifo_read_fill_level = ( + IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) & + 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) & + ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_MASK) >> + ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_OFFSET; + alt_u32 error = ALTERA_MSGDMA_CSR_STOPPED_ON_ERROR_MASK | + 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) || + (dev->descriptor_fifo_depth <= fifo_read_fill_level)) + { + alt_busy_sleep(1); /* delay 1us */ + if(5000 <= counter) /* time_out if waiting longer than 5 msec */ + { + alt_printf("time out after 5 msec while waiting free FIFO buffer" + " for storing descriptor\n"); + return -ETIME; + } + counter++; + fifo_read_fill_level = ( + IORD_ALTERA_MSGDMA_CSR_DESCRIPTOR_FILL_LEVEL(dev->csr_base) & + 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) & + ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_MASK) >> + ALTERA_MSGDMA_CSR_WRITE_FILL_LEVEL_OFFSET; + } + + /* + * 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); + + /* 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(); + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, + ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK); + /* + * Clear any (previous) status register information + * that might occlude our error checking later. + */ + IOWR_ALTERA_MSGDMA_CSR_STATUS( + dev->csr_base, + IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)); + + if (NULL != standard_desc && NULL == extended_desc) + { + counter = 0; /* reset counter */ + /*writing descriptor structure to the dispatcher, wait until descriptor + write is succeed*/ + while(0 != alt_msgdma_write_standard_descriptor ( + dev->csr_base, dev->descriptor_base, standard_desc)) + { + alt_busy_sleep(1); /* delay 1us */ + if(5000 <= counter) /* time_out if waiting longer than 5 msec */ + { + alt_printf("time out after 5 msec while writing standard" + " descriptor to FIFO\n"); + + /* + * 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); + + return -ETIME; + } + counter++; + } + } + else if (NULL == standard_desc && NULL != extended_desc) + { + counter = 0; /* reset counter */ + /*writing descriptor structure to the dispatcher, wait until descriptor + write is succeed*/ + while(0 != alt_msgdma_write_extended_descriptor ( + dev->csr_base, dev->descriptor_base, extended_desc)) + { + alt_busy_sleep(1); /* delay 1us */ + if(5000 <= counter) /* time_out if waiting longer than 5 msec */ + { + alt_printf("time out after 5 msec while writing extended" + " descriptor to FIFO\n"); + + /* + * 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); + + return -ETIME; + } + counter++; + } + } + else + { + /* + * 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); + + /* operation not permitted due to descriptor type conflict */ + return -EPERM; + } + + /* + * 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, + (dev->control | + ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK ) & + (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK) & + (~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK)) ; + + alt_irq_enable_all(context); + + counter = 0; /* reset counter */ + + csr_status = IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base); + + /* 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)) + { + alt_busy_sleep(1); /* delay 1us */ + if(5000 <= counter) /* time_out if waiting longer than 5 msec */ + { + alt_printf("time out after 5 msec while waiting for any pending" + " transfer complete\n"); + + /* + * 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); + + return -ETIME; + } + counter++; + csr_status = IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base); + } + + + /*Errors or conditions causing the dispatcher stopping issuing read/write + commands to masters*/ + if(0 != (csr_status & error)) + { + /* + * 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); + + return error; + } + + /* 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) | + ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK; + /* making sure the read-modify-write below can't be pre-empted */ + context = alt_irq_disable_all(); + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, control); + /* + * Clear any (previous) status register information + * that might occlude our error checking later. + */ + IOWR_ALTERA_MSGDMA_CSR_STATUS( + dev->csr_base, + IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)); + alt_irq_enable_all(context); + + /* + * 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); + + return 0; + +} + +/* + * Functions for constructing standard descriptors. Unnecessary elements are + * set to 0 for completeness and will be ignored by the hardware. + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to argument which + * has larger value than hardware setting value) + */ +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) +{ + return alt_msgdma_construct_standard_descriptor(dev, descriptor, NULL, + write_address, length, control); +} + +int 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) +{ + return alt_msgdma_construct_standard_descriptor(dev, descriptor, read_address, + NULL, length, control); + +} + +int alt_msgdma_construct_standard_mm_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_standard_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control) +{ + return alt_msgdma_construct_standard_descriptor(dev, descriptor, read_address, + write_address, length, control); +} + +/* + * Functions for constructing extended descriptors. If you disable some of the + * extended features in the hardware then you should pass in 0 for that + * particular descriptor element. These disabled elements will not be buffered + * by the dispatcher block. + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to argument which + * has larger value than hardware setting value) + */ +int alt_msgdma_construct_extended_st_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *descriptor, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 write_burst_count, + alt_u16 write_stride) +{ + return alt_msgdma_construct_extended_descriptor(dev, descriptor, + NULL, write_address, length, control, sequence_number, 0, + write_burst_count, 0, write_stride); +} + +int alt_msgdma_construct_extended_mm_to_st_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u16 read_stride) +{ + return alt_msgdma_construct_extended_descriptor(dev, descriptor, read_address, + NULL, length, control, sequence_number, read_burst_count, 0, + read_stride, 0); + +} + +int alt_msgdma_construct_extended_mm_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_extended_descriptor *descriptor, + alt_u32 *read_address, + alt_u32 *write_address, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u8 write_burst_count, + alt_u16 read_stride, + alt_u16 write_stride) +{ + return alt_msgdma_construct_extended_descriptor(dev, descriptor, + read_address, write_address, length, control, sequence_number, + read_burst_count, write_burst_count, read_stride, write_stride); + +} + +/********************** MSGDMA PREFETCHER PRIVATE APIs *************************/ + +/* + * Base functions for constructing mm_to_st, st_to_mm, mm_to_mm standard + * descriptors for the prefetcher. Unnecessary elements are set to 0 for + * completeness and will be ignored by the hardware. + * The descriptor created will be suitable for park since this API will set next_ptr + * to itself as park_mode requires. Additionally OWN_BY_HW bit left as 0 (owned by sw) + * until the prefetcher is started with this descriptor in the list. + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to argument which + * has larger value than hardware setting value) + */ +static int alt_msgdma_construct_prefetcher_standard_descriptor( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_standard_descriptor *descriptor, + alt_u32 read_address, + alt_u32 write_address, + alt_u32 length, + alt_u32 control) +{ + if(dev->max_byte < length || + dev->enhanced_features != 0 + ) + { + return -EINVAL; + } + descriptor->read_address = read_address; + descriptor->write_address = write_address; + descriptor->transfer_length = length; + /* have descriptor point to itself for park_mode */ + descriptor->next_desc_ptr = (alt_u32)descriptor; + + /* 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; + + return 0; +} + +/* + * Base functions for constructing mm_to_st, st_to_mm, mm_to_mm extended + * descriptors. Unnecessary elements are set to 0 for completeness and will be + * ignored by the hardware. The descriptor created will be suitable for park + * mode since this API will set next_ptr to itself as park_mode requires. + * Additionally OWN_BY_HW bit left as 0 (owned by sw) until the prefetcher is + * started with this descriptor in the list. + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to argument which + * has larger value than hardware setting value) + */ +static int alt_msgdma_construct_prefetcher_extended_descriptor( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_extended_descriptor *descriptor, + alt_u32 read_address_high, + alt_u32 read_address_low, + alt_u32 write_address_high, + alt_u32 write_address_low, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u8 write_burst_count, + alt_u16 read_stride, + alt_u16 write_stride) +{ + msgdma_addr64 node_addr; + + if(dev->max_byte < length || + dev->max_stride < read_stride || + dev->max_stride < write_stride || + dev->enhanced_features != 1 + ) + { + return -EINVAL; + } + + descriptor->read_address_high = read_address_high; + descriptor->read_address_low = read_address_low; + descriptor->write_address_high = write_address_high; + descriptor->write_address_low = write_address_low; + descriptor->transfer_length = length; + descriptor->sequence_number = sequence_number; + descriptor->read_burst_count = read_burst_count; + descriptor->write_burst_count = write_burst_count; + descriptor->read_stride = read_stride; + descriptor->write_stride = write_stride; + /* have descriptor point to itself */ + node_addr.u64 = (uintptr_t)descriptor; + descriptor->next_desc_ptr_low = node_addr.u32[0]; + descriptor->next_desc_ptr_high = node_addr.u32[1]; + + /* 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; + + return 0 ; +} + + +/********************** MSGDMA PREFETCHER PUBLIC APIs ************************/ + +/* + * Functions for constructing standard descriptors. Unnecessary elements are + * set to 0 for completeness and will be ignored by the hardware. + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to argument which + * has larger value than hardware setting value) + */ +int alt_msgdma_construct_prefetcher_standard_mm_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_standard_descriptor *descriptor, + alt_u32 read_address, + alt_u32 write_address, + alt_u32 length, + alt_u32 control) +{ + return alt_msgdma_construct_prefetcher_standard_descriptor(dev, descriptor, + read_address, write_address, length, control); +} + +int 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) +{ + return alt_msgdma_construct_prefetcher_standard_descriptor(dev, descriptor, + 0, write_address, length, control); +} + +int 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) +{ + return alt_msgdma_construct_prefetcher_standard_descriptor(dev, descriptor, + read_address, 0, length, control); +} + + +/* + * Functions for constructing extended descriptors. If you disable some of the + * extended features in the hardware then you should pass in 0 for that + * particular descriptor element. These disabled elements will not be buffered + * by the dispatcher block. + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to argument which + * has larger value than hardware setting value) + */ +int alt_msgdma_construct_prefetcher_extended_st_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_extended_descriptor *descriptor, + alt_u32 write_address_high, + alt_u32 write_address_low, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 write_burst_count, + alt_u16 write_stride) +{ + return alt_msgdma_construct_prefetcher_extended_descriptor(dev, descriptor, + 0, 0, write_address_high, write_address_low, length, control, + sequence_number, 0, write_burst_count, 0, write_stride); +} + +int alt_msgdma_construct_prefetcher_extended_mm_to_st_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_extended_descriptor *descriptor, + alt_u32 read_address_high, + alt_u32 read_address_low, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u16 read_stride) +{ + return alt_msgdma_construct_prefetcher_extended_descriptor(dev, descriptor, + read_address_high, read_address_low, 0, 0, length, control, + sequence_number, read_burst_count, 0, read_stride, 0); +} + +int alt_msgdma_construct_prefetcher_extended_mm_to_mm_descriptor ( + alt_msgdma_dev *dev, + alt_msgdma_prefetcher_extended_descriptor *descriptor, + alt_u32 read_address_high, + alt_u32 read_address_low, + alt_u32 write_address_high, + alt_u32 write_address_low, + alt_u32 length, + alt_u32 control, + alt_u16 sequence_number, + alt_u8 read_burst_count, + alt_u8 write_burst_count, + alt_u16 read_stride, + alt_u16 write_stride) +{ + return alt_msgdma_construct_prefetcher_extended_descriptor(dev, 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); + +} + +/* PREFETCHER linked list APIs */ +/* + * Function for adding standard descriptors to a standard descriptor list + * Returns: + * - status: return 0 (success) + * return -EINVAL (invalid argument, could be due to descriptor + * already being in the list, descriptor pointer being NULL, or + * 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) +{ + alt_msgdma_prefetcher_standard_descriptor *last_descr_ptr; + + if (descriptor == NULL) + { + return -EINVAL; /* this descriptor cannot be NULL */ + } + if (descriptor->next_desc_ptr != (alt_u32)descriptor) + { + return -EINVAL; /* descriptor.next_ptr must point to itself */ + } + if (*list == NULL) + { + *list = descriptor; /* make this root-node if list is empty */ + return 0; /* successfully added */ + } + if (*list == descriptor) + { + return -EINVAL; /* this descriptor cannot already be root-node */ + } + + /* get to last node in the list */ + last_descr_ptr = *list; /* start at list root-node */ + /* traverse list until you get the last node */ + while (last_descr_ptr->next_desc_ptr != (alt_u32)*list) + { + if (last_descr_ptr->next_desc_ptr == (alt_u32)descriptor) + { + return -EINVAL; /* descriptor cannot already be in the list */ + } + last_descr_ptr = + (alt_msgdma_prefetcher_standard_descriptor*)(last_descr_ptr->next_desc_ptr); + } + /* add this descriptor to end of list */ + last_descr_ptr->next_desc_ptr = (alt_u32)((uintptr_t)descriptor); + /* ensure new last pointer points the start of the list */ + descriptor->next_desc_ptr = (alt_u32)((uintptr_t)*list); + return 0; /* successfully added */ +} + +int alt_msgdma_prefetcher_add_extended_desc_to_list ( + alt_msgdma_prefetcher_extended_descriptor** list, + alt_msgdma_prefetcher_extended_descriptor* descriptor) +{ + alt_msgdma_prefetcher_extended_descriptor *last_descr_ptr; + msgdma_addr64 root_node_addr, next_node_addr; + + if (descriptor == NULL) + { + return -EINVAL; /* this descriptor cannot be NULL */ + } + + next_node_addr.u64 = (uintptr_t)descriptor; + if( (descriptor->next_desc_ptr_low != next_node_addr.u32[0]) || + (descriptor->next_desc_ptr_high != next_node_addr.u32[1])) + { + return -EINVAL; /* descriptor.next_ptr must point to itself */ + } + + if (*list == NULL) + { + *list = descriptor; /* make this the root-node if list is empty */ + return 0; + } + if (*list == descriptor) + { + return -EINVAL; /* this descriptor cannot already be root-node */ + } + + /* get to last node in the list */ + last_descr_ptr = *list; /* start at list root-node */ + /* the last nodes next ptr should point to the root node*/ + root_node_addr.u64 = (uintptr_t)*list; + + /* traverse list until you get the last node */ + while ((last_descr_ptr->next_desc_ptr_low != root_node_addr.u32[0]) + || (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; + if ((last_descr_ptr->next_desc_ptr_low == next_node_addr.u32[0]) + && (last_descr_ptr->next_desc_ptr_high == next_node_addr.u32[1])) + { + return -EINVAL; /* descriptor cannot already be in the list */ + } + /* go to next node in list, using 64 bit address */ + next_node_addr.u32[0] = last_descr_ptr->next_desc_ptr_low; + next_node_addr.u32[1] = last_descr_ptr->next_desc_ptr_high; + last_descr_ptr = + (alt_msgdma_prefetcher_extended_descriptor*)((uintptr_t)next_node_addr.u64); + } + /* add this descriptor to end of list */ + next_node_addr.u64 = (uintptr_t)descriptor; + last_descr_ptr->next_desc_ptr_low = next_node_addr.u32[0]; + last_descr_ptr->next_desc_ptr_high = next_node_addr.u32[1]; + /* ensure new last pointer points the beginning of the list */ + descriptor->next_desc_ptr_low = root_node_addr.u32[0]; + descriptor->next_desc_ptr_high = root_node_addr.u32[1]; + return 0; +} + +/* + * Function to set all the own-by-hw bits. This is called right before starting + * prefetcher since if the create descriptor APIs were used to create the descriptor + * list, then the set_by_hw bits are still set to SW owned. + * Note the owned bits are automatically set when using the + * alt_msgdma_start_prefetcher_with_std_desc_list function and in that case + * this function should not be used. + * This function includes options for setting the last descriptor in the + * chain to owned by software, and for flushing the descriptor list from dcache. + */ +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) +{ + alt_u32 descriptor_control_field = 0; + alt_msgdma_prefetcher_standard_descriptor *last_descr_ptr; + alt_u32 descriptor_count = 0; + + if (list == NULL) + { + return -EINVAL; /* this list cannot be empty */ + } + + /* update all nodes in the list */ + last_descr_ptr = list; /* start at list root-node */ + /* traverse list to update all of the nodes */ + while (last_descr_ptr->next_desc_ptr != (alt_u32)list) + { + /* get current value */ + descriptor_control_field = last_descr_ptr->control; + /* update own_by_hw bit only */ + last_descr_ptr->control = descriptor_control_field + | ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK; + /* go to next node in list */ + last_descr_ptr = + (alt_msgdma_prefetcher_standard_descriptor*)(last_descr_ptr->next_desc_ptr); + + descriptor_count++; + } + /* update the last node in the list, currently last_descr_ptr after while loop */ + descriptor_control_field = last_descr_ptr->control; /* get current value */ + /* update own_by_hw bit only */ + if (last_desc_owned_by_sw) + { + last_descr_ptr->control = descriptor_control_field + & ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK; + } + else { + last_descr_ptr->control = descriptor_control_field + | ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK; + } + + descriptor_count++; + + if (dcache_flush_desc_list) + { + alt_dcache_flush(list,sizeof(alt_msgdma_prefetcher_standard_descriptor) * descriptor_count); + } + + return 0; +} + +/* + * Function to set all the own-by-hw bits. This is called right before starting + * prefetcher since if the create descriptor APIs were used to create the descriptor + * list, then the set_by_hw bits are still set to SW owned. + * Note the owned bits are automatically set when using the + * alt_msgdma_start_prefetcher_with_extd_desc_list function and in that case + * this function should not be used. + * This function includes options for setting the last descriptor in the + * chain to owned by software, and for flushing the descriptor list from dcache. + */ +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) +{ + alt_u32 descriptor_control_field = 0; + msgdma_addr64 root_node_addr, next_node_addr; + alt_msgdma_prefetcher_extended_descriptor *last_descr_ptr; + alt_u32 descriptor_count = 0; + + if (list == NULL) + { + return -EINVAL; /* this list cannot be empty */ + } + + /* update all nodes in the list */ + last_descr_ptr = list; /* start at list root-node */ + /* the last nodes next ptr should point to the root node*/ + root_node_addr.u64 = (uintptr_t)list; + + /* traverse list until you get the last node */ + while ((last_descr_ptr->next_desc_ptr_low != root_node_addr.u32[0]) + || (last_descr_ptr->next_desc_ptr_high != root_node_addr.u32[1])) + { + /* start with current value */ + descriptor_control_field = last_descr_ptr->control; + /* update own_by_hw bit only */ + last_descr_ptr->control = descriptor_control_field + | ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK; + /* go to next node in list, using 64 bit address */ + next_node_addr.u32[0] = last_descr_ptr->next_desc_ptr_low; + next_node_addr.u32[1] = last_descr_ptr->next_desc_ptr_high; + last_descr_ptr = + (alt_msgdma_prefetcher_extended_descriptor*)((uintptr_t)next_node_addr.u64); + descriptor_count++; + } + /* 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 */ + /* update own_by_hw bit only */ + if (last_desc_owned_by_sw) + { + last_descr_ptr->control = descriptor_control_field + & ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK; + } + else { + last_descr_ptr->control = descriptor_control_field + | ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK; + } + + descriptor_count++; + + if (dcache_flush_desc_list) + { + alt_dcache_flush(list,sizeof(alt_msgdma_prefetcher_extended_descriptor) * descriptor_count); + } + + return 0; +} + + +/* + * Functions to start the prefetcher. Will return error if prefetcher already + * started. + * + * Arguments:# This driver supports HAL types + * - *dev: Pointer to msgdma device (instance) structure. + * - *standard_desc: Pointer to single standard descriptor OR *extended_desc: + * Pointer to single extended descriptor. + * - park_mode_en: setting for prefetcher park mode + * - poll_en: setting for poll_en (IF poll frequency still 0 this API will + * also set that to a default non-zero value) + * + *note: Must call API specific to descriptor type. Either + * alt_msgdma_start_prefetcher_with_std_desc_list OR + * alt_msgdma_start_prefetcher_with_extd_desc_list + * where the list paratmeter is the root-node of your linked list. Then those + * APIs will call the base function accordingly. + * + * If a callback routine has been previously registered with this + * particular msgdma controller, transfer will be set up to enable interrupt + * generation. It is the responsibility of the application developer to check + * source interruption, status completion and creating suitable interrupt + * handling. + * Note: "stop on error" of CSR control register is always masking within this + * function. The CSR control can be set by user through calling + * "alt_register_callback" by passing user used defined control setting. + * + * Returns: + * 0 -> success + * -EBUSY -> prefetcher busy processing list already, it is up to user to stop + * prefetcher/dispatcher correctly before calling this function. + * if already busy will always return error. + */ + +/* + * Base function to start prefetcher. + */ +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) +{ + alt_u32 prefetcher_ctl = 0; + alt_u32 dispatcher_ctl = 0; + alt_irq_context context = 0; + + /* use helper struct to get easy access to hi/low address */ + msgdma_addr64 root_node_addr; + root_node_addr.u64 = list_addr; + + /* + * 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); + + /* case where prefetcher already started, return busy error */ + prefetcher_ctl = IORD_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base); + if(ALT_MSGDMA_PREFETCHER_CTRL_RUN_GET(prefetcher_ctl)){ + /* release the registers semaphore */ + ALT_SEM_POST (dev->regs_lock); + return -EBUSY; + } + + /* 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; + + /* making sure the read-modify-write below can't be pre-empted */ + context = alt_irq_disable_all(); + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, dispatcher_ctl); + /* + * Clear any (previous) status register information + * that might occlude our error checking later. + */ + IOWR_ALTERA_MSGDMA_CSR_STATUS( dev->csr_base, + IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)); + + alt_irq_enable_all(context); + + /* + * 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) + { + dispatcher_ctl |= (dev->control | ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK + | ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK ); + dispatcher_ctl &= (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK); + + prefetcher_ctl |= ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_SET_MASK; + /* making sure the read-modify-write below can't be pre-empted */ + context = alt_irq_disable_all(); + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, dispatcher_ctl); + IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, prefetcher_ctl); + alt_irq_enable_all(context); + } + /* + * No callback has been registered. Set up dispatcher to: + * - Run + * - Stop on an error with any particular descriptor + * - Disable interrupt generation + */ + else + { + dispatcher_ctl |= (dev->control | ALTERA_MSGDMA_CSR_STOP_ON_ERROR_MASK); + dispatcher_ctl &= (~ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK) + & (~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK); + prefetcher_ctl &= ALT_MSGDMA_PREFETCHER_CTRL_GLOBAL_INTR_EN_CLR_MASK; + /* making sure the read-modify-write below can't be pre-empted */ + context = alt_irq_disable_all(); + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, dispatcher_ctl); + IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, prefetcher_ctl); + 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, + root_node_addr.u32[0]); + IOWR_ALT_MSGDMA_PREFETCHER_NEXT_DESCRIPTOR_PTR_HIGH(dev->prefetcher_base, + root_node_addr.u32[1]); + + /* set park-mode */ + if (park_mode_en){ + prefetcher_ctl |= ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_SET_MASK; + } + else { + prefetcher_ctl &= ALT_MSGDMA_PREFETCHER_CTRL_PARK_MODE_CLR_MASK; + } + + /* set poll-en */ + if (poll_en){ + prefetcher_ctl |= ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_MASK; + if(IORD_ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLLING_FREQ( + dev->prefetcher_base) == 0){ + /* set poll frequency to some non-zero default value */ + IOWR_ALT_MSGDMA_PREFETCHER_DESCRIPTOR_POLLING_FREQ( + dev->prefetcher_base, 0xFF); + } + } + else { + prefetcher_ctl &= ALT_MSGDMA_PREFETCHER_CTRL_DESC_POLL_EN_CLR_MASK; + } + + /* set the prefetcher run bit */ + prefetcher_ctl |= ALT_MSGDMA_PREFETCHER_CTRL_RUN_SET_MASK; + /* start the dma since run bit is set */ + IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, prefetcher_ctl); + + /* + * 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); + + return 0; +} + +/* + * Public functions to start prefetcher. + * Note: The option last_desc_owned_by_sw has been added. + * The last descriptor in a chain usually must be set to owned by sw. + * In this case, the last descriptor does not actually transfer data. + * When set, this option will set all descriptors in a chain to hw owned + * and set the last to sw owned before starting the prefetcher. + * Note: The option dcache_flush_desc_list has been added. + * When set this will call a function to flush the + * descriptor list from dcache before starting the prefetcher. + * If park_mode_en is not set, and poll_en is not set, it is recommended to + * set both last_desc_owned_by_sw and dcache_flush_desc_list for proper + * prefetcher operation. + * Note: If options last_desc_owned_by_sw and dcache_flush_desc_list are not set + * This function will behave exactly the same as in previous revisions. + * Note: It is not necessary to call any functions to set the owned by hw bits + * before using these functions. + */ +int alt_msgdma_start_prefetcher_with_std_desc_list ( + alt_msgdma_dev *dev, + 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) +{ + if (alt_msgdma_prefetcher_set_std_list_own_by_hw_bits(list,last_desc_owned_by_sw,dcache_flush_desc_list) != 0) + { + return -EINVAL; + } + + return alt_msgdma_start_prefetcher_with_list_addr (dev, (uintptr_t)list, + park_mode_en, poll_en); +} + +int alt_msgdma_start_prefetcher_with_extd_desc_list ( + alt_msgdma_dev *dev, + 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) +{ + + if (alt_msgdma_prefetcher_set_extd_list_own_by_hw_bits(list,last_desc_owned_by_sw,dcache_flush_desc_list) != 0) + { + return -EINVAL; + } + + return alt_msgdma_start_prefetcher_with_list_addr (dev, (uintptr_t)list, + park_mode_en, poll_en); +} + + +/* + * alt_msgdma_open - Retrieve a pointer to the msgdma + * + * Search the list of registered msgdma for one with the supplied name. + * + * The return value will be NULL on failure, and non-NULL otherwise. + * + * Arguments: + * - *name: Character pointer to name of msgdma peripheral as registered + * with the HAL. For example, an msgdma controller named "msgdma_0" + * in Qsys would be opened by asking for "/dev/msgdma_0_csr". + * + * 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) +{ + alt_msgdma_dev* dev = NULL; + + dev = (alt_msgdma_dev*) alt_find_dev (name, &alt_msgdma_list); + + if (NULL == dev) + { + ALT_ERRNO = ENODEV; + } + + return dev; +} + + +/* + * alt_msgdma_init() + * + * Initializes the Modular Scatter-Gather DMA controller. This routine is called + * from the ALTERA_MSGDMA_INIT macro and is called automatically + * by alt_sys_init.c + * + * 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) +{ + extern alt_llist alt_msgdma_list; + alt_u32 temporary_control; + int error; + + if (dev->prefetcher_enable) + { + /* start prefetcher reset sequence */ + IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, + ALT_MSGDMA_PREFETCHER_CTRL_RESET_SET_MASK); + /* wait until hw clears the bit */ + while(ALT_MSGDMA_PREFETCHER_CTRL_RESET_GET( + IORD_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base))); + /* + * This reset is intended to be used along with reset dispatcher in + * dispatcher core. Once the reset sequence in prefetcher core has + * completed, software is expected to reset the dispatcher core, + * and polls for dispatcher's reset sequence to be completed. + */ + } + + /* 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); + while(0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base) + & ALTERA_MSGDMA_CSR_RESET_STATE_MASK)); + /* + * Disable interrupts, halt descriptor processing, + * and clear status register content + */ + + /* disable global interrupt */ + temporary_control = IORD_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base) + & (~ALTERA_MSGDMA_CSR_GLOBAL_INTERRUPT_MASK); + /* stopping descriptor */ + temporary_control |= ALTERA_MSGDMA_CSR_STOP_DESCRIPTORS_MASK; + IOWR_ALTERA_MSGDMA_CSR_CONTROL(dev->csr_base, temporary_control); + + /* clear the CSR status register */ + IOWR_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base, + IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base)); + + if (dev->prefetcher_enable) + { + /* clear all status bits that are set, since theyre W1C */ + IOWR_ALT_MSGDMA_PREFETCHER_STATUS(dev->prefetcher_base, + 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); + + /* + * Creating semaphores used to protect access to the registers + * when running in a multi-threaded environment. + */ + error = ALT_SEM_CREATE (&dev->regs_lock, 1); + + if (!error) + { + /* Install IRQ handler */ + alt_ic_isr_register(ic_id, irq, alt_msgdma_irq, dev, 0x0); + } + else + { + alt_printf("failed to create semaphores\n"); + } + + return; + +} + + +/* + * alt_msgdma_register_callback + * + * Associate a user-specific routine with the msgdma interrupt handler. + * If a callback is registered, all non-blocking msgdma transfers will + * enable interrupts that will cause the callback to be executed. + * The callback runs as part of the interrupt service routine, and + * great care must be taken to follow the guidelines for acceptable + * interrupt service routine behaviour as described in the Nios II + * Software Developer's Handbook.However, user can change some of the CSR + * control setting in blocking transfer by calling this function. + * + * Note: To disable callbacks after registering one, this routine + * may be called passing 0x0 to the callback argument. + * + * Arguments: + * - *dev: Pointer to msgdma device (instance) structure. + * - callback: Pointer to callback routine to execute at interrupt level + * - control: For masking the source interruption and setting configuration in + * control register + */ +void alt_msgdma_register_callback( + alt_msgdma_dev *dev, + alt_msgdma_callback callback, + alt_u32 control, + void *context) +{ + dev->callback = callback; + dev->callback_context = context; + dev->control = control; + + return ; +} + +/* + * alt_msgdma_standard_descriptor_async_transfer + * + * Set up and commence a non-blocking transfer of one descriptors at a time. + * + * If the FIFO buffer for one of read/write is full at the time of this call, + * the routine will immediately return -ENOSPC, the application can then decide + * how to proceed without being blocked. + * + * Arguments: + * - *dev: Pointer to msgdma device (instance) struct. + * - *desc: Pointer to single (ready to run) descriptor. + * + * Returns: + * 0 -> success + * -ENOSPC -> FIFO descriptor buffer is full + * -EPERM -> operation not permitted due to descriptor type conflict + * -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) +{ + /* + * Error detection/handling should be performed at the application + * or callback level as appropriate. + */ + return alt_msgdma_descriptor_async_transfer(dev, desc, NULL); + +} + + +/* + * alt_msgdma_extended_descriptor_async_transfer + * + * Set up and commence a non-blocking transfer of one descriptors at a time. + * + * If the FIFO buffer for one of read/write is full at the time of this call, + * the routine will immediately return -ENOSPC, the application can then + * decide how to proceed without being blocked. + * + * Arguments: + * - *dev: Pointer to msgdma device (instance) struct. + * - *desc: Pointer to single (ready to run) descriptor. + * + * Returns: + * 0 -> success + * -ENOSPC -> FIFO descriptor buffer is full + * -EPERM -> operation not permitted due to descriptor type conflict + * -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) +{ + /* + * Error detection/handling should be performed at the application + * or callback level as appropriate. + */ + return alt_msgdma_descriptor_async_transfer(dev, NULL, desc); +} + + +/* + * alt_msgdma_standard_descriptor_sync_transfer + * + * This function will start commencing a blocking transfer of one standard + * descriptor at a time. If the FIFO buffer for one of read/write is full at the + * time of this call, the routine will wait until free FIFO buffer available for + * continue processing. + * + * The function will return "-1" if errors or conditions causing the dispatcher + * stop issuing the commands to both read and write masters before both read and + * write command buffers are empty. + * + * Additional error information is available in the status bits of + * each descriptor that the msgdma processed; it is the responsibility + * of the user's application to search through the descriptor + * to gather specific error information. + * + * Arguments: + * - *dev: Pointer to msgdma device (instance) structure. + * - *desc: Pointer to single (ready to run) descriptor. + * + * Returns: + * - status: return 0 (success) + * return error (errors or conditions causing msgdma stop issuing + * commands to masters) + * Suggest suggest checking the bit set in the error with CSR status + * register. + * return -EPERM (operation not permitted due to descriptor type + * conflict) + * 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) +{ + return alt_msgdma_descriptor_sync_transfer(dev, desc, NULL); +} + +/* + * alt_msgdma_extended_descriptor_sync_transfer + * + * This function will start commencing a blocking transfer of one extended + * descriptor at a time. If the FIFO buffer for one of read/write is full at the + * time of this call, the routine will wait until free FIFO buffer available for + * continue processing. + * + * The function will return "-1" if errors or conditions causing the dispatcher + * stop issuing the commands to both read and write masters before both read and + * write command buffers are empty. + * + * Additional error information is available in the status bits of + * each descriptor that the msgdma processed; it is the responsibility + * of the user's application to search through the descriptor + * to gather specific error information. + * + * + * Arguments: + * - *dev: Pointer to msgdma device (instance) structure. + * - *desc: Pointer to single (ready to run) descriptor. + * + * Returns: + * - status: return 0 (success) + * return error (errors or conditions causing msgdma stop issuing + * commands to masters) + * Suggest suggest checking the bit set in the error with CSR status + * register. + * return -EPERM (operation not permitted due to descriptor type + * conflict) + * 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) +{ + return alt_msgdma_descriptor_sync_transfer(dev, NULL, desc); +} + + + + + diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/altera_onchip_flash.c b/FPGA_nios/hit_pat_bsp/drivers/src/altera_onchip_flash.c new file mode 100644 index 0000000..36482a4 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/altera_onchip_flash.c @@ -0,0 +1,590 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2014 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +#include +#include +#include +#include "sys/param.h" +#include "alt_types.h" +#include "sys/alt_debug.h" +#include "sys/alt_cache.h" +#include "altera_onchip_flash.h" +#include "altera_onchip_flash_regs.h" +#include "priv/alt_busy_sleep.h" + +ALT_LLIST_HEAD(altera_onchip_flash_list); + +/* + Public API + + Refer to "Using Flash Devices" in the + Developing Programs Using the Hardware Abstraction Layer chapter + of the Nios II Software Developer's Handbook. + +*/ + +/** + * alt_onchip_flash_read + * + * reads data from flash. +**/ +int alt_onchip_flash_read +( + alt_flash_dev *flash_info, + int offset, + void *dest_addr, + int length +) +{ + int ret_code = 0; + alt_onchip_flash_dev* flash = (alt_onchip_flash_dev*)flash_info; + + /* Make sure the input parameters is not outside of this device's range. */ + if ((offset >= flash->dev.length) || ((offset+length) > flash->dev.length)) { + return -EFAULT; + } + + memcpy(dest_addr, (alt_u8*)flash->dev.base_addr+offset, length); + + if (NULL != flash->csr_base) { + int read_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_READ_MSK; + if (read_status != ALTERA_ONCHIP_FLASH_STATUS_READ_PASSED) { + /* Read failed. Return error.*/ + ret_code = -EIO; + } + } + return ret_code; +} + +/** + * alt_onchip_flash_get_info + * + * gets the details of the erase region. +**/ +int alt_onchip_flash_get_info +( + alt_flash_fd *fd, + flash_region **info, + int *number_of_regions +) +{ + int ret_code = 0; + + alt_flash_dev* flash = (alt_flash_dev*)fd; + + if (NULL != number_of_regions) + { + /* Pass the number of region to user */ + *number_of_regions = flash->number_of_regions; + } + + if (!flash->number_of_regions) + { + ret_code = -ENOMEM; + } + else if (flash->number_of_regions > ALT_MAX_NUMBER_OF_FLASH_REGIONS) + { + ret_code = -EFAULT; + } + else + { + if (NULL != info) + { + /* Pass the table of erase blocks to user */ + *info = &flash->region_info[0]; + } + } + + return ret_code; +} + +/** + This function erases an individual flash erase block. +**/ +int alt_onchip_flash_erase_block +( + alt_flash_dev *flash_info, + int block_offset +) +{ + int ret_code = 0; + alt_onchip_flash_dev *flash = (alt_onchip_flash_dev*)flash_info; + int page_address; + + /* Make sure the input parameters is not outside of this device's range. */ + if (block_offset >= flash->dev.length) { + return -EFAULT; + } + + /* Make sure IP support write and erase operation */ + if ((flash->csr_base == NULL) || (flash->is_read_only)) { + return -ENODEV; + } + + /* The block_offset must be page size aligned */ + if ((block_offset & (flash->page_size - 1)) != 0) + { + /* The address is not aligned */ + return -EINVAL; + } + + /* Wait until flash controller idle */ + ret_code = alt_onchip_flash_poll_for_status_to_go_idle(flash); + if (ret_code != 0) + { + return ret_code; + } + + /* Enable write and erase operation */ + ALTERA_ONCHIP_FLASH_ENABLE_WRITE_AND_ERASE_OPERATION(flash->csr_base); + + /* Calculate Page erase address, it is 32bit word addressing*/ + page_address = block_offset / 4; + + /* Perform Page erase operation */ + ALTERA_ONCHIP_FLASH_PAGE_ERASE(flash->csr_base, page_address); + + /* Wait until flash controller idle */ + ret_code = alt_onchip_flash_poll_for_status_to_go_idle(flash); + + /* Wait until flash controller indicate erase passed */ + ret_code = alt_onchip_flash_poll_for_status_erase_passed(flash); + + /* Disable write and erase operation */ + ALTERA_ONCHIP_FLASH_DISABLE_WRITE_AND_ERASE_OPERATION(flash->csr_base); + + return ret_code; +} + +/** + * alt_onchip_flash_write_block + * + * This function writes one block of data to flash. + * It assume that someone has kindly erased the appropriate sector(s). + * + * Note: "block_offset" is the base of the current erase block. + * "data_offset" is the absolute address (from the 0-base of this + * device's memory) of the beginning of the write-destination. + * This device has no need for "block_offset", but it's included for + * function type compatibility. +**/ +int alt_onchip_flash_write_block +( + alt_flash_dev *flash_info, + int block_offset, + int data_offset, + const void *data, + int length +) +{ + int ret_code = 0; + alt_onchip_flash_dev *flash = (alt_onchip_flash_dev*)flash_info; + int buffer_offset = 0; + int length_of_current_write; + int current_data_offset = data_offset; + 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) || + (data_offset >= flash->dev.length) || + (length > (flash->dev.length - data_offset)) + ) { + return -EFAULT; + } + + /* Make sure IP support support write and erase operation */ + if ((flash->csr_base == NULL) || (flash->is_read_only != 0)) { + return -ENODEV; + } + + /* Wait until flash controller idle */ + ret_code = alt_onchip_flash_poll_for_status_to_go_idle(flash); + if (ret_code != 0) + { + return ret_code; + } + + /* Enable write and erase operation */ + ALTERA_ONCHIP_FLASH_ENABLE_WRITE_AND_ERASE_OPERATION(flash->csr_base); + + /* Check data length */ + while (length) + { + /* Minimum write size to onchip flash is 32 bits of data */ + chunk_of_data = 0xFFFFFFFF; + + /* The start of data_offset must be 4 bytes (32 bits) aligned */ + if ((current_data_offset & (ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE - 1)) == 0) + { + /* 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); + length_of_current_write = MIN(length, next_data_offset - current_data_offset); + /* Prepare the 4 bytes chunk of data to be written */ + memcpy(&chunk_of_data, &((alt_u8*)data)[buffer_offset], length_of_current_write); + buffer_offset += length_of_current_write; + length -= length_of_current_write; + } 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); + + /* Calculate new 4-byte aligned data offset */ + current_data_offset = current_data_offset - padding; + next_data_offset = (current_data_offset + ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE) & ~(ALTERA_ONCHIP_FLASH_DATA_ALIGN_SIZE - 1); + length_of_current_write = MIN(length + padding, next_data_offset - current_data_offset); + /* 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); + buffer_offset += length_of_current_write - padding; + length -= length_of_current_write - padding; + } + + /* Writing to flash via IO 32 bits at a time */ + IOWR_32DIRECT(flash->dev.base_addr, current_data_offset, chunk_of_data); + + /* Wait until flash controller idle */ + ret_code = alt_onchip_flash_poll_for_status_to_go_idle(flash); + if (ret_code != 0) + { + break; + } + + /* Wait until flash controller indicate write passed */ + ret_code = alt_onchip_flash_poll_for_status_write_passed(flash); + if (ret_code != 0) + { + break; + } + + /* Prepare to write next 4 bytes */ + current_data_offset = next_data_offset; + } + + /* Disable write and erase operation */ + ALTERA_ONCHIP_FLASH_DISABLE_WRITE_AND_ERASE_OPERATION(flash->csr_base); + + return ret_code; +} + +/** + * alt_onchip_flash_write + * + * Program the data into the flash at the selected address. + * + * The different between this function and alt_onchip_flash_write_block function + * is that this function (alt_onchip_flash_write) will automatically erase a block as needed + * +**/ +int alt_onchip_flash_write( + alt_flash_dev *flash_info, + int offset, + const void *src_addr, + int length +) +{ + int ret_code = 0; + int i,j; + int data_to_write; + int current_offset; + int full_length = length; + int start_offset = offset; + alt_onchip_flash_dev* flash = (alt_onchip_flash_dev*)flash_info; + + /* Make sure the input parameters is not outside of this device's range. */ + if ((offset >= flash->dev.length) || (length > (flash->dev.length - offset))) + { + return -EFAULT; + } + + /* + * First and foremost which sectors are affected? + */ + for(i=0;idev.number_of_regions;i++) + { + /* Is it in this erase block region?*/ + if((offset >= flash->dev.region_info[i].offset) && + (offset < (flash->dev.region_info[i].offset + + flash->dev.region_info[i].region_size))) + { + current_offset = flash->dev.region_info[i].offset; + + for(j=0;jdev.region_info[i].number_of_blocks;j++) + { + if ((offset >= current_offset ) && + (offset < (current_offset + + flash->dev.region_info[i].block_size))) + { + /* + * 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); + data_to_write = MIN(data_to_write, length); + if(memcmp(src_addr, (alt_u8*)flash->dev.base_addr+offset, data_to_write)) + { + ret_code = (*flash->dev.erase_block)(&flash->dev, current_offset); + + if (!ret_code) + { + ret_code = (*flash->dev.write_block)( + &flash->dev, + current_offset, + offset, + src_addr, + data_to_write); + } + } + + /* Was this the last block? */ + if ((length == data_to_write) || ret_code) + { + goto finished; + } + + length -= data_to_write; + offset = current_offset + flash->dev.region_info[i].block_size; + src_addr = (alt_u8*)src_addr + data_to_write; + } + current_offset += flash->dev.region_info[i].block_size; + } + } + } + +finished: + alt_dcache_flush((alt_u8*)flash->dev.base_addr+start_offset, full_length); + return ret_code; +} + +/** + * altera_onchip_flash_init + * + * alt_sys_init.c will call this function automatically through macro + * +**/ +void altera_onchip_flash_init +( + alt_onchip_flash_dev *flash +) +{ + /* 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; + int sector2_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_AVAILABLE; + int sector3_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_AVAILABLE; + int sector4_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_AVAILABLE; + int sector5_status = ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_AVAILABLE; + + /* Set up flash_region data structures. */ + number_of_regions = 0; + region_info = &flash->dev.region_info[0]; + + if (flash->csr_base != NULL) { + sector1_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_MSK; + sector2_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_MSK; + sector3_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_MSK; + sector4_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_MSK; + sector5_status = IORD_ALTERA_ONCHIP_FLASH_STATUS(flash->csr_base) & ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_MSK; + } + + if ((flash->sector1_enabled == 1) && (sector1_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR1_UNAVAILABLE)) { + + region_info[number_of_regions].offset = flash->sector1_start_addr; + region_info[number_of_regions].region_size = flash->sector1_end_addr - flash->sector1_start_addr + 1; + region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size; + region_info[number_of_regions].block_size = flash->page_size; + + number_of_regions++; + } + + if ((flash->sector2_enabled == 1) && (sector2_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR2_UNAVAILABLE)) { + + region_info[number_of_regions].offset = flash->sector2_start_addr; + region_info[number_of_regions].region_size = flash->sector2_end_addr - flash->sector2_start_addr + 1; + region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size; + region_info[number_of_regions].block_size = flash->page_size; + + number_of_regions++; + } + + if ((flash->sector3_enabled == 1) && (sector3_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR3_UNAVAILABLE)) { + + region_info[number_of_regions].offset = flash->sector3_start_addr; + region_info[number_of_regions].region_size = flash->sector3_end_addr - flash->sector3_start_addr + 1; + region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size; + region_info[number_of_regions].block_size = flash->page_size; + + number_of_regions++; + } + + if ((flash->sector4_enabled == 1) && (sector4_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR4_UNAVAILABLE)) { + + region_info[number_of_regions].offset = flash->sector4_start_addr; + region_info[number_of_regions].region_size = flash->sector4_end_addr - flash->sector4_start_addr + 1; + region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size; + region_info[number_of_regions].block_size = flash->page_size; + + number_of_regions++; + } + + if ((flash->sector5_enabled == 1) && (sector5_status != ALTERA_ONCHIP_FLASH_STATUS_SECTOR5_UNAVAILABLE)) { + + region_info[number_of_regions].offset = flash->sector5_start_addr; + region_info[number_of_regions].region_size = flash->sector5_end_addr - flash->sector5_start_addr + 1; + region_info[number_of_regions].number_of_blocks = flash->dev.region_info[number_of_regions].region_size / flash->page_size; + region_info[number_of_regions].block_size = flash->page_size; + + number_of_regions++; + } + + /* Update number of regions. */ + flash->dev.number_of_regions = number_of_regions; + + /* + * Register this device as a valid flash device type + */ + alt_flash_device_register(&(flash->dev)); +} + +/* + Private API + + Helper functions used by Public API functions. +*/ + + +/** + * alt_onchip_flash_poll_for_status_to_go_idle + * + * This function return non zero value when polling timeout. +**/ +int alt_onchip_flash_poll_for_status_to_go_idle +( + alt_onchip_flash_dev *flash +) +{ + int ret_code = 0; + int timeout = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE; + int count_down = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE; + + while ( + (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 */ + + /* If timeout value is zero, it will never timeout. */ + if (timeout != 0) { + count_down--; + if (count_down == 0) { + /* Timeout */ + ret_code = -ETIMEDOUT; + break; + } + } + } + + return ret_code; +} + +/** + * alt_onchip_flash_poll_for_status_erase_passed + * + * This function return non zero value when polling timeout. +**/ +int alt_onchip_flash_poll_for_status_erase_passed +( + alt_onchip_flash_dev *flash +) +{ + int ret_code = 0; + int timeout = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE; + int count_down = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE; + + while ( + (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 */ + + /* If timeout value is zero, it will never timeout. */ + if (timeout != 0) { + count_down--; + if (count_down == 0) { + /* Timeout */ + ret_code = -ETIMEDOUT; + break; + } + } + } + + return ret_code; +} + +/** + * alt_onchip_flash_poll_for_status_write_passed + * + * This function return non zero value when polling timeout. +**/ +int alt_onchip_flash_poll_for_status_write_passed +( + alt_onchip_flash_dev *flash +) +{ + int ret_code = 0; + int timeout = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE; + int count_down = ALTERA_ONCHIP_FLASH_STATUS_BIT_POLLING_TIMEOUT_VALUE; + + while ( + (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 */ + + /* If timeout value is zero, it will never timeout. */ + if (timeout != 0) { + count_down--; + if (count_down == 0) { + /* Timeout */ + ret_code = -ETIMEDOUT; + break; + } + } + } + + return ret_code; +} + diff --git a/FPGA_nios/hit_pat_bsp/drivers/src/iniche/ins_tse_mac.c b/FPGA_nios/hit_pat_bsp/drivers/src/iniche/ins_tse_mac.c new file mode 100644 index 0000000..92070f0 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/drivers/src/iniche/ins_tse_mac.c @@ -0,0 +1,911 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2016 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ +#ifdef ALT_INICHE + +#include +#include +#include +#include +#include +#include +#include "ipport.h" + +#ifdef UCOS_II +#include +#endif + +#include "in_utils.h" +#include "netbuf.h" +#include "net.h" +#include "q.h" +#include "ether.h" +#include "system.h" +#include "alt_types.h" + +#include "altera_avalon_timer_regs.h" +#include "altera_msgdma_descriptor_regs.h" +#include "altera_avalon_tse.h" + +#include "sys/alt_irq.h" +#include "sys/alt_cache.h" + +#include "altera_eth_tse_regs.h" +#include "iniche/altera_eth_tse_iniche.h" +#include "iniche/ins_tse_mac.h" + +#include "socket.h" + +/* Task includes */ +#include "ipport.h" +#include "tcpapp.h" + +#ifndef ALT_INICHE +#include "osport.h" +#endif + +#ifdef ALT_INICHE +#include +#include "alt_iniche_dev.h" +#endif + +ins_tse_info tse[MAXNETS]; +extern alt_tse_system_info tse_mac_device[MAXNETS]; + +alt_u8 number_of_tse_mac = 0; +alt_tse_iniche_dev_driver_data tse_iniche_dev_driver_data[MAXNETS]; +extern alt_u8 max_mac_system; + +#ifdef ALT_INICHE + + +/* @Function Description: TSE MAC Driver Open/Initialization routine + * @API TYPE: Public + * @Param p_dec pointer to TSE device instance + * @Return ENP_HARDWARE on error, otherwise return SUCCESS + */ + +error_t altera_eth_tse_init( + alt_iniche_dev *p_dev) +{ + int i; + + alt_tse_iniche_dev_driver_data *p_driver_data = 0; + alt_tse_system_info *psys_info = 0; + + dprintf("altera_eth_tse_init %d\n", p_dev->if_num); + + /* 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++) { + if(tse_iniche_dev_driver_data[i].p_dev == p_dev) { + p_driver_data = &tse_iniche_dev_driver_data[i]; + } + } + /* If pointer could not found */ + if(p_driver_data == 0) { + return ENP_HARDWARE; + } + + /* Get the pointer to the alt_tse_system_info structure from the global array */ + for(i = 0; i < max_mac_system; i++) { + if(tse_mac_device[i].tse_mac_base == p_driver_data->hw_mac_base_addr) { + psys_info = &tse_mac_device[i]; + } + } + /* If pointer could not found */ + if(psys_info == 0) { + return ENP_HARDWARE; + } + + prep_tse_mac(p_dev->if_num, psys_info + p_driver_data->hw_channel_number); + + return SUCCESS; +} +#endif /* ALT_INICHE */ + + +/* @Function Description: TSE MAC Driver Open/Registration routine + * @API TYPE: Internal + * @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) +{ + NET ifp; + dprintf("prep_tse_mac %d\n", index); + { + tse[index].sem = 0; /*Tx IDLE*/ + tse[index].tse = (void *)psys_info; + + ifp = nets[index]; + ifp->n_mib->ifAdminStatus = ALTERA_TSE_ADMIN_STATUS_DOWN; /* status = down */ + ifp->n_mib->ifOperStatus = ALTERA_TSE_ADMIN_STATUS_DOWN; + ifp->n_mib->ifLastChange = cticks * (100/TPS); + ifp->n_mib->ifPhysAddress = (u_char*)tse[index].mac_addr; + ifp->n_mib->ifDescr = "Altera TSE MAC ethernet"; + ifp->n_lnh = ETHHDR_SIZE; /* ethernet header size. was:14 */ + ifp->n_hal = ALTERA_TSE_HAL_ADDR_LEN; /* hardware address length */ + ifp->n_mib->ifType = ETHERNET; /* device type */ + ifp->n_mtu = ALTERA_TSE_MAX_MTU_SIZE; /* max frame size */ + + /* install our hardware driver routines */ + ifp->n_init = tse_mac_init; + ifp->pkt_send = NULL; + ifp->raw_send = tse_mac_raw_send; + ifp->n_close = tse_mac_close; + ifp->n_stats = (void(*)(void *, int))tse_mac_stats; + + #ifdef IP_V6 + ifp->n_flags |= (NF_NBPROT | NF_IPV6); + #else + ifp->n_flags |= NF_NBPROT; + #endif + + nets[index]->n_mib->ifPhysAddress = (u_char*)tse[index].mac_addr; /* ptr to MAC address */ + + #ifdef ALT_INICHE + /* get the MAC address. */ + get_mac_addr(ifp, (unsigned char *)tse[index].mac_addr); + #endif /* ALT_INICHE */ + + /* set cross-pointers between iface and tse structs */ + tse[index].index = index; + tse[index].netp = ifp; + ifp->n_local = (void*)(&tse[index]); + + index++; + } + + return index; +} + +//temporary code for msgdma hw workaround +void msgdma_reset(alt_msgdma_dev * dev) +{ + + /* start prefetcher reset sequence */ + IOWR_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base, + ALT_MSGDMA_PREFETCHER_CTRL_RESET_SET_MASK); + /* wait until hw clears the bit */ + while(ALT_MSGDMA_PREFETCHER_CTRL_RESET_GET( + IORD_ALT_MSGDMA_PREFETCHER_CONTROL(dev->prefetcher_base))); + /* + * This reset is intended to be used along with reset dispatcher in + * dispatcher core. Once the reset sequence in prefetcher core has + * completed, software is expected to reset the dispatcher core, + * and polls for dispatcher?s reset sequence to be completed. + */ + + /* 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); + while(0 != (IORD_ALTERA_MSGDMA_CSR_STATUS(dev->csr_base) + & ALTERA_MSGDMA_CSR_RESET_STATE_MASK)); + +} + +/* @Function Description: TSE MAC Initialization routine. This function opens the + * device handle, configure the callback function and interrupts , + * for MSGDMA TX and MSGDMA RX block associated with the TSE MAC, + * Initialize the MAC Registers for the RX FIFO and TX FIFO + * threshold watermarks, initialize the tse device structure, + * set the MAC address of the device and enable the MAC + * + * @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) +{ + int dat; + int speed, duplex, result, x; + int status = SUCCESS; + + 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; + + dprintf("tse_mac_init %d\n", iface); + + if (tse_hw->ext_desc_mem == 1) { + tse[iface].rxdesc[0] = (alt_msgdma_prefetcher_standard_descriptor *) tse_hw->desc_mem_base; + 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)))); + 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)))); + } + 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))); + while ((((alt_u32)tse[iface].rxdesc[0]) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0) + tse[iface].rxdesc[0]++; //boundary + + 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))); + while ((((alt_u32)tse[iface].rxdesc[1]) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0) + tse[iface].rxdesc[1]++; //boundary + + 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))); + while ((((alt_u32)tse[iface].txdesc) % sizeof(alt_msgdma_prefetcher_standard_descriptor)) != 0) + tse[iface].txdesc++; //boundary + } + + /* Get the Rx and Tx MSGDMA addresses */ + msgdma_tx_dev = alt_msgdma_open(tse_hw->tse_msgdma_tx); + + if(!msgdma_tx_dev) { + dprintf("[altera_eth_tse_init] Error opening TX MSGDMA\n"); + return ENP_RESOURCE; + } + + msgdma_rx_dev = alt_msgdma_open(tse_hw->tse_msgdma_rx); + if(!msgdma_rx_dev) { + dprintf("[altera_eth_tse_init] Error opening RX MSGDMA\n"); + return ENP_RESOURCE; + } + + /* Initialize mtip_mac_trans_info structure with values from */ + tse_mac_initTransInfo2(&tse[iface].mi, (int)tse_hw->tse_mac_base, + (unsigned int)msgdma_tx_dev, + (unsigned int)msgdma_rx_dev, + 0); + + /* reset the PHY if necessary */ + result = getPHYSpeed(tse[iface].mi.base); + speed = (result >> 1) & 0x07; + duplex = result & 0x01; + + /* reset the mac */ + IOWR_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base, + mmac_cc_SW_RESET_mask | + mmac_cc_TX_ENA_mask | + mmac_cc_RX_ENA_mask); + + x=0; + while(IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base) & + ALTERA_TSEMAC_CMD_SW_RESET_MSK) { + if( x++ > 10000 ) { + break; + } + } + if(x >= 10000) { + dprintf("TSEMAC SW reset bit never cleared!\n"); + } + + dat = IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base); + if( (dat & 0x03) != 0 ) { + dprintf("WARN: RX/TX not disabled after reset... missing PHY clock? CMD_CONFIG=0x%08x\n", dat); + } + else { + dprintf("OK, x=%d, CMD_CONFIG=0x%08x\n", x, dat); + } + + /* 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) { + int channel_loop = 0; + int mac_loop = 0; + + for (channel_loop = 0; channel_loop < mac_group_count; channel_loop ++) { + for (mac_loop = 0; mac_loop < pmac_groups[channel_loop]->channel; mac_loop ++) { + if (pmac_groups[channel_loop]->pmac_info[mac_loop]->psys_info == tse_hw) { + tse[iface].channel = mac_loop; + } + } + } + } + /* End of Hack code */ + + if(tse_hw->use_shared_fifo == 1) { + IOWR_ALTERA_MULTI_CHAN_FIFO_SEC_FULL_THRESHOLD(tse_hw->tse_shared_fifo_rx_ctrl_base,tse_hw->tse_shared_fifo_rx_depth); + IOWR_ALTERA_MULTI_CHAN_FIFO_ALMOST_FULL_THRESHOLD(tse_hw->tse_shared_fifo_rx_ctrl_base,((tse_hw->tse_shared_fifo_rx_depth) - 140)); + } + else { + /* Initialize MAC registers */ + IOWR_ALTERA_TSEMAC_FRM_LENGTH(tse[iface].mi.base, ALTERA_TSE_MAC_MAX_FRAME_LENGTH); + IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(tse[iface].mi.base, 8); + IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(tse[iface].mi.base, 8); + IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(tse[iface].mi.base, 8); + IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(tse[iface].mi.base, 3); + IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(tse[iface].mi.base, tse_hw->tse_tx_depth - 16); //1024/4; + IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(tse[iface].mi.base, 0); //32/4; // start transmit when there are 48 bytes + IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(tse[iface].mi.base, tse_hw->tse_rx_depth - 16); //4000/4); + IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(tse[iface].mi.base, 0); + } + + /* Enable TX shift 16 for removing two bytes from the start of all transmitted frames */ + if((ETHHDR_BIAS !=0) && (ETHHDR_BIAS !=2)) { + dprintf("[tse_mac_init] Error: Unsupported Ethernet Header Bias Value, %d\n",ETHHDR_BIAS); + return ENP_PARAM; + } + + if(ETHHDR_BIAS == 0) { + alt_32 temp_reg; + + temp_reg = IORD_ALTERA_TSEMAC_TX_CMD_STAT(tse[iface].mi.base) & (~ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_MSK); + IOWR_ALTERA_TSEMAC_TX_CMD_STAT(tse[iface].mi.base,temp_reg); + + /* + * 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) & + ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_MSK) { + tse[iface].txShift16OK = 1; + dprintf("[tse_mac_init] Error: Incompatible %d value with TX_CMD_STAT register return TxShift16 value. \n",ETHHDR_BIAS); + return ENP_LOGIC; + } else { + tse[iface].txShift16OK = 0; + } + + /*Enable RX shift 16 for alignment of all received frames on 16-bit start address */ + temp_reg = IORD_ALTERA_TSEMAC_RX_CMD_STAT(tse[iface].mi.base) & (~ALTERA_TSEMAC_RX_CMD_STAT_RXSHIFT16_MSK); + IOWR_ALTERA_TSEMAC_RX_CMD_STAT(tse[iface].mi.base,temp_reg); + + /* 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) + { + tse[iface].rxShift16OK = 1; + dprintf("[tse_mac_init] Error: Incompatible %d value with RX_CMD_STAT register return RxShift16 value. \n",ETHHDR_BIAS); + return ENP_LOGIC; + } + else { + 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); + + /* + * 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) & + ALTERA_TSEMAC_TX_CMD_STAT_TXSHIFT16_MSK) { + tse[iface].txShift16OK = 1; + } + else { + tse[iface].txShift16OK = 0; + 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); + + /* 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) + { + tse[iface].rxShift16OK = 1; + } + else { + tse[iface].rxShift16OK = 0; + dprintf("[tse_mac_init] Error: Incompatible %d value with RX_CMD_STAT register return RxShift16 value. \n",ETHHDR_BIAS); + return ENP_LOGIC; + } + } /* if(ETHHDR_BIAS == 2) */ + + /* enable MAC */ + dat = ALTERA_TSEMAC_CMD_TX_ENA_MSK | + ALTERA_TSEMAC_CMD_RX_ENA_MSK | + mmac_cc_RX_ERR_DISCARD_mask | +#if ENABLE_PHY_LOOPBACK + ALTERA_TSEMAC_CMD_PROMIS_EN_MSK | // promiscuous mode + ALTERA_TSEMAC_CMD_LOOPBACK_MSK | // promiscuous mode +#endif + 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) { + dat |= ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + dat &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK; + } + /* 100 Mbps */ + else if(speed == 0x02) { + dat &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + dat &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK; + } + /* 10 Mbps */ + else if(speed == 0x04) { + dat &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + dat |= ALTERA_TSEMAC_CMD_ENA_10_MSK; + } + /* default to 100 Mbps if returned invalid speed */ + else { + dat &= ~ALTERA_TSEMAC_CMD_ETH_SPEED_MSK; + dat &= ~ALTERA_TSEMAC_CMD_ENA_10_MSK; + } + + /* Half Duplex */ + if(duplex == TSE_PHY_DUPLEX_HALF) { + dat |= ALTERA_TSEMAC_CMD_HD_ENA_MSK; + } + /* Full Duplex */ + else { + dat &= ~ALTERA_TSEMAC_CMD_HD_ENA_MSK; + } + + IOWR_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base, dat); + dprintf("\nMAC post-initialization: CMD_CONFIG=0x%08x\n", + IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base)); + + +#ifdef ALT_INICHE + /* Set the MAC address */ + IOWR_ALTERA_TSEMAC_MAC_0(tse[iface].mi.base, + ((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, + (((int)((unsigned char) tse[iface].mac_addr[4]) | + (int)((unsigned char) tse[iface].mac_addr[5] << 8)) & 0xFFFF)); + +#else /* not ALT_INICHE */ + + /* Set the MAC address */ + IOWR_ALTERA_TSEMAC_MAC_0(tse[iface].mi.base, + ((int)(0x00) | + (int)(0x07 << 8) | + (int)(0xAB << 16) | + (int)(0xF0 << 24))); + + IOWR_ALTERA_TSEMAC_MAC_1(tse[iface].mi.base, + (((int)(0x0D) | + (int)(0xBA << 8)) & 0xFFFF)); + + + /* Set the mac address in the tse struct */ + tse[iface].mac_addr[0] = 0x00; + tse[iface].mac_addr[1] = 0x07; + tse[iface].mac_addr[2] = 0xAB; + tse[iface].mac_addr[3] = 0xF0; + tse[iface].mac_addr[4] = 0x0D; + tse[iface].mac_addr[5] = 0xBA; + +#endif /* not ALT_INICHE */ + + /* status = UP */ + nets[iface]->n_mib->ifAdminStatus = ALTERA_TSE_ADMIN_STATUS_UP; + nets[iface]->n_mib->ifOperStatus = ALTERA_TSE_ADMIN_STATUS_UP; + + /* Install MSGDMA (RX) interrupt handler */ + alt_msgdma_register_callback( + tse[iface].mi.rx_msgdma, + (alt_msgdma_callback)&tse_msgdmaRx_isr, + 0, + (void*)(&tse[iface])); + + /* Install MSGDMA (TX) interrupt handler */ + alt_msgdma_register_callback( + tse[iface].mi.tx_msgdma, + (alt_msgdma_callback)&tse_msgdmaTx_isr, + 0, + (void*)(&tse[iface])); + + status = tse_msgdma_read_init(&tse[iface]); + if (status == 0 ) status = tse_msgdma_write_init(&tse[iface],0,0); + + if (status!=0) dprintf("TSE_MAC_INIT error\n"); + + return status; +} + +/* @Function Description - Init and setup MSGDMA TX Descriptor chain + * + * + * @API TYPE - Internal + * @return SUCCESS on success + */ +int tse_msgdma_write_init(ins_tse_info* tse_ptr,unsigned int * ActualData,unsigned int len) +{ + alt_u32 control = 0; + int desc_index; + int rc; + + tse_ptr->txdesc_list = NULL; + + for(desc_index = 0; desc_index < (ALTERA_TSE_MSGDMA_TX_DESC_CHAIN_SIZE); desc_index++) + { + + /* trigger interrupt when transfer complete */ + control = ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GENERATE_SOP_MASK | ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GENERATE_EOP_MASK; + + if (desc_index >= ( ALTERA_TSE_MSGDMA_TX_DESC_CHAIN_SIZE - 2)) control |= ALTERA_MSGDMA_DESCRIPTOR_CONTROL_TRANSFER_COMPLETE_IRQ_MASK; + else control |= ALTERA_MSGDMA_DESCRIPTOR_CONTROL_EARLY_DONE_ENABLE_MASK; + + rc=alt_msgdma_construct_prefetcher_standard_mm_to_st_descriptor( + tse_ptr->mi.tx_msgdma, + (alt_msgdma_prefetcher_standard_descriptor *) &tse_ptr->txdesc[desc_index], + (int)ActualData, + len, + control); + if (rc!=0) return -1; + + if (desc_index==0) tse_ptr->txdesc_list = NULL; + + rc=alt_msgdma_prefetcher_add_standard_desc_to_list( + &tse_ptr->txdesc_list, + &tse_ptr->txdesc[desc_index] ); + if (rc!=0) return -1; + + } + + return 0; +} + +/* @Function Description - TSE transmit API to send data to the MAC + * + * + * @API TYPE - Public + * @param net - NET structure associated with the TSE MAC instance + * @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) +{ + unsigned int len = data_bytes; + int rc; + + ins_tse_info* tse_ptr = (ins_tse_info*) net->n_local; + tse_mac_trans_info *mi; + unsigned int* ActualData; + int cpu_sr; + + OS_ENTER_CRITICAL(); + mi = &tse_ptr->mi; + + if(tse_ptr->sem!=0) /* Tx is busy*/ + { + dprintf("raw_send CALLED AGAIN!!!\n"); + OS_EXIT_CRITICAL(); + return ENP_RESOURCE; + } + + tse_ptr->sem = 1; + + // clear bit-31 before passing it to MSGDMA Driver + ActualData = (unsigned int*)alt_remap_cached ((volatile void*) data, 4); + + #if (0) + rc= tse_msgdma_write_init(tse_ptr,ActualData,len); + if (rc<0) + { + dprintf("tse_msgdma_write_init bad return\n"); + OS_EXIT_CRITICAL(); + return -1; + } + #else + tse_ptr->txdesc[0].read_address = (alt_u32)ActualData; + tse_ptr->txdesc[0].transfer_length = len; + tse_ptr->txdesc[0].control = (tse_ptr->txdesc[0].control + & ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_CLR_MASK) + | ALTERA_MSGDMA_DESCRIPTOR_CONTROL_GO_MASK; + #endif + + alt_dcache_flush(ActualData,len); + rc = tse_mac_aTxWrite(mi,tse_ptr->txdesc); + if(rc < 0) /* MSGDMA not available */ + { + dprintf("raw_send() MSGDMA not available, ret=%d, len=%d\n",rc, len); + net->n_mib->ifOutDiscards++; + tse_ptr->sem = 0; + + OS_EXIT_CRITICAL(); + return SEND_DROPPED; /* ENP_RESOURCE and SEND_DROPPED have the same value! */ + } + else /* = 0, success */ + { + net->n_mib->ifOutOctets += data_bytes; + /* we dont know whether it was unicast or not, we count both in */ + net->n_mib->ifOutUcastPkts++; + tse_ptr->sem = 0; + + OS_EXIT_CRITICAL(); + return SUCCESS; /*success */ + } +} + + + +/* @Function Description - TSE Driver MSGDMA RX ISR callback function + * + * + * @API TYPE - callback + * @param context - context of the TSE MAC instance + * @param intnum - temporary storage + */ +void tse_msgdmaRx_isr(void * context) +{ + ins_tse_info* tse_ptr = (ins_tse_info *) context; + alt_u32 msgdma_status; + alt_u32 i,control; + + /* Capture current rcv queue length */ + int initial_rcvdq_len = rcvdq.q_len; + + /* 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, + 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); + + if ((msgdma_status & ALTERA_MSGDMA_CSR_STOPPED_ON_ERROR_MASK)==0) + { + /* Handle received packet */ + tse_mac_rcv(tse_ptr); + + /* 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); + + //if the chain is completed then start a new chain + if ((control & ALT_MSGDMA_PREFETCHER_DESCRIPTOR_CTRL_OWN_BY_HW_SET_MASK)==0) + { + /* process any unprocessed descriptors */ + for (i=(tse_ptr->rx_descriptor_index);i<(ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE-1);i++) + { + tse_mac_rcv(tse_ptr); + } + + /* 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); + + /* switch chains */ + tse_ptr->rx_descriptor_index = 0; + if (tse->rx_chain == 0) tse->rx_chain=1; else tse->rx_chain=0; + + /* start new chain */ + tse_mac_aRxRead(&tse_ptr->mi, tse_ptr->rxdesc_list[tse->rx_chain]); + + /* allocate storage for the non active chain */ + allocate_rx_descriptor_chain(tse_ptr); + } + + /* Wake up Niche stack if there are new packets are on queue */ + if ((rcvdq.q_len) > initial_rcvdq_len) { + SignalPktDemux(); + } + } /* if (no error) */ + else { dprintf("RX ERROR\n"); } + +} + +/* @Function Description - TSE Driver MSGDMA TX ISR callback function + * + * + * @API TYPE - callback + * @param context - context of the TSE MAC instance + */ +void tse_msgdmaTx_isr(void * context) +{ + ins_tse_info* tse_ptr = (ins_tse_info *) context; + int msgdma_status; + + /* + * The MSGDMA interrupt source was cleared in the MSGDMA ISR entry, + * which called this routine. New interrupt sources will cause the + * IRQ to fire again once this routine returns. + */ + + /* + * Grab MSGDMA status to validate interrupt cause. + * + * 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); + + if ((msgdma_status & ALTERA_MSGDMA_CSR_STOPPED_ON_ERROR_MASK)!=0) + dprintf("TX STOPPED\n"); + +} + + +/* @Function Description - Init and setup MSGDMA Descriptor chain + * + * + * @API TYPE - Internal + * @return SUCCESS on success + */ +int tse_msgdma_read_init(ins_tse_info* tse_ptr) +{ + alt_u32 *uncached_packet_payload; + alt_u32 control = 0; + int desc_index; + int chain_index; + int rc; + int max_transfer_size=0xffff; + + if (tse_ptr->mi.rx_msgdma->max_byte < max_transfer_size) { max_transfer_size = tse_ptr->mi.rx_msgdma->max_byte; } + + for (chain_index=0;chain_index<2;chain_index++) + { + tse_ptr->rxdesc_list[chain_index] = NULL; + + for(desc_index = 0; desc_index < ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE; desc_index++) + { + uncached_packet_payload = NULL; + + if ((desc_index < (ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE-1))) { + tse_ptr->pkt_array_rx[chain_index][desc_index] = pk_alloc(ALTERA_TSE_PKT_INIT_LEN); + + if (!tse_ptr->pkt_array_rx[chain_index][desc_index]) /* couldn't get a free buffer for rx */ + { + dprintf("[tse_msgdma_read_init] Fatal error: No free packet buffers for RX\n"); + tse_ptr->netp->n_mib->ifInDiscards++; + + return ENP_NOBUFFER; + } + + // 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); + alt_dcache_flush((void *) uncached_packet_payload, ALTERA_TSE_PKT_INIT_LEN); + } + + /* trigger interrupt when transfer complete */ + control = ALTERA_MSGDMA_DESCRIPTOR_CONTROL_TRANSFER_COMPLETE_IRQ_MASK | + 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( + tse_ptr->mi.rx_msgdma, + (alt_msgdma_prefetcher_standard_descriptor *) &tse_ptr->rxdesc[chain_index][desc_index], + (alt_u32)uncached_packet_payload, + max_transfer_size, + control); + if (rc!=0) return -1; + + if (desc_index==0) tse_ptr->rxdesc_list[chain_index] = NULL; + + rc=alt_msgdma_prefetcher_add_standard_desc_to_list( + &tse_ptr->rxdesc_list[chain_index], + &tse_ptr->rxdesc[chain_index][desc_index] ); + if (rc!=0) return -1; + } + + } + + dprintf("[tse_msgdma_read_init] RX descriptor chain desc (%d depth) created\n", desc_index); + + tse_ptr->rx_descriptor_index=0; //for processing completed rx descriptors + tse_ptr->rx_chain=0; + tse_mac_aRxRead( &tse_ptr->mi, tse_ptr->rxdesc_list[tse_ptr->rx_chain]); + + return SUCCESS; +} + +/* 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) +{ + 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++) + { + replacement_pkt = pk_alloc(ALTERA_TSE_PKT_INIT_LEN); + if (!replacement_pkt) { /* couldn't get a free buffer for rx */ + dprintf("No free buffers for rx\n"); + return 1; + } + else + { + rxDesc = &tse_ptr->rxdesc[!tse_ptr->rx_chain][i]; + tse_ptr->pkt_array_rx[!tse_ptr->rx_chain][i] = replacement_pkt; + uncached_packet_payload = (alt_u32 *)alt_remap_cached(tse_ptr->pkt_array_rx[!tse_ptr->rx_chain][i]->nb_buff, 4); + alt_dcache_flush((void *) uncached_packet_payload, ALTERA_TSE_PKT_INIT_LEN); + rxDesc->write_address = (alt_u32)(uncached_packet_payload); + } + } + + return 0; +} + +/* @Function Description - TSE Driver MSGDMA RX ISR callback function + * + * + * @API TYPE - callback internal function + * @return SUCCESS on success + */ + +void tse_mac_rcv(ins_tse_info* tse_ptr) +{ + 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; + + tse_ptr->netp->n_mib->ifInOctets += (u_long)pklen; + + rx_packet = tse_ptr->pkt_array_rx[tse_ptr->rx_chain][tse_ptr->rx_descriptor_index]; + rx_packet->nb_prot = rx_packet->nb_buff + ETHHDR_SIZE; + rx_packet->nb_plen = pklen - 14; + rx_packet->nb_tstamp = cticks; + rx_packet->net = tse_ptr->netp; + + // set packet type for demux routine + eth = (struct ethhdr *)(rx_packet->nb_buff + ETHHDR_BIAS); + rx_packet->type = eth->e_type; + + putq(&rcvdq, rx_packet); + + tse_ptr->rx_descriptor_index++; +} + +int tse_mac_stats(void * pio, int iface) +{ + ns_printf(pio, "tse_mac_stats(), stats will be added later!\n"); + return SUCCESS; +} + +/* @Function Description - Closing the TSE MAC Driver Interface + * + * + * @API TYPE - Public + * @param iface index of the NET interface associated with the TSE MAC. + * @return SUCCESS + */ +int tse_mac_close(int iface) +{ + int state; + + /* status = down */ + nets[iface]->n_mib->ifAdminStatus = ALTERA_TSE_ADMIN_STATUS_DOWN; + + /* disable the interrupt in the OS*/ + alt_msgdma_register_callback(tse[iface].mi.rx_msgdma, 0, 0, 0); + + /* Disable Receive path on the device*/ + state = IORD_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base); + IOWR_ALTERA_TSEMAC_CMD_CONFIG(tse[iface].mi.base,state & ~ALTERA_TSEMAC_CMD_RX_ENA_MSK); + + /* status = down */ + nets[iface]->n_mib->ifOperStatus = ALTERA_TSE_ADMIN_STATUS_DOWN; + + return SUCCESS; +} +#endif /* ALT_INICHE */ diff --git a/FPGA_nios/hit_pat_bsp/iniche/inc/alt_iniche_dev.h b/FPGA_nios/hit_pat_bsp/iniche/inc/alt_iniche_dev.h new file mode 100644 index 0000000..07ac364 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/inc/alt_iniche_dev.h @@ -0,0 +1,215 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +* * +* Source for the Altera InterNiche device services. * +* * +* Author EPS * +* * +******************************************************************************/ + +#ifndef __ALT_INICHE_DEV_H__ +#define __ALT_INICHE_DEV_H__ + +/******************************************************************************* + ******************************************************************************* + * + * InterNiche device services. + * + ******************************************************************************* + ******************************************************************************/ + +/******************************************************************************* + * + * Imported services. + * + ******************************************************************************/ + +#include + +#include "ipport.h" +#include "tcpport.h" +#include "sys/alt_llist.h" + + +/******************************************************************************* + * + * Structure typedefs. + * + ******************************************************************************/ + +typedef struct alt_iniche_dev_struct alt_iniche_dev; + + +/******************************************************************************* + * + * Typedefs. + * + ******************************************************************************/ + +/* + * alt_iniche_dev_init_func + * + * --> p_dev Device to initialize. + * + * Functions of this type initialize the device specified by p_dev. + */ + +typedef error_t (*alt_iniche_dev_init_func)( + alt_iniche_dev *p_dev); + + +/******************************************************************************* + * + * Structure defs. + * + ******************************************************************************/ + +/* + * InterNiche network interface device structure + * + * llist Linked list data record. + * name Name of device. + * init_func Device initialization function. + * p_driver_data Driver data. + * if_num Device interface number. + * p_net InterNiche network interface data record. + * + * This structure contains fields used for InterNiche network interface + * device drivers. + * All device data records are maintained in a list using the field llist. + * The name of the device is maintained in name. + * The function used to initialize the device is specified by init_func. + * The device driver may maintain a pointer to its own data in p_driver_data. + * Each device has an associated interface number maintained in if_num. + * The InterNiche network interface data record is maintained in p_net. + */ + +struct alt_iniche_dev_struct +{ + alt_llist llist; + char *name; + alt_iniche_dev_init_func init_func; + void *p_driver_data; + int if_num; + NET p_net; +}; + + +/******************************************************************************* + * + * Macros. + * + ******************************************************************************/ + +/* + * alt_iniche_dev_reg + * + * --> p_dev Device to register. + * + * This macro registers the InterNiche device specified by p_dev with the + * InterNiche device services. + */ + +extern alt_llist alt_iniche_dev_list; + +#define alt_iniche_dev_reg(p_dev) \ + alt_llist_insert(&alt_iniche_dev_list, &((p_dev)->llist)) + + +/******************************************************************************* + * + * InterNiche device services prototypes. + * + ******************************************************************************/ + +int iniche_devices_init( + int ifacesFound); + + +/******************************************************************************* + ******************************************************************************* + * + * External InterNiche device services. + * + ******************************************************************************* + ******************************************************************************/ + +/******************************************************************************* + * + * External InterNiche device services prototypes. + * + * These functions are provided by the external system to the InterNiche + * device services. + * + ******************************************************************************/ + +/* + * get_mac_addr + * + * --> net Network interface for which to get MAC address. + * <-- mac_addr MAC address. + * + * This function returns in mac_addr a MAC address to be used with the network + * interface specified by net. + */ + +int get_mac_addr( + NET net, + unsigned char mac_addr[6]); + + +/* + * get_ip_addr + * + * --> p_dev Device for which to get IP address. + * <-- p_addr IP address for device. + * <-- p_netmask IP netmask for device. + * <-- p_gw_addr IP gateway address for device. + * <-- p_use_dhcp TRUE if DHCP should be used to obtain an IP + * address. + * + * This function provides IP address information for the InterNiche network + * interface device specified by p_dev. If a static IP address is to be used, + * the IP address, netmask, and default gateway address are returned in p_addr, + * p_netmask, and p_gw_addr, and FALSE is returned in p_use_dhcp. If the DHCP + * protocol is to be used to obtain an IP address, TRUE is returned in + * p_use_dhcp. + */ + +int get_ip_addr( + alt_iniche_dev *p_dev, + ip_addr *p_addr, + ip_addr *p_netmask, + ip_addr *p_gw_addr, + int *p_use_dhcp); + + +#endif /* __ALT_INICHE_DEV_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/iniche/inc/os/alt_syscall.h b/FPGA_nios/hit_pat_bsp/iniche/inc/os/alt_syscall.h new file mode 100644 index 0000000..6189afb --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/inc/os/alt_syscall.h @@ -0,0 +1,77 @@ +#ifndef __ALT_SYSCALL_H__ +#define __ALT_SYSCALL_H__ + +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +******************************************************************************/ + +/* + * The macros defined in this file are used to provide the function names used + * for the HAL 'UNIX style' interface, e.g. read(), write() etc. + * + * Operating systems which are ported to the HAL can provide their own + * version of this file, which will be used in preference. This allows + * the operating system to provide it's own implementation of the top level + * system calls, while retaining the HAL functions under a different name, + * for example, alt_read(), alt_write() etc. + */ + +#define ALT_NICHESTACK_ALT_SYSCALL_H + +#define ALT_CLOSE alt_close +#define ALT_ENVIRON environ +#define ALT_EXECVE execve +#define ALT_EXIT _exit +#define ALT_FCNTL alt_fcntl +#define ALT_FORK fork +#define ALT_FSTAT fstat +#define ALT_GETPID getpid +#define ALT_GETTIMEOFDAY gettimeofday +#define ALT_IOCTL ioctl +#define ALT_ISATTY isatty +#define ALT_KILL kill +#define ALT_LINK link +#define ALT_LSEEK lseek +#define ALT_OPEN open +#define ALT_READ alt_read +#define ALT_RENAME _rename +#define ALT_SBRK sbrk +#define ALT_SETTIMEOFDAY settimeofday +#define ALT_STAT stat +#define ALT_UNLINK unlink +#define ALT_USLEEP usleep +#define ALT_WAIT wait +#define ALT_WRITE alt_write +#define ALT_TIMES times + +/* + * + */ + +#endif /* __ALT_ALIAS_H__ */ diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/allports/allports.c b/FPGA_nios/hit_pat_bsp/iniche/src/allports/allports.c new file mode 100644 index 0000000..2f5aeb9 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/allports/allports.c @@ -0,0 +1,947 @@ +/* + * FILENAME: allports.c + * + * Copyright 1998-2008 By InterNiche Technologies Inc. All rights reserved + * + * Routines common to most targets. + * + * MODULE: MISCLIB + * + * ROUTINES: netmain_init(), icmp_port_du(), station_state(), + * ROUTINES: ftpc_callback(), sysuptime(), packet_check(), + * ROUTINES: mcastlist(), prep_modules(), + * + * The functions in this file are generic functions + * and hence used for all builds. In addition to the above functions, + * globals "name" and "prompt" are also initialized in this file. + * + * This file was previously .\misclib\cmnport.c + * + * PORTABLE: yes + * They are portable for all targets that InterNiche supports. In future + * if there is need for any of them to be made target-specific, then + * #ifndef wrappers can be provided over here. + */ + +#include "ipport.h" + +#ifdef DHCP_SERVER +#include "dhcpport.h" +#endif /* DHCP_SERVER */ + +#include "libport.h" +#include "q.h" +#include "netbuf.h" +#include "net.h" +#include "ether.h" +#include "arp.h" +#include "ip.h" +#include "icmp.h" +#include "udp.h" +#ifdef IP_V6 +#include "ip6.h" +#endif + +#ifdef INCLUDE_NVPARMS /* system uses InterNiche NV system */ +#include "nvparms.h" +#endif + +#ifdef USE_PPP +#include "ppp_port.h" +#endif /* USE_PPP */ + +#ifdef USE_MODEM +#include "mdmport.h" +#else +#ifdef USE_PPP +#include "../mppp/mppp.h" /* for pppcfg */ +#endif +#endif /* USE_MODEM */ + +#ifdef PING_APP +#include "app_ping.h" +#endif +#ifndef TIMEFOR1TICK +#define TIMEFOR1TICK (1000/TPS) +#endif + +#if defined (IP_MULTICAST) && (defined (IGMP_V1) || defined (IGMP_V2)) +#include "../ipmc/igmp_cmn.h" +#endif /* IP multicast and (IGMPv1 or IGMPv2) */ + +#include "menu.h" +#ifdef INCLUDE_INICHE_LOG +#include "iniche_log.h" +#endif +#ifdef OSPORT_H +#include OSPORT_H +#endif + +/* various network entry points */ +extern char* ip_startup(void); +extern void inet_timer(void); + +#ifdef WEBPORT +extern int http_init(void); /* start up the web server */ +extern int prep_http(void); +#endif + +#ifdef TK_STDIN_DEVICE +extern void kbdio(void); +#endif + +#if defined(TFTP_CLIENT) || defined(TFTP_SERVER) +extern int tftp_init(void); +#endif + +#ifdef TELNET_SVR +extern int tel_init(void); +extern void tel_cleanup(void); +extern int prep_telnet(void); +#endif + +#ifdef DHCP_CLIENT +extern void dhc_setup(void); +#endif + +#ifdef DHCP_SERVER +extern int dhcp_init(void); +extern int prep_dhcpsrv(void); +extern void dhcpsrv_cleanup(void); +#endif + +#ifdef DNS_CLIENT +#include "dns.h" +#endif + +#ifdef TCP_ECHOTEST +extern int tcp_echo_init(void); +extern void tcp_echo_cleanup(void); +extern void tcp_echo_recv(void); +#endif + +#ifdef TCP_CIPHERTEST +extern int tcp_cipher_init(void); +extern void tcp_cipher_cleanup(void); +extern void tcp_cipher_recv(void); +#endif + +#ifdef FTP_CLIENT +extern int fc_check(void); +extern void (*fc_callback)(void *fc,int logstate, int cmdstate); +extern void ftpc_callback(void *fc,int logstate, int cmdstate); +extern int prep_ftpc(void); +#endif + +#ifdef VFS_FILES +extern int prep_vfs(void); +#endif + +#ifdef SMTP_ALERTS +extern int smtp_init(void); +extern int prep_smtp(void); +#endif + +#ifdef NATRT +extern int prep_natrt(void); +#endif + +#ifdef IP_MULTICAST +/* Add multicast test program call and a dummy definition of mcastlist */ +extern void u_mctest_init(void); +extern int mcastlist(struct in_multi *); +#endif /* IP_MULTICAST */ + +#ifdef TESTMENU /* after menus.h */ +extern struct menu_op testmenu[10]; +#endif /* TESTMENU */ + +#ifdef CSUM_DEMO +extern int cksum_init(void); +extern void csum_init(void); +#endif + +#ifdef DNS_SERVER +extern int dns_srvr_check(void); +extern int dns_srvr_init(int ); +extern void dns_srvr_timer(void); +#endif /* DNS_SERVER */ + +#ifdef UDPSTEST +extern int udp_echo_init(void); +extern void udp_echo_cleanup(void); +#endif /* UDPSTEST */ + +#ifdef RIP_SUPPORT +extern int rip_init(void); +extern void rip_cleanup(void); +extern int prep_rip(void); +#endif /* RIP_SUPPORT */ + +#ifdef INCLUDE_SNMP +extern int snmp_init(void); +extern void snmp_cleanup(void); +extern int prep_snmp(void); +#endif /* INCLUDE_SNMP */ + +#ifdef RAWIPTEST +extern int raw_test_init(void); +#endif /* RAWIPTEST */ + +#ifdef SUPERLOOP +#define task_stats(x) ; +#else +void task_stats(void * pio); +#endif + +#ifdef FULL_ICMP +void icmp_port_du(PACKET p, struct destun * pdp); +#endif + +#ifdef FTP_SERVER +extern int ftps_init(void); +extern void ftps_cleanup(void); +#endif + +#if defined(MEMDEV_SIZE) && defined(VFS_FILES) +extern int init_memdev(void); +#endif + +#ifdef USE_AUTOIP +extern int Upnp_init(void); +#endif /* USE_AUTOIP */ + +#ifdef INICHE_SYSLOG +extern int syslog_init(void); +extern void closelog(void); +extern int prep_syslog(void); +#endif /* INICHE_SYSLOG */ + +#ifdef INCLUDE_SSLAPP +extern int sslapp_init(void); +#endif /* INCLUDE_SSLAPP */ +#ifdef SUPERLOOP +int iniche_net_ready = FALSE; +#endif + +#ifdef USE_SNTP_V4 +int sntpv4_init (void); +int sntpv4_app (void); +#endif + +/* The following global variables are used in most ports. They are used by code + * covered under a variety of ipport.h feature ifdefs. Experience has show that + * it's not practical to do a complete ifdef to omit these when they are not + * in use. It would require a huge multiple OR case, and many preprocessors + * don't handle ifdef logic that complex. + */ + +char * name = "InterNiche Portable TCP/IP, v3.1 \n"; +char * prompt = "INET> "; /* prompt for console */ +ip_addr activehost = 0L; /* common host parameter */ +u_long pingdelay = TPS; /* common delay parameter (1 second) */ +int deflength = 64; /* common length parameter */ + +/* PING_APP-related variables */ +#ifdef PING_APP +extern ip_addr ping4_activehost; /* default ping host */ +extern u_long ping4_delay; /* 1 second between pings */ +extern u_long ping4_deflength; /* default ping packet data length */ +#endif /* PING_APP */ + +#ifdef DNS_CLIENT_UPDT +extern u_long dns_update_server; +#endif /* DNS_CLIENT_UPDT */ + + +#ifdef USE_COMPORT +#include "comline.h" /* include if not yet included */ +/* Struct contaning all configuration global params for Comport */ +struct ComPortCfg comportcfg; +#endif /* USE_COMPORT */ + +/* static net structs, so we can patch in default IP address. */ +extern struct net netstatic[STATIC_NETS]; + + +/* FUNCTION: netmain_init() + * + * Initialize all the modules that are being compiled in. + * This function is generic and is required for all builds + * + * Tasks do their own initialization. Hence for modules which have + * their own tasks, we don't do the initialization in netmain_init(). + * That is done by putting then under "#ifdef SUPERLOOP" + * + * PARAM1: + * + * RETURNS: + */ + +void +netmain_init(void) +{ + int e = 0; + char * msg; +#ifdef IP_V6 + ip6_addr host; +#endif + + printf("%s\n", name); + printf("Copyright 1996-2008 by InterNiche Technologies. All rights reserved. \n"); +#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(); + if (msg) + panic(msg); +#endif + +#ifdef INCLUDE_NVPARMS /* system uses InterNiche NV system */ + e = get_nv_params(); /* get flash parameters into data structs */ + if (e) + { + printf("fatal error (%d) reading NV parameters.\n", e); + panic("nv"); + } + + /* set static iface IP info up from stored parameters. These may + be overwritten from command line parms or DHCP later. */ + { + int i; + + for (i = 0; i < STATIC_NETS; i++) + { + netstatic[i].n_ipaddr = inet_nvparms.ifs[i].ipaddr; + netstatic[i].snmask = inet_nvparms.ifs[i].subnet; + netstatic[i].n_defgw = inet_nvparms.ifs[i].gateway; +#ifdef IP_MULTICAST + /* Create a dummy entry for the Ethernet interface mcastlist */ + /* If this entry is set to NULL, multicast is not supported */ + /* on this interface */ + netstatic[i].n_mcastlist = mcastlist; +#if defined (IGMP_V1) || defined (IGMP_V2) + if ((inet_nvparms.ifs[i].igmp_oper_mode != IGMP_MODE_V1) && + (inet_nvparms.ifs[i].igmp_oper_mode != IGMP_MODE_V2)) + netstatic[i].igmp_oper_mode = IGMP_MODE_DEFAULT; + else + netstatic[i].igmp_oper_mode = inet_nvparms.ifs[i].igmp_oper_mode; +#endif /* IGMPv1 or IGMPv2 */ +#endif /* IP_MULTICAST */ + } + } + +#ifdef DNS_CLIENT + /* set DNS client's server list from nvparms information */ + MEMCPY(dns_servers, inet_nvparms.dns_servers, sizeof(dns_servers)); + +#ifdef DNS_CLIENT_UPDT + MEMCPY(soa_mname, inet_nvparms.dns_zone_name, sizeof(soa_mname)); + MEMCPY(&dns_update_server, &inet_nvparms.dns_update_server, sizeof(dns_update_server)); +#endif /* DNS_CLIENT_UPDT */ + +#endif /* DNS_CLIENT */ + +#ifdef USE_COMPORT + comportcfg.comport = comport_nvparms.comport; + comportcfg.LineProtocol = comport_nvparms.LineProtocol; +#endif /* USE_COMPORT */ +#endif /* INCLUDE_NVPARMS */ + +#ifndef INCLUDE_NVPARMS +#ifdef USE_COMPORT + comportcfg.comport = 0x01; + comportcfg.LineProtocol = PPP; /* Default to PPP */ +#endif /* USE_COMPORT */ +#endif /* INCLUDE_NVPARMS */ + +#ifdef IP_V6 + ip6_init(); +#endif + +#ifdef INCLUDE_INICHE_LOG + if(global_log_create()) + { + printf("global_log_create() failed\n"); + } + glog_with_type(LOG_TYPE_INFO, "INICHE LOG initialized", 1); +#endif + + msg = ip_startup(); + if (msg) + { + printf("inet startup error: %s\n", msg); + panic("IP"); + } + +#if defined(MEMDEV_SIZE) && defined(VFS_FILES) + init_memdev(); /* init the mem and null test devices */ +#endif + +#ifdef IP_MULTICAST +#ifdef INCLUDE_TCP + /* call the IP multicast test program */ + u_mctest_init(); +#endif +#endif + + /* clear debugging flags. Port can optionally turn them + * back on in post_task_setup(); + * NDEBUG = UPCTRACE | IPTRACE | TPTRACE ; + */ + NDEBUG = 0; + + /* print IP address of the first interface - for user's benefit */ + printf("IP address of %s : %s\n" , ((NET)(netlist.q_head))->name, + print_ipad(((NET)(netlist.q_head))->n_ipaddr)); + +#ifndef SUPERLOOP + /* call this per-target routine after basic tasks & net are up */ + msg = post_task_setup(); + if (msg) + panic(msg); +#endif + +#ifdef PING_APP + ping_init(); +#endif /* PING_APP */ + +#ifdef RAWIPTEST + raw_test_init(); +#endif /* RAWIPTEST */ + +#if defined(TFTP_CLIENT) || defined(TFTP_SERVER) + tftp_init(); +#endif /* TFTP */ + +#ifdef TESTMENU + install_menu(testmenu); +#endif /* TESTMENU */ +#ifdef CSUM_DEMO + cksum_init(); +#endif + +#ifdef USE_AUTOIP + Upnp_init(); /* start Auto IP before DHCP client */ +#endif /* USE_AUTOIP */ + +#ifdef DHCP_CLIENT + dhc_setup(); /* kick off any DHCP clients */ +#endif /* DHCP_CLIENT */ + +#ifdef DHCP_SERVER +#ifdef INCLUDE_NVPARMS + if(dhserve_nvparms.ServeDHCP) +#endif + { + e = dhcp_init(); + if(e) + { + dprintf("Error %d starting DHCP server.\n",e); + } + else + { + exit_hook(dhcpsrv_cleanup); + dprintf("Started DHCP server\n"); + } + } +#endif /* DHCP_SERVER */ + +#ifdef IN_MENUS + printf(prompt); +#endif + +#ifdef UDPSTEST + e=udp_echo_init(); + if ( e == SUCCESS ) + { + exit_hook(udp_echo_cleanup); + } + else + dprintf("Error %d starting UDP Echo server.\n",e); +#endif + +#ifdef RIP_SUPPORT + e=rip_init(); + if ( e == SUCCESS ) + { + exit_hook(rip_cleanup); + } + else + dprintf("Error %d starting RIP server.\n",e); +#endif + +#ifdef INICHE_SYSLOG + e =syslog_init(); + if (e == SUCCESS) + exit_hook(closelog); + else + dprintf("Error %d initializing syslog client.\n",e); +#endif + +#ifdef FTP_CLIENT + fc_callback=ftpc_callback; +#endif + +#ifdef INCLUDE_SSLAPP + sslapp_init(); +#endif + +#ifdef USE_SNTP_V4 + sntpv4_init (); +#endif + +/* The following initializations take place when SUPERLOOP is enabled. + * Otherwise they would be done in the respective task. + */ + +#ifdef SUPERLOOP + +#ifdef INCLUDE_SNMP + e = snmp_init(); + if (e == SUCCESS) + exit_hook(snmp_cleanup); + else + dprintf("Error %d initializing SNMP agent.\n",e); +#endif /* INCLUDE_SNMP */ + +#ifdef WEBPORT + e = http_init(); /* start up http server */ + if (e) + dprintf("Error %d starting HTTP server.\n",e); +#endif /* WEBPORT */ + +#ifdef FTP_SERVER + e = ftps_init(); + if ( e == SUCCESS ) + { + exit_hook(ftps_cleanup); + } + else + dprintf("Error %d starting FTP server.\n",e); +#endif /* FTP_SERVER */ + +#ifdef TELNET_SVR + e=tel_init(); + if ( e == SUCCESS ) + { + exit_hook(tel_cleanup); + } + else + dprintf("Error %d starting TELNET server.\n",e); +#endif + +#ifdef TCP_ECHOTEST + e=tcp_echo_init(); + if ( e == SUCCESS ) + { + exit_hook(tcp_echo_cleanup); + } + else + dprintf("Error %d starting TCP Echo server.\n",e); +#endif +#ifdef TCP_CIPHERTEST + e=tcp_cipher_init(); + if ( e == SUCCESS ) + { + exit_hook(tcp_cipher_cleanup); + } + else + dprintf("Error %d starting TCP cipher server.\n",e); +#endif +#ifdef USE_CRYPTOENG + e = ce_init(); + if(e != 0) + { + dprintf("ce_init() failed\n"); + panic("prep_modules"); + } +#endif + +#ifdef SMTP_ALERTS + smtp_init (); +#endif + +#ifdef CSUM_DEMO + csum_init(); +#endif + +#ifdef USE_SNTP_V4 + e = sntpv4_app (); + if(e != 0) + { + dprintf("Failed to start time sync via SNTPv4 client\n"); + panic("prep_modules"); + } +#endif + +#endif /* SUPERLOOP */ + +#ifdef INCLUDE_SSLAPP + e = sslapp_init(); + if(e != 0) + { + dprintf("sslapp_init() failed\n"); + panic("prep_modules"); + } +#endif + USE_ARG(e); /* Avoid compiler warnings */ + +} /* end of netmain_init() */ + + +#ifdef FULL_ICMP +char * icmpdu_types[] = { + "NET", + "HOST", + "PROT", + "PORT", + "FRAG", + "SRC", +}; + +/* FUNCTION: imcp_port_du() + * + * PARAM1: void * pio + * + * RETURNS: + */ + +void +icmp_port_du(PACKET p, struct destun * pdp) +{ + dprintf("got ICMP %s UNREACHABLE from %s\n", + icmpdu_types[(int)(pdp->dtype)], print_ipad(p->fhost) ); + dprintf(prompt); +} +#endif /* FULL_ICMP */ + + + +/* FUNCTION: station_state() + * + * state() - printf some info about the current state of the user + * settable station variables. + * + * PARAM1: void * pio + * + * RETURNS: + */ + +int +station_state(void * pio) +{ + int i; + +#ifndef NO_INET_STACK + NET ifp; + + for (i = 0, ifp = (NET)netlist.q_head; ifp; ifp = ifp->n_next, i++) + { + ns_printf(pio, "iface %d-%s IP addr:%s ", + i, ifp->name, print_ipad(ifp->n_ipaddr) ); + ns_printf(pio, "subnet:%s ", print_ipad(ifp->snmask) ); + ns_printf(pio, "gateway:%s\n", print_ipad(ifp->n_defgw) ); + } +#endif /* NO_INET_STACK */ + + ns_printf(pio, "current tick count %lu\n", cticks); + + ns_printf(pio, "common delay parameter: %lu ticks (%lu ms).\n", pingdelay, (pingdelay * TIMEFOR1TICK)); + ns_printf(pio, "common host parameter: %s\n", print_ipad(activehost)); + ns_printf(pio, "common length parameter: %d\n", deflength); + +#ifdef PING_APP + ns_printf(pio, "ping delay: %lu ticks (%lu ms).\n", ping4_delay, (ping4_delay * TIMEFOR1TICK)); + ns_printf(pio, "ping host: %s\n", print_ipad(ping4_activehost)); + ns_printf(pio, "ping length: %lu\n", ping4_deflength); +#endif + +#ifdef USE_MODEM + ns_printf(pio, "current dialout number is %s\n", mdm_dial_string); +#endif /* USE_MODEM */ + +#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); + + return 0; +} + +#ifdef FTP_CLIENT +/* If FC_USECALLBACK is enabled in ftpclnt.h, and if fc_callback + * is defined, then FTP Client will call fc_callback when + * its state changes. FC_USECALLBACK is enabled by default. + */ + +void ftpc_callback(void *fc,int logstate, int cmdstate) +{ + /* + dprintf("logstate=%d, cmdstate=%d\n",logstate,cmdstate); + */ + + USE_VOID(fc); + USE_ARG(logstate); + USE_ARG(cmdstate); +} + +#endif + + +#ifndef NO_INET_STACK /* these functions are pretty stack-centric */ + + +/* FUNCTION: sysuptime() + * + * sysuptime() - return MIB-2 sys group compatable "sysUptime" value + * + * PARAM1: + * + * RETURNS: + */ + +unsigned long +sysuptime() +{ + return ((cticks/TPS)*100); /* 100ths of a sec since boot time */ +} + + +/* FUNCTION: packet_check() - check for incoming packet + * Process incoming packets. + * + * inside_pktdemux is nonzero while processing a received packet. + * It is used for reentrancy protection. + * + * PARAM1: + * + * RETURNS: + */ + + +static int inside_pktdemux = 0; + +void +packet_check(void) +{ + if(inside_pktdemux != 0) /* check re-entrancy flag */ + return; /* do not re-enter pktdemux(), packet will wait... */ + inside_pktdemux++; /* set re-entrany flag */ + pktdemux(); /* process low level packet input */ + inside_pktdemux--; /* clear re-entrany flag */ +} + +#ifdef IP_MULTICAST +/* This is a dummy routine that is replaced by the porting engineer with + * a routine by the same name in the Ethernet driver. The purpose of this + * routine is to convert IP multicast addresses to their Ethernet multicast + * addresses and program the chip with the appropriate Ethernet multicast + * filters. In the case of PPP, this dummy routine can be used. + */ + + +/* FUNCTION: mcastlist() + * + * PARAM1: struct in_multi *multi_ptr + * + * RETURNS: + */ + +int +mcastlist(struct in_multi * multi_ptr) +{ + USE_ARG(multi_ptr); + + return 0; +} +#endif /* IP_MULTICAST */ + +/********* For Superloop AND Netmain builds *********************/ + +/* FUNCTION: prep_modules() + * + * Call the preparation functions for all modules. + * Each module can have a preparation function wherein it + * intializes the menu, nvparms, etc. + * + * PARAM1: + * + * RETURNS: 0 on SUCCESS. + * + */ + + +#ifdef USE_PPP +extern int ppp_setup(void); +#endif /* USE_PPP */ + +#ifdef USE_MODEM +extern int prep_modem(void); +#endif /* USE_MODEM */ + +int prep_modules(void) +{ +#ifdef IP_V6 + ip6_addr host; + int i; +#endif + +int e = 0; + + +#ifdef IP_V6 + for (i = 0; i < STATIC_NETS; i++) + { + /* zero out addresses */ + { + int ifIndx; + + for (ifIndx = 0; ifIndx < MAX_V6_ADDRS; ifIndx++) + netstatic[i].v6addrs[ifIndx] = (struct ip6_inaddr *)0; + for (ifIndx = 0; ifIndx < MAX_V6_ADDRS; ifIndx++) + netstatic[i].v6addrsExtd[ifIndx] = (struct ip6_inaddr *)0; + } + } + ip6_init(); +#endif + +#ifdef PING_APP + ping_init(); +#endif /* PING_APP */ + + +#ifdef USE_CRYPTOENG + e = ce_init(); + if(e != 0) + { + dprintf("ce_init() failed\n"); + panic("prep_modules"); + } +#endif +#ifdef USE_PPP + e = ppp_setup(); + if (e != 0) + { + dprintf("PPP Module setup failed\n"); + panic("prep_modules"); + } +#endif /* USE_PPP */ + +#ifdef USE_MODEM + e = prep_modem(); + if (e != 0) + { + dprintf("Modem Module prep failed\n"); + panic("prep_modules"); + } +#endif /* USE_MODEM */ + +#ifdef TELNET_SVR + e = prep_telnet(); + if (e != 0) + { + dprintf("Telnet Module prep failed\n"); + panic("prep_modules"); + } +#endif /* TELNET_SVR */ + +#ifdef DHCP_SERVER + e = prep_dhcpsrv(); + if (e != 0) + { + dprintf("DHCP Server Module prep failed\n"); + panic("prep_modules"); + } +#endif /* DHCP_SERVER */ + +#ifdef NATRT + e = prep_natrt(); + if (e != 0) + { + dprintf("Nat Router Module prep failed\n"); + panic("prep_modules"); + } +#endif /* NATRT */ + +#ifdef RIP_SUPPORT + e = prep_rip(); + if (e != 0) + { + dprintf("Rip Module prep failed\n"); + panic("prep_modules"); + } +#endif /* RIP_SUPPORT */ + +#ifdef INCLUDE_SNMP + e = prep_snmp(); + if (e != 0) + { + dprintf("SNMP Module prep failed\n"); + panic("prep_modules"); + } +#endif /* INCLUDE_SNMP */ + +#ifdef INICHE_SYSLOG + e = prep_syslog(); + if (e != 0) + { + dprintf("Syslog Client prep failed\n"); + panic("prep_modules"); + } +#endif /* INICHE_SYSLOG */ + +#ifdef SMTP_ALERTS + e = prep_smtp(); + if (e != 0) + { + dprintf("SMTP Module prep failed\n"); + panic("prep_modules"); + } +#endif /* SMTP_ALERTS */ + +#ifdef VFS_FILES + e = prep_vfs(); + if (e != 0) + { + dprintf("VFS Module prep failed\n"); + panic("prep_modules"); + } +#endif /* VFS_FILES */ + + +#ifdef FTP_CLIENT + e = prep_ftpc(); + if (e != 0) + { + dprintf("FTP Client Module prep failed\n"); + panic("prep_modules"); + } +#endif /* FTP_CLIENT */ + +#ifdef WEBPORT + e = prep_http(); + if (e != 0) + { + dprintf("Web Server Module prep failed\n"); + panic("prep_modules"); + } +#endif /* WEBPORT */ + +#ifdef INCLUDE_SSLAPP + e = sslapp_init(); + if(e != 0) + { + dprintf("sslapp_init() failed\n"); + panic("prep_modules"); + } +#endif + return 0; +} + +#endif /* NO_INET_STACK */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/allports/timeouts.c b/FPGA_nios/hit_pat_bsp/iniche/src/allports/timeouts.c new file mode 100644 index 0000000..eecfcf1 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/allports/timeouts.c @@ -0,0 +1,360 @@ +/* + * FILENAME: timeouts.c + * + * Copyright 2000 By InterNiche Technologies Inc. All rights reserved + * + * Handles InterNiche task & application interval timers. + * + * MODULE: MISCLIB + * + * ROUTINES: inet_timer(), + * + * PORTABLE: yes + */ + + +#include "ipport.h" +#include "in_utils.h" +#include "q.h" +#include "netbuf.h" +#include "net.h" +#include "arp.h" +#include "ip.h" + +#ifdef INICHE_TIMERS /* build using interval timers? */ +#include "intimers.h" +static void check_interval_timers(void); +#endif + +#ifdef INCLUDE_TCP +void tcp_tick(void); +#endif + +#if defined (IP_MULTICAST) && (defined (IGMP_V1) || defined (IGMP_V2)) +/* Call igmp timeout routine */ +extern unsigned long igmp_cticks; +extern void igmp_fasttimo(void); +#endif /* IP_MULTICAST and (IGMPv1 or IGMPv2) */ + +#ifdef USE_PPP +extern void ppp_timeisup(void); +#endif +#ifdef DHCP_CLIENT +extern int dhc_discover(int iface); +extern int dhc_second(void); +#endif +#ifdef DHCP_SERVER +extern void dhcp_timeisup(void); +#endif +#ifdef FTP_SERVER +extern void ftps_check(void); +#endif +#ifdef DNS_CLIENT +extern void dns_check(void); +#endif +#ifdef NATRT +extern void nat_timeisup(void); +#endif +#ifdef USE_MODEM +extern void dial_check(void); +#endif +#ifdef USE_COMPORT +extern void uart_check(void); +#endif +#ifdef PING_APP +void ping_check(void); +#endif +#ifdef IP_V6 +void ip6_timer(void); +static unsigned long v6timer_mod = 0L; +#endif +#ifdef TCP_ECHOTEST +void tcp_echo_poll(void); +#endif +#if defined(TFTP_CLIENT) || defined(TFTP_SERVER) +extern void tftp_tick(void); +#endif +#ifdef UDPSTEST +extern void udp_echo_poll(void); +#endif /* UDPSTEST */ +#ifdef RIP_SUPPORT +extern void rip_check(void); +#endif /* RIP_SUPPORT */ +#ifdef INCLUDE_SNMP +extern void snmp_check(void); +#endif +#ifdef BTREE_ROUTES +extern void rtbtree_tmo(void); +#endif /* BTREE_ROUTES */ +#ifdef RAWIPTEST +extern void raw_testerq_poll(void); +#endif /* RAWIPTEST */ +#ifdef WEBPORT +extern void http_check(void); +#endif +#ifdef TELNET_SVR +extern void tel_check(void); +#endif +#ifdef FTP_CLIENT +void ftpc_periodic_timer(void); +#endif +#ifdef IP_FRAGMENTS +extern u_long ire_cticks; +extern u_char ip_reasm_process_timer_tick(void); +#endif +#ifdef USE_SNTP_V4 +extern int sntpv4_timeout(void); +#endif + +/* if INICHE_TASKS is defined, this is done vxd_task() in task for Vxd */ +#ifndef INICHE_TASKS +#ifdef USE_VXD +extern void vxd_check(void); +#endif +#endif + +unsigned long nextppp = 0L; /* tick for next call to ppp timer */ + +void (*port_1s_callout)(void) = NULL; + +/* FUNCTION: inet_timer() + * + * This handles all TCP/IP related timeouts. Ideally this should be + * called about 10 times a second; and no less than twice a second + * (The minimum for TCP timeouts). Does NOT handle most + * application timeouts. + * + * + * PARAM1: void + * + * RETURNS: + */ + +void +inet_timer(void) +{ +#ifdef IP_FRAGMENTS + /* run thru' the IP reassembly queue (once every second) */ + if (ire_cticks < cticks) + ip_reasm_process_timer_tick (); +#endif + +#ifdef INCLUDE_TCP + tcp_tick(); /* run TCP timers */ +#endif + +#ifdef INICHE_TIMERS /* interval timers? */ + 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 */ + igmp_fasttimo(); +#endif /* IP_MULTICAST and (IGMPv1 or IGMPv2) */ + +#ifdef USE_SNTP_V4 + sntpv4_timeout (); +#endif + +#ifdef USE_MODEM + dial_check(); +#endif /* USE_MODEM */ + +#ifdef USE_COMPORT + uart_check(); +#endif + +#ifdef UDPSTEST + udp_echo_poll(); +#endif + +#ifdef PING_APP + ping_check(); /* check for ping send/receive */ +#endif + +#ifdef RAWIPTEST + raw_testerq_poll(); +#endif + + +#ifdef SUPERLOOP +#ifdef WEBPORT + http_check(); +#endif +#ifdef TELNET_SVR + tel_check(); +#endif +#ifdef INCLUDE_SNMP + snmp_check(); +#endif +#endif /* SUPERLOOP */ + + +/* if INICHE_TASKS is defined, this is done vxd_task() in task for Vxd */ +#if (defined(USE_VXD) && !defined(INICHE_TASKS)) + vxd_check(); +#endif + +/* !!!??? */ +#ifdef IP_V6 + if ((v6timer_mod < cticks) || /* next call to ip6_timer is due */ + (v6timer_mod > (cticks + (10 * TPS))) ) /* for when cticks wraps */ + { + v6timer_mod = cticks + (TPS / 5); + ip6_timer(); + } +#endif + + + + /* Some timer routines only need calling once a second: */ + if ((nextppp < cticks) || /* next call to PPP is due */ + (nextppp > (cticks+(10*TPS))) ) /* for when cticks wraps */ + { + nextppp = cticks + TPS; + + if (port_1s_callout != NULL) + (*port_1s_callout)(); + +#ifdef USE_PPP + ppp_timeisup(); +#endif +#ifdef DHCP_CLIENT + dhc_second(); +#endif +#ifdef DHCP_SERVER + dhcp_timeisup(); +#endif +#ifdef DNS_CLIENT + dns_check(); +#endif +#ifdef NATRT + nat_timeisup(); +#endif +#ifdef RIP_SUPPORT + rip_check(); +#endif +#if defined(TFTP_CLIENT) || defined(TFTP_SERVER) + tftp_tick(); +#endif + +#ifdef BTREE_ROUTES + rtbtree_tmo(); +#endif /* BTREE_ROUTES */ +#ifdef FTP_CLIENT + ftpc_periodic_timer(); +#endif +#ifdef IPSEC + IPSecTimer(); +#endif + } +} + + +#ifdef INICHE_TIMERS + +struct intimer intimers[NUM_INTIMERS]; + +/* FUNCTION: check_interval_timers() + * + * Check to see if any interval timers are ready to fire. + * + * RETURNS: NA + */ + +static int numtimers = 0; /* number of active timers */ + +static void +check_interval_timers(void) +{ + int i; + int found = 0; /* number of valid timers found */ + + /* if no timers, just return */ + if (numtimers > 0) + { + /* loop throught the timer list looking for active timers ready to fire */ + for (i = 0; i < NUM_INTIMERS; i++) + { + if (intimers[i].callback) /* is this timer active? */ + { + if ((intimers[i].tmo < cticks) && (!intimers[i].inuse)) /* timer ready fire? */ + { + intimers[i].tmo = intimers[i].interval + cticks; /* set next tmo */ + intimers[i].inuse = TRUE; + intimers[i].callback(intimers[i].parm); /* call user routine */ + intimers[i].inuse = FALSE; + } + /* If we've examined all the active timers, we're done */ + if (++found >= numtimers) + break; + } + } + } +} + +/* FUNCTION: in_timerset() + * + * Create an interval timer + * + * PARAM1: callback routine + * PARAM2: number of milliseconds between callback calls + * PARAM3: parameter to pass to callbacks + * + * RETURNS: timer ID if OK, else if table is full. + */ + +long +in_timerset(void (*callback)(long), long msecs, long parm) +{ + int i; + + for(i = 0; i < NUM_INTIMERS; i++) + { + if(intimers[i].callback == NULL) + { + /* found empty table entry, set up new timer */ + intimers[i].callback = callback; + intimers[i].parm = parm; + /* set interval, in TPS (cticks) units */ + intimers[i].interval = (msecs * TPS)/1000; + intimers[i].tmo = intimers[i].interval + cticks; /* first tmo */ + intimers[i].inuse = FALSE; + numtimers++; + return (long)&intimers[i]; + } + } + return 0; +} + +/* FUNCTION: in_timerkill() + * + * Delete a timer created previously by a call to in_timerset() + * + * PARAM1: long timer Address of the timer to delete. + * + * RETURNS: 0 if OK, ENP error if timer not in list. + */ + + +int +in_timerkill(long timer) +{ + int i; + + for(i = 0; i < NUM_INTIMERS; i++) + { + if(timer == (long)&intimers[i]) + { + intimers[i].callback = NULL; + numtimers--; + return 0; /* OK return */ + } + } + dtrap(); /* timer to kill not found */ + return ENP_PARAM; +} + +#endif /* INICHE_TIMERS */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/allports/tk_misc.c b/FPGA_nios/hit_pat_bsp/iniche/src/allports/tk_misc.c new file mode 100644 index 0000000..65c44bd --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/allports/tk_misc.c @@ -0,0 +1,358 @@ +/* + * FILENAME: tk_misc.c + * + * Copyright 2002 By InterNiche Technologies Inc. All rights reserved + * + * Routines to create Network Tasks for the Generic Multitasking systems ports + * of InterNiche TCP/IP NetOS package. Also contains other miscellaneous + * routines for Multitasking ports. + * + * MODULE: ALLPORTS + * + * ROUTINES: create_apptasks(), tk_keyboard() + * ROUTINES: task_stats() + * + * PORTABLE: yes + */ + +#include "ipport.h" +#include "libport.h" + +/* Multitasking systems should use this file, however superloop + *systems need to be able to ifdef it away + */ + +#ifndef SUPERLOOP /* whole file can be ifdeffed out */ + +/* include project header. Define this in ipport.h to point to a file + * in your project directory, i.e. "..\******\osport.h" + */ + +#ifndef OSPORT_H +#error Need to define OSPORT_H +#endif +#include OSPORT_H + +#ifdef WEBPORT +extern struct inet_taskinfo httptask; +extern long webport_wakes; +#endif +#ifdef FTP_SERVER +extern struct inet_taskinfo ftpstask; +extern long ftpsrv_wakes; +#endif +#ifdef FTP_CLIENT +extern struct inet_taskinfo ftpctask; +#endif +#ifdef SMTP_ALERTS +extern struct inet_taskinfo smtptask; +extern long emailer_wakes; +#endif +#ifdef TELNET_SVR +extern struct inet_taskinfo telnettask; +extern long telnetsrv_wakes; +#endif +#ifdef USE_CRYPTOENG +extern struct inet_taskinfo cuexecutetask; +extern long cuexecute_wakes; +#endif +#ifdef USE_SYSLOG_TASK +extern struct inet_taskinfo syslog_task; +extern long syslog_wakes; +#endif +#ifdef INCLUDE_SNMP +extern struct inet_taskinfo snmptask; +extern long snmp_wakes; +#endif +#ifdef DNS_SERVER +extern struct inet_taskinfo dnssrvtask; +#endif +#ifdef NICHVIEW +extern struct inet_taskinfo browtask; +extern long browtask_wakes; +#endif +#ifdef TK_STDIN_DEVICE +extern struct inet_taskinfo keyboardtask; +extern long keyboard_wakes; +extern void kbdio(void); +#endif +#ifdef USE_SNTP_V4 +extern struct inet_taskinfo sntpv4apptask; +#endif +#ifndef NO_INET_STACK +extern long netmain_wakes; +#endif /* NO_INET_STACK */ +#ifndef NO_INET_TICK +extern long nettick_wakes; +#endif /* NO_INET_TICK */ +#ifdef PING_APP +extern long pingcheck_wakes; +#endif /* #ifdef PING_APP */ +#ifdef TCP_ECHOTEST +extern long echotest_wakes; +#endif /* TCP_ECHOTEST */ +#ifdef TCP_CIPHERTEST +extern long ciphertest_wakes; +#endif /* TCP_CIPHERTEST */ +#ifdef IKE +extern struct inet_taskinfo iketask; +extern long ike_wakes; +#endif +#ifdef INCLUDE_SSLAPP +extern struct inet_taskinfo sslapp_task; +extern long sslapp_wakes; +#endif +/* per-application thread definitions */ + +int +create_apptasks(void) +{ +int e = 0; +#ifdef USE_CRYPTOENG + e = TK_NEWTASK(&cuexecutetask); + if (e != 0) + { + dprintf("cuexecutetask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef WEBPORT + e = TK_NEWTASK(&httptask); + if (e != 0) + { + dprintf("httptask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef FTP_SERVER + e = TK_NEWTASK(&ftpstask); + if (e != 0) + { + dprintf("ftpstask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef FTP_CLIENT + e = TK_NEWTASK(&ftpctask); + if (e != 0) + { + dprintf("ftpctask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef SMTP_ALERTS + e = TK_NEWTASK(&smtptask); + if (e != 0) + { + dprintf("smtptask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef TELNET_SVR + e = TK_NEWTASK(&telnettask); + if (e != 0) + { + dprintf("telnettask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef INCLUDE_SNMP + e = TK_NEWTASK(&snmptask); + if (e != 0) + { + dprintf("snmptask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef DNS_SERVER + e = TK_NEWTASK(&dnssrvtask); + if (e != 0) + { + dprintf("dnssrvtask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef NICHVIEW + e = TK_NEWTASK(&browtask); + if (e != 0) + { + dprintf("browtask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef TK_STDIN_DEVICE + e = TK_NEWTASK(&keyboardtask); + if (e != 0) + { + dprintf("keyboardtask create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef IKE + e = TK_NEWTASK(&iketask); + if (e != 0) + { + dprintf("IKE create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef USE_SYSLOG_TASK + e = TK_NEWTASK(&syslog_task); + if(e != 0) + { + dprintf("syslog_task create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef INCLUDE_SSLAPP + e = TK_NEWTASK(&sslapp_task); + if (e != 0) + { + dprintf("sslapp_task create error\n"); + panic("create_apptasks"); + return -1; /* compiler warnings */ + } +#endif +#ifdef USE_SNTP_V4 + e = TK_NEWTASK(&sntpv4apptask); + if(e != 0) + { + dprintf("SNTPv4 application task create error\n"); + panic("create_apptasks"); + return -1; + } +#endif +/* + * Altera Niche Stack Nios port modification: + * return error code, if any + */ + return e; +} + +#ifdef TK_STDIN_DEVICE +extern void kbdio(void); +#endif + +#ifdef TK_STDIN_DEVICE +TK_OBJECT(to_keyboard); +TK_ENTRY(tk_keyboard); +long keyboard_wakes = 0; +#endif /* TK_STDIN_DEVICE */ + +#ifdef TK_STDIN_DEVICE +struct inet_taskinfo keyboardtask = { + &to_keyboard, + "console", + tk_keyboard, + TK_KEYBOARD_TPRIO, + IO_STACK_SIZE, +}; +#endif + + +/* FUNCTION: TK_ENTRY() + * + * Task to hand keystrokes to InerNiche menu system + * + * PARAM1: n/a + * + * RETURNS: n/a + */ + +#ifdef TK_STDIN_DEVICE +TK_ENTRY(tk_keyboard) +{ + for (;;) + { + TK_SLEEP(1); /* make keyboard yield some time */ + kbdio(); /* let Iniche menu routines poll for char */ + keyboard_wakes++; /* count wakeups */ + + if (net_system_exit) + break; + } + TK_RETURN_OK(); +} +#endif /* TK_STDIN_DEVICE */ + + + +/* FUNCTION: task_stats() + * + * Print the "wake" statistics of all tasks. + * + * PARAM1: void * pio + * + * RETURNS: + */ + + +void +task_stats(void * pio) +{ + ns_printf(pio, "Task wakeups:"); + +#ifndef NO_INET_STACK + ns_printf(pio, "netmain: %lu\n", netmain_wakes); +#endif +#ifndef NO_INET_TICK + ns_printf(pio, "nettick: %lu\n", nettick_wakes); +#endif +#ifdef TK_STDIN_DEVICE + ns_printf(pio, "keyboard: %lu\n", keyboard_wakes); +#endif +#ifdef WEBPORT + ns_printf(pio, "webport: %lu ", webport_wakes); +#endif +#ifdef FTP_SERVER + ns_printf(pio, "ftpsrv: %lu ", ftpsrv_wakes); +#endif +#ifdef PING_APP + ns_printf(pio, "pingcheck: %lu ", pingcheck_wakes); +#endif +#ifdef TELNET_SVR + ns_printf(pio, "telnetsrv: %lu ", telnetsrv_wakes); +#endif +#ifdef USE_CRYPTOENG + ns_printf(pio, "USE_CRYPTOENG: %lu ", cuexecute_wakes); +#endif +#ifdef USE_SYSLOG_TASK + ns_printf(pio, "USE_SYSLOG_TASK: %lu ", syslog_wakes); +#endif +#ifdef SMTP_ALERTS + ns_printf(pio, "smtpclient: %lu ", emailer_wakes); +#endif +#ifdef SNMP_SOCKETS + ns_printf(pio, "snmpsock: %lu ", snmp_wakes); +#endif +#ifdef TCP_ECHOTEST + ns_printf(pio, "echotest: %lu ", echotest_wakes); +#endif +#ifdef TCP_CIPHERTEST + ns_printf(pio, "ciphertest: %lu ", ciphertest_wakes); +#endif +#ifdef USE_BROWSER + ns_printf(pio, "browtask: %lu ", browtask_wakes); +#endif +#ifdef INCLUDE_SSLAPP + ns_printf(pio, "INCLUDE_SSLAPP: %lu ", sslapp_wakes); +#endif + ns_printf(pio, "\n"); +} + + +#endif /* SUPERLOOP - whole file can be ifdeffed out */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_close.c b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_close.c new file mode 100644 index 0000000..d989cb9 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_close.c @@ -0,0 +1,61 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT IT DIRECTLY. * +* * +* Overriding HAL Functions * +* * +* To provide your own implementation of a HAL function, include the file in * +* your Nios II IDE application project. When building the executable, the * +* Nios II IDE finds your function first, and uses it in place of the HAL * +* version. * +* * +******************************************************************************/ + +#include "system.h" +#include "sys/alt_sys_wrappers.h" +#include "ipport.h" +#include "tcpport.h" + +/* + * close() is called by an application to release a file descriptor. This + * implementation vectors requests to either the HAL alt_close() function + * (for files and device drivers) or the InterNiche soclose() function for + * sockets. + */ + +int close (int fd) +{ + return (fd < ALT_MAX_FD) ? alt_close (fd) : t_socketclose ((long) fd); +} diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_dev.c b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_dev.c new file mode 100644 index 0000000..1414a20 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_dev.c @@ -0,0 +1,147 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +* * +* Source for the Altera InterNiche device services. * +* * +* Author EPS * +* * +******************************************************************************/ + +/******************************************************************************* + ******************************************************************************* + * + * InterNiche device services. + * + ******************************************************************************* + ******************************************************************************/ + +/******************************************************************************* + * + * Imported services. + * + ******************************************************************************/ + +#include "sys/alt_llist.h" +#include "alt_iniche_dev.h" + +#ifdef IP_MULTICAST +#include "ipmc/igmp_cmn.h" +extern int mcastlist(struct in_multi *); +#endif + + +/******************************************************************************* + * + * InterNiche device service globals. + * + ******************************************************************************/ + +/* List of InterNiche devices. */ +ALT_LLIST_HEAD(alt_iniche_dev_list); + + +/******************************************************************************* + * + * InterNiche device service functions. + * + ******************************************************************************/ + +/* + * iniche_devices_init + * + * --> if_count Number of interfaces before init. + * + * <-- Number of interfaces after init. + * + * This function initializes the InterNiche devices. The number of interfaces + * before initialization is specified by if_count. This function returns the + * total number of interfaces after initialization. + */ + +int iniche_devices_init( + int if_count) +{ + alt_iniche_dev *p_dev; + alt_iniche_dev *p_dev_list_end; + NET p_net; + ip_addr ipaddr, + netmask, + gw; + int use_dhcp; + + /* Get the InterNiche device list. */ + p_dev = (alt_iniche_dev *) (alt_iniche_dev_list.next); + p_dev_list_end = (alt_iniche_dev *) (&(alt_iniche_dev_list.next)); + + /* Initialize each InterNiche device. */ + while (p_dev != p_dev_list_end) + { + /* Initialize the InterNiche device data record. */ + p_dev->p_driver_data = p_dev; + p_dev->if_num = if_count; + p_dev->p_net = nets[p_dev->if_num]; + + /* Perform device specific initialization. */ + (*(p_dev->init_func))(p_dev); + + /* Get the interface IP address. */ + p_net = p_dev->p_net; + + if (get_ip_addr(p_dev, &ipaddr, &netmask, &gw, &use_dhcp)) + { +#ifdef DHCP_CLIENT + /* + * OR in the DHCP flag, if enabled. This will allow any + * application-specific flag setting in get_ip_addr(), such + * as enabling AUTOIP, to occur + */ + if (use_dhcp) { + p_net->n_flags |= NF_DHCPC; + } +#endif + p_net->n_ipaddr = ipaddr; + p_net->snmask = netmask; + p_net->n_defgw = gw; +#ifdef IP_MULTICAST + p_net->n_mcastlist = mcastlist; +#if defined (IGMP_V1) || defined (IGMP_V2) + p_net->igmp_oper_mode = IGMP_MODE_DEFAULT; +#endif /* IGMPv1 or IGMPv2 */ +#endif /* IP_MULTICAST */ + } + + /* Initialize next device. */ + if_count++; + p_dev = (alt_iniche_dev *) p_dev->llist.next; + } + + return (if_count); +} diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_fcntl.c b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_fcntl.c new file mode 100644 index 0000000..fa12d36 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_fcntl.c @@ -0,0 +1,74 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT IT DIRECTLY. * +* * +* Overriding HAL Functions * +* * +******************************************************************************/ + +#include +#include +#include "system.h" +#include "sys/alt_sys_wrappers.h" +#include "ipport.h" +#include "tcpport.h" + +/* + * fcntl() is called by an application to release a file descriptor. This + * implementation duplicates the code of the HAL alt_fcntl() function + * (for files and device drivers) or calls the InterNiche bsd_ioctl for + * sockets. + */ + +int fcntl (int file, int cmd, ...) +{ + long flags; + va_list argp; + + if (file < ALT_MAX_FD) + { + va_start(argp, cmd); + flags = va_arg(argp, long); + va_end(argp); + return alt_fcntl(file, cmd, flags); + } + else + { + va_start(argp, cmd); + flags = va_arg(argp, long); + va_end(argp); + return bsd_ioctl(file, cmd, flags); + } +} diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_read.c b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_read.c new file mode 100644 index 0000000..aa88600 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_read.c @@ -0,0 +1,64 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT IT DIRECTLY. * +* * +* Overriding HAL Functions * +* * +* To provide your own implementation of a HAL function, include the file in * +* your Nios II IDE application project. When building the executable, the * +* Nios II IDE finds your function first, and uses it in place of the HAL * +* version. * +* * +******************************************************************************/ + +#include +#include "sys/alt_sys_wrappers.h" +#include "system.h" +#include "ipport.h" +#include "tcpport.h" + +/* + * The read() system call is used to read a block of data from a file or device. + * This implementation vectors requests to either the HAL alt_read() function + * (for files and device drivers) or the InterNiche recvfrom() function for + * sockets. + */ + +int read (int fd, void *ptr, size_t len) +{ + return (fd < ALT_MAX_FD) ? alt_read (fd, ptr, len) + : recvfrom(fd, ptr, len, 0, NULL, NULL); +} + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_write.c b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_write.c new file mode 100644 index 0000000..eed9e14 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/alt_iniche_write.c @@ -0,0 +1,72 @@ +/****************************************************************************** +* * +* License Agreement * +* * +* Copyright (c) 2006 Altera Corporation, San Jose, California, USA. * +* All rights reserved. * +* * +* Permission is hereby granted, free of charge, to any person obtaining a * +* copy of this software and associated documentation files (the "Software"), * +* to deal in the Software without restriction, including without limitation * +* the rights to use, copy, modify, merge, publish, distribute, sublicense, * +* and/or sell copies of the Software, and to permit persons to whom the * +* Software is furnished to do so, subject to the following conditions: * +* * +* The above copyright notice and this permission notice shall be included in * +* all copies or substantial portions of the Software. * +* * +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * +* DEALINGS IN THE SOFTWARE. * +* * +* This agreement shall be governed in all respects by the laws of the State * +* of California and by the laws of the United States of America. * +* * +* Altera does not recommend, suggest or require that this reference design * +* file be used in conjunction or combination with any other product. * +******************************************************************************/ + +/****************************************************************************** +* * +* THIS IS A LIBRARY READ-ONLY SOURCE FILE. DO NOT EDIT IT DIRECTLY. * +* * +* Overriding HAL Functions * +* * +* To provide your own implementation of a HAL function, include the file in * +* your Nios II IDE application project. When building the executable, the * +* Nios II IDE finds your function first, and uses it in place of the HAL * +* version. * +* * +******************************************************************************/ + +#include +#include "sys/alt_sys_wrappers.h" +#include "system.h" +#include "ipport.h" +#include "tcpport.h" + +#ifndef ALT_NICHESTACK_ALT_SYSCALL_H + #error "The NicheStack component header file 'os/alt_syscall.h' is not being used. \ +Please delete the HAL version of this file from the BSP." +#endif +/* + * The write() system call is used to write a block of data to a file or device. + * 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) +{ + if (fd < ALT_MAX_FD) + { + return alt_write (fd, ptr, len); + } + else + { + return send (fd, (void*) ptr, len, 0); + } +} diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/autoip.c b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/autoip.c new file mode 100644 index 0000000..d32bf8b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/autoip.c @@ -0,0 +1,383 @@ +/* + * FILENAME: autoip.c + * + * Copyright 2002 By InterNiche Technologies Inc. All rights reserved + * + * AutoIP ARPs random IP addresses in a private, non-routed range. + * range: 169.254.x.x + * If nothing replys it assigns itself the address. + * + * 9/15/2000 - Created - Stan Breitlow + * + * MODULE: AUTOIP4 + * + * ROUTINES: AutoIp_init(), AutoIp_tick(), + * ROUTINES: AutoIp_arp_response(), AutoIp_send_arp_probe(), + * ROUTINES: AutoIp_pick_address(), AutoIp_get_state(), + * ROUTINES: AutoIp_set_net_vars(), + * + * PORTABLE: yes + */ + + +#include "ipport.h" + +#ifdef USE_AUTOIP +#ifndef DHCP_CLIENT +#error DHCP_CLIENT must be defined with USE_AUTOIP +#endif + +#include "q.h" +#include "netbuf.h" +#include "net.h" +#include "ip.h" +#include "ether.h" +#include "arp.h" +#include "dhcpclnt.h" + +#include "autoip.h" +#include "upnp.h" + +/* Set defaults for Base & range on AUtoIP address pool */ +u_long dBASE_AUTO_IP_ADDRESS = 0xA9FE0100; /* 169.254.1.0 */ +u_long dMAX_AUTO_IP_ADDRESS = 0xA9FEFEFF; /* 169.254.254.255 */ + +#define dRESPONSE_TIMEOUT 2000 /* 2 seconds */ +#define dVERIFY_WAIT_TIME 1000 /* 1 second */ +#define dNUMBER_OF_VERIFIES 3 + + +/* local protos */ +static ip_addr AutoIp_pick_address(void); +static void AutoIp_set_net_vars(int iface); + +extern void fixup_subnet_mask(int netnum); /* in ipnet.c */ + +unshort rand_seed; /* pseudo-random number */ + +struct autoIP autoIPs[MAXNETS]; + +/* FUNCTION: AutoIp_init() + * + * Initialize the sub modules + * + * PARAM1: void + * + * RETURNS: 0 + */ + +int +AutoIp_init() +{ + int iface; + void * stack_garbage = &iface; /* sort of random... */ + + /* look for an ethernet to seed the random numbers */ + for(iface = 0; iface < MAXNETS; iface++) + { + if(nets[iface] == NULL) + break; + + if(nets[iface]->n_mib->ifType == ETHERNET) + { + autoIPs[iface].state = AUTOIP_START; + autoIPs[iface].response_timer = 0; + autoIPs[iface].arp_attempts = 0; + + /* seed with unique part of mac address */ + if(!rand_seed) + { + rand_seed = (unshort)(nets[iface]->mib.ifPhysAddress[3] + + (nets[iface]->mib.ifPhysAddress[4] << 4) + + (nets[iface]->mib.ifPhysAddress[5] << 8)); + } + } + else + upnp[iface].state = UPNP_DISABLED; /* Disable Non-ethernets */ + } + /* XOR the random numbers from whatever garbage is on the stack. + * This may generate a compiler warning, but it's doing the right thing. + */ + rand_seed ^= (unshort)(u_long)(stack_garbage); + + return 0; +} + +#ifndef HAL_TIMER_ALREADY +u_long HAL_TIMER_get_ms_tick() +{ + return (cticks * (1000/TPS)); +} +#endif + +/* FUNCTION: AutoIp_tick() + * + * Called from Upnp_tick() every 100ms to run finite state machine + * + * PARAM1: void + * + * RETURNS: void + */ + +void +AutoIp_tick(int iface) +{ + switch (autoIPs[iface].state) + { + case AUTOIP_START: + autoIPs[iface].state = AUTOIP_ARP_PROBE; + break; + + case AUTOIP_ARP_PROBE: + + autoIPs[iface].try_address = AutoIp_pick_address(); + AutoIp_send_arp_probe(iface); + autoIPs[iface].arp_attempts++; + autoIPs[iface].response_timer = HAL_TIMER_get_ms_tick() + dRESPONSE_TIMEOUT; + autoIPs[iface].state = AUTOIP_ARP_RESPONSE_WAIT; + break; + + case AUTOIP_ARP_RESPONSE_WAIT: + + if (HAL_TIMER_get_ms_tick() > autoIPs[iface].response_timer) + { + /* No arp response within the time so */ + /* we will verify the address */ + autoIPs[iface].state = AUTOIP_ARP_VERIFY_PROBE; + autoIPs[iface].verify_attempts = 0; + } + break; + + case AUTOIP_ARP_ADDRESS_USED: + + if (autoIPs[iface].arp_attempts < 10) + { + /* try again */ + autoIPs[iface].state = AUTOIP_ARP_PROBE; + } + else + { + autoIPs[iface].state = AUTOIP_FAILED; + } + break; + + /* The address appears to be free, */ + /* verify still not used */ + case AUTOIP_ARP_VERIFY_PROBE: + + AutoIp_send_arp_probe(iface); + autoIPs[iface].verify_attempts++; + autoIPs[iface].response_timer = HAL_TIMER_get_ms_tick() + dVERIFY_WAIT_TIME; + autoIPs[iface].state = AUTOIP_ARP_VERIFY_WAIT; + break; + + case AUTOIP_ARP_VERIFY_WAIT: + + if (HAL_TIMER_get_ms_tick() > autoIPs[iface].response_timer) + { + /* If we have verified to our satisfaction */ + /* take the address */ + if (autoIPs[iface].verify_attempts >= dNUMBER_OF_VERIFIES) + { + autoIPs[iface].state = AUTOIP_GOT_ADDRESS; + /* Lets use this address */ + AutoIp_set_net_vars(iface); + } + else + { + /* verify again */ + autoIPs[iface].state = AUTOIP_ARP_VERIFY_PROBE; + } + } + break; + + case AUTOIP_FAILED: + break; + + default: + break; + } +} + + + +/* FUNCTION: AutoIp_arp_response() + * + * If an ARP Probe gets a response, the TCP/IP Stack upcalls this function. + * We will have to try another address. + * + * PARAM1: PACKET pkt + * + * RETURNS: void + */ + +void +AutoIp_arp_response(struct arp_hdr * arphdr, NET ifp) +{ + int iface; + + iface = if_netnumber(ifp); + + /* Check that we are in a mode that cares about all this */ + if (autoIPs[iface].state == AUTOIP_ARP_RESPONSE_WAIT) + { + /* Check for someone else probing this as a target address, IE their + * target (probed) address is that same as the one we are trying + */ + if (arphdr->ar_tpa == autoIPs[iface].try_address) + { + autoIPs[iface].state = AUTOIP_ARP_ADDRESS_USED; + return; + } + + /* Also check for a response from the probed address. + * This means some already has the address. + */ + if (arphdr->ar_spa == autoIPs[iface].try_address) + { + autoIPs[iface].state = AUTOIP_ARP_ADDRESS_USED; + return; + } + } +} + + + +/* FUNCTION: AutoIp_send_arp_probe() + * + * PARAM1: interface index + * + * RETURNS: void + */ + +void +AutoIp_send_arp_probe(int iface) +{ + PACKET pkt; + + LOCK_NET_RESOURCE(FREEQ_RESID); + pkt = pk_alloc(4); /* dummy packet */ + UNLOCK_NET_RESOURCE(FREEQ_RESID); + + if (pkt == NULL) + return; + + nets[iface]->n_ipaddr = 0; /* our IP address needs to be 0 */ + pkt->net = nets[iface]; + pkt->fhost = autoIPs[iface].try_address; + send_arp(pkt, autoIPs[iface].try_address); +} + + + +/* FUNCTION: AutoIp_pick_address() + * + * Pick a random auto IP address. Returns the address in network + * endian (big), which is how the IP, ARP & DHCP modules expect them. + * + * PARAM1: void + * + * RETURNS: random IP address + */ + +ip_addr +AutoIp_pick_address(void) +{ + unshort newrand = rand_seed--; /* bump this down since cticks goes up */ + + newrand ^= (unshort)(cticks + 1); + while(newrand > dAUTO_IP_RANGE) + newrand >>= 1; + return(htonl(dBASE_AUTO_IP_ADDRESS + newrand)); +} + + +/* FUNCTION: AutoIp_get_state() + * + * PARAM1: void + * + * RETURNS: + */ + +int +AutoIp_get_state(int iface) +{ + return(autoIPs[iface].state); +} + + +/* FUNCTION: AutoIp_set_net_vars() + * + * PARAM1: int iface + * + * RETURNS: + */ + +void +AutoIp_set_net_vars(int iface) +{ + nets[iface]->n_ipaddr = autoIPs[iface].try_address; + nets[iface]->snmask = htonl(0xFFFF0000); + nets[iface]->n_defgw = 0x00000000; + + if ( nets[iface]->snmask == 0 ) + { + fixup_subnet_mask(iface); + dhc_states[iface].snmask = nets[iface]->snmask; + } + + /* fixup broadcast addresses */ + nets[iface]->n_netbr = nets[iface]->n_ipaddr | ~nets[iface]->snmask; + nets[iface]->n_netbr42 = nets[iface]->n_ipaddr & nets[iface]->snmask; + nets[iface]->n_subnetbr = nets[iface]->n_ipaddr | ~nets[iface]->snmask; + + /* print IP address acquired through AutoIP - for user's benefit */ + printf("Acquired IP address via AutoIPv4 for interface: %s\n", nets[iface]->name); + printf("IP address : %s\n", print_ipad(nets[iface]->n_ipaddr)); + printf("Subnet Mask: %s\n", print_ipad(nets[iface]->snmask)); + printf("Gateway : %s\n", print_ipad(nets[iface]->n_defgw)); +} + + + +/* FUNCTION: dhc_hostname() + * + * Called from the DHCP client to get a valid hostname for this machine. This + * is a default routine which returns a dummy name. The porting engineer is + * expected to define GETHOSTNAME_ALREADY and replace this with a system + * routine. + * + * Note - if MUST always return a string. + * + * PARAM1: none + * + * RETURNS: pointer to ascii hostname string + */ + +#ifndef DHCHOSTNAME_ALREADY + +/* globally overridable hostname */ +char * system_dhcp_hostname = "dummy"; + +u_char * +dhc_hostname() +{ + char * hostname; + +#ifdef ALWAYS_HAVE_NAME + hostname = get_device_name(); + if(strcmp(hostname,"") == 0) + { + hostname = get_device_always_name(); + } +#else + hostname = system_dhcp_hostname; +#endif + + return (u_char*)hostname; +} + +#endif /* DHCHOSTNAME_ALREADY */ + +#endif /* USE_AUTOIP */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/autoip.h b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/autoip.h new file mode 100644 index 0000000..8826fc2 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/autoip.h @@ -0,0 +1,58 @@ +/* AutoIP.h + + AutoIP, determines IP address by ARPing a trial address + and waiting for responses. + + 9/15/2000 - Created - Stan Breitlow + +*/ + +#ifndef AUTOIP_H +#define AUTOIP_H + +typedef enum +{ + AUTOIP_START, + AUTOIP_GOT_ADDRESS, + AUTOIP_ARP_PROBE, + AUTOIP_ARP_RESPONSE_WAIT, + AUTOIP_ARP_ADDRESS_USED, + AUTOIP_ARP_VERIFY_WAIT, + AUTOIP_ARP_VERIFY_PROBE, + AUTOIP_FAILED +} eAUTO_IP_STATE; + +/* "methods", or vairous modes of operation for the AutoIP code */ + +typedef enum +{ + eIP_METHOD_DHCP_AUTO_FIXED, /* Try DHCP then AuoIP */ + eIP_METHOD_DHCP_FIXED, /* Try DHCP */ + eIP_METHOD_AUTO_FIXED, /* Try AutoIP */ + eIP_METHOD_FIXED /* Used fixed (NV) address */ +} eIP_METHOD; + + +extern u_long dBASE_AUTO_IP_ADDRESS; /* base of auto-address pool */ +extern u_long dMAX_AUTO_IP_ADDRESS; +#define dAUTO_IP_RANGE (dMAX_AUTO_IP_ADDRESS - dBASE_AUTO_IP_ADDRESS) + +struct autoIP +{ + eAUTO_IP_STATE state; + u_long response_timer; + ip_addr try_address; + unshort arp_attempts; + unshort verify_attempts; +}; + +extern struct autoIP autoIPs[MAXNETS]; + +int AutoIp_init(void); +void AutoIp_tick(int iface); +int AutoIp_get_state(int iface); +void AutoIp_send_arp_probe(int iface); + +#endif /* AUTOIP_H */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/ds_app.h b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/ds_app.h new file mode 100644 index 0000000..35f73dc --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/ds_app.h @@ -0,0 +1,75 @@ +/* + * FILENAME: ds_app.h + * + * Copyright 2002 By InterNiche Technologies Inc. All rights reserved + * + * Definitions for sample AutoIP database. + * +*/ + +#ifndef _DS_APP_H_ +#define _DS_APP_H_ 1 + +/* If application programmer (user) has defined his own database then + * include his files inside the file "user_ds.h"; otherwise support + * our simple default system. + */ +#ifdef USER_DS_SUPPORT +#include "user_ds.h" +#else /* use simple local system */ + + +/* AutoIP database - one for each iface entry. */ + +struct ds_struct +{ + /* tag_IP_ADDRESS_MODE is one of the eIP_METHOD enums. + * If you don't want to use the default (auto IP), then + * set this value to some other enum prior to calling + * Upnp_init() + */ + unshort tag_IP_ADDRESS_MODE; + + /* the rest of these are set during the autoIP process. */ + u_char tag_POLLING_ENABLED; /* boolean */ + u_long tag_NET_FIXED_IP; + u_long tag_NET_FIXED_SUBNET; + u_long tag_NET_FIXED_GATEWAY; + u_long tag_NET_IP_ADDRESS; + u_long tag_NET_SUBNET; + u_long tag_NET_GATEWAY; + char tag_IP_ADDRESS_STRING[50]; +}; + +/* The database: */ +extern struct ds_struct ds_structs[MAXNETS]; + + +/* Access macros */ + +/* get routines set a value form the database. If the database + * entry is zero then the value is enchanged + */ + +#define DS_get_word(tag, iface, data) \ + { *(unshort*)(data) = (unshort)ds_structs[iface].tag; } + +#define DS_get_long(tag, iface, data) \ + { *(u_long*)(data) = ds_structs[iface].tag; } + + +/* Set routines set a value in the database */ + +#define DS_set_long(tag, iface, data) \ + ds_structs[iface].tag = data; + +#define DS_set_byte(tag, iface, data) \ + ds_structs[iface].tag = data; + +#define DS_set_string(tag, iface, data) \ + { strncpy(ds_structs[iface].tag, data, sizeof(ds_structs[iface].tag));} + +#endif /* USER_DS_SUPPORT */ +#endif /* _DS_APP_H_ */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnp.c b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnp.c new file mode 100644 index 0000000..3dcd7f4 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnp.c @@ -0,0 +1,651 @@ +/* + * FILENAME: upnp.c + * + * Copyright 2002 By InterNiche Technologies Inc. All rights reserved + * + * Universal plug and play + * + * This file has all the top level UPnP managment routines. + * It uses: + * - DHCP client for Addressing + * - AutoIP for Addressing + * - SSDP for discovery + * + * 9/15/2000 - Created - Stan Breitlow + * + * MODULE: AUTOIP4 + * + * ROUTINES: Upnp_init(), upnp_recv_dhcp_status(), upnp_tick(), + * ROUTINES: Play (), Upnp_tick(), upnp_set_fixed_net_vars(), + * ROUTINES: Upnp_GetDnsOptionsFromDhcpOptions(), + * ROUTINES: upnp_add_net_vars_to_database(), + * + * PORTABLE: yes + */ + + + +#include "ipport.h" + +#ifdef USE_UPNP + +#include "q.h" +#include "netbuf.h" +#include "net.h" +#include "ip.h" +#include "dhcpclnt.h" +#include "dns.h" +#include "dhcpclnt.h" +#include "intimers.h" + +#include "autoip.h" +#include "upnp.h" +#include "ds_app.h" + + +#ifndef USE_AUTOIP +#error USE_AUTOIP must be defined with USE_UPNP +#endif + +#ifdef INCLUDE_NVPARMS +#include "nvparms.h" /* For nvparms struct */ +#endif /* INCLUDE_NVPARMS */ + + +/* local objects */ + +struct tUPNP upnp[MAXNETS]; +long upnp_timer; +int DHCP_WAIT_TIME = 300; /* 30 seconds default */ + +#ifndef USER_DS_SUPPORT +struct ds_struct ds_structs[MAXNETS]; /* database */ +#endif + +/* local protos */ + +int upnp_recv_dhcp_status(int iface, int state); +static void upnp_set_fixed_net_vars(int iface); +static void upnp_add_net_vars_to_database(int iface); +static void Upnp_GetDnsOptionsFromDhcpOptions(void); +static void upnp_add_Fixed_vars_to_database(int iface); + +extern void fixup_subnet_mask(int); + +#ifdef IN_MENUS +#include "menu.h" +extern struct menu_op upnpmenu[5]; +#endif /* IN_MENUS */ + +/* default method of getting IP address */ +eIP_METHOD addressing_method = eIP_METHOD_DHCP_AUTO_FIXED; + + +/* FUNCTION: Upnp_init() + * + * Initialize the sub modules + * + * PARAM1: void + * + * RETURNS: + */ + +int Upnp_init(void) +{ + int i; + int e; + struct tUPNP * up; + + e = AutoIp_init(); + if (e) + { + dtrap(); + } + + for (i = 0; i < MAXNETS; i++) + { + up = &upnp[i]; + + /* Disable Auto-IP on unset nets. If a dynamic interface wants this later, + * the creator will have to explicitly enable it. + */ + if(nets[i] == NULL) + { + up->state = UPNP_DISABLED; + continue; + } + + /* Only do this on ethernets */ + if(nets[i]->n_mib->ifType != ETHERNET) + continue; + + /* nets[] should already have info set from NV parms system or + * by other means. Save this info to the "UPnP database items now. + */ + upnp_add_Fixed_vars_to_database(i); /* set fixed info */ + upnp_add_net_vars_to_database(i); /* set tmp info */ + +#ifdef INCLUDE_NVPARMS + /* Skip interfaces which are not flagged to be DHCP clients */ + if (inet_nvparms.ifs[i].client_dhcp) /* is DHCP Client enabled ? */ + nets[i]->n_flags |= NF_AUTOIP; /* yes, then use AUTOIP too */ +#endif /* INCLUDE_NVPARMS */ + + if (!(nets[i]->n_flags & NF_AUTOIP)) + { + up->state = UPNP_DISABLED; + continue; + } + + up->state = UPNP_START; + up->idle_timer = 0 ; + up->notify_delay = 0; + up->notify_count = 0; + up->got_dhcp_address = FALSE; + + dhc_set_callback(i, upnp_recv_dhcp_status ); + + /* Check parameter database for IP setting */ + DS_get_word(tag_IP_ADDRESS_MODE, i, &addressing_method); + up->ip_method = addressing_method; + } + +#ifdef IN_MENUS + install_menu(&upnpmenu[0]); + install_version("autoip3.1"); +#endif /* IN_MENUS */ + +#ifdef USER_SMTP_ALERTS + /* If "user smtp" service is supported, do the init now. */ + UserSmtp_init(); +#endif + + /* start the AutoIP interval timer */ + upnp_timer = in_timerset(Upnp_tick, 100, 0L ); + if(upnp_timer == 0) + return -1; + + return 0; +} + + + +/* FUNCTION: upnp_recv_dhcp_status() + * + * Callback that receives status changes from the dhcp client. + * + * PARAM1: int iface + * PARAM2: int state + * + * RETURNS: + */ + +int upnp_recv_dhcp_status(int iface, int state) +{ + struct tUPNP * up; + + up = &upnp[iface]; + + switch (state) + { + case DHCS_UNUSED: /* no discovery attempted */ + case DHCS_INIT: /* Ready to send a DISCOVER packet */ + case DHCS_INITREBOOT: /* Have IP, ready to send REQUEST(skip DISCOVER) */ + case DHCS_REBOOTING: /* rebooting/reclaiming address */ + case DHCS_SELECTING: /* discovery sent, but no offer yet */ + case DHCS_REQUESTING: /* sent request; waiting for ACK|NAK */ + case DHCS_RENEWING: /* Renewing the lease */ + case DHCS_REBINDING: /* rebinding to new server */ + case DHCS_RESTARTING: + break; + + /* got a ACK we liked */ + case DHCS_BOUND: + up->got_dhcp_address = TRUE; + dhc_main_ipset(iface, state); + break; + } + + return(0); +} + + +/* FUNCTION: upnp_tick() + * + * Called every 100ms to run finite state machine. + * Manages the Address and Discover phases of AutoIP + * + * PARAM1: void + * + * RETURNS: void + */ + +u_long last_upnptick; + +void +Upnp_tick(long dummy) +{ + int iface; + struct tUPNP * up; + int timerlag; + + /* if we missed a long interval, derive a value to update the timer */ + if((cticks - last_upnptick) > (TPS/10)) + { + /* approx. number of 100ms intervals we missed. The "|10" + * on TPS is to prevent a divide by zero if TPS < 10 . + */ + timerlag = (cticks - last_upnptick)/((TPS|10)/10); + } + else + timerlag = 0; + + last_upnptick = cticks; + + for(iface = 0; iface < MAXNETS; iface++) + { + /* first blank net means we're done with loop */ + if(nets[iface] == NULL) + return; + + up = &upnp[iface]; + + if(!up) /* iface is not doing Auot IP, skip it. */ + continue; + + /* update timers if we had a long break */ + if(timerlag) + up->idle_timer += timerlag; + + switch (up->state) + { + + /*-------------------------------------------------------- */ + /* Let things settle before starting */ + /*-------------------------------------------------------- */ + + case UPNP_START: + + up->state = UPNP_INIT; + break; + + /*-------------------------------------------------------- */ + /* Determine where to start the sequence. */ + /* If the device is configured to use only fixed IP */ + /* we will skip dhcp and AutoIP */ + /*-------------------------------------------------------- */ + + case UPNP_INIT: + + /* Use configured IP addressing method */ + switch (up->ip_method) + { + default: + case eIP_METHOD_DHCP_AUTO_FIXED: + case eIP_METHOD_DHCP_FIXED: + + up->state = UPNP_DHCP_SEEK; + break; + + case eIP_METHOD_AUTO_FIXED: + + up->state = UPNP_AUTO_IP; + /* turn off dhcp, otherwise it will reset */ + dhc_halt(iface); + break; + + case eIP_METHOD_FIXED: + + up->state = UPNP_FIXED_IP; + /* turn off dhcp, otherwise it will reset */ + dhc_halt(iface); + break; + } + up->idle_timer = 0; + break; + + /*-------------------------------------------------------- */ + /* We are waiting for the dhcp server to give us an address. */ + /* We only wait so long before timing out. */ + /*-------------------------------------------------------- */ + + case UPNP_DHCP_SEEK: + + if (up->got_dhcp_address) + { + up->state = UPNP_GOT_DHCP_ADDRESS; + break; + } + + /* If dhcp dos not resolve after a while */ + /* try auto IP if it is allowed by the configuration */ + up->idle_timer++; + if (up->idle_timer >= (unsigned)DHCP_WAIT_TIME) + { + /* What is the next phase */ + if (up->ip_method == eIP_METHOD_DHCP_AUTO_FIXED) + up->state = UPNP_AUTO_IP; + else + up->state = UPNP_FIXED_IP; + /* turn off dhcp, otherwise it will reset */ + dhc_halt(iface); + } + break; + + /*-------------------------------------------------------- */ + /* We go to this state if the dhcp client gets an address */ + /* Set the active IP address to the found address */ + /*-------------------------------------------------------- */ + + case UPNP_GOT_DHCP_ADDRESS: + + /* put info in the database */ + upnp_add_net_vars_to_database(iface); + /* Start the discovery phase */ + /* up->state = UPNP_SSDP_NOTIFY; */ + Upnp_GetDnsOptionsFromDhcpOptions(); + up->state = UPNP_STARTUP_FINISHED; + break; + + /*-------------------------------------------------------- */ + /* If we did not get an address from a dhcp server */ + /* We will try to get an IP address via AutoIP, */ + /* this involve ARP probing. */ + /*-------------------------------------------------------- */ + + case UPNP_AUTO_IP: + + AutoIp_tick(iface); + switch (AutoIp_get_state(iface)) + { + case AUTOIP_GOT_ADDRESS: /* put info in the database */ + upnp_add_net_vars_to_database(iface); + /*up->state = UPNP_SSDP_NOTIFY; */ + up->state = UPNP_STARTUP_FINISHED; + break; + case AUTOIP_FAILED: + up->state = UPNP_FIXED_IP; + break; + default: + break; + } + break; + + /*-------------------------------------------------------- */ + /* Use a hardcoded IP address */ + /*-------------------------------------------------------- */ + + case UPNP_FIXED_IP: + /* Get the fix IP info back from the database */ + upnp_set_fixed_net_vars(iface); + + /* If the fixed IP address is zero, take down the iface (for now) */ + nets[iface]->n_mib->ifOperStatus = NI_DOWN; + + /* put info in the database */ + upnp_add_net_vars_to_database(iface); + DS_set_byte(tag_POLLING_ENABLED, iface, 1); + +#ifdef USER_SMTP_ALERTS + /* If "user smtp" service is supported, do the init now. */ + UserSmtp_LookupStart(); +#endif + switch (up->ip_method) + { + case eIP_METHOD_DHCP_AUTO_FIXED: + case eIP_METHOD_DHCP_FIXED: + default: + up->state = UPNP_IDLE; + break; + + /* This one will not look for a DHCP in the future */ + case eIP_METHOD_FIXED: + up->state = UPNP_IDLE_FIXED; + break; + } + break; + + /*-------------------------------------------------------- */ + /* Tell the network about ourselves. */ + /* Do this several times 1 second apart. */ + /* This is recommended by the UPNP spec */ + /*-------------------------------------------------------- */ + + case UPNP_SSDP_NOTIFY: + + /* not using ssdp currently */ + up->state = UPNP_STARTUP_FINISHED; + + /*ssdp_notify(iface); */ + up->notify_delay = 0; + up->state = UPNP_SSDP_WAIT; + break; + + /*-------------------------------------------------------- */ + /* Wait after advertising */ + /*-------------------------------------------------------- */ + + case UPNP_SSDP_WAIT: + + if (++up->notify_delay > SSDP_NOTIFY_DELAY) + { + if (++up->notify_count > SSDP_NOTIFY_COUNT) + up->state = UPNP_SSDP_DISCOVER; + else + up->state = UPNP_SSDP_NOTIFY; + } + break; + + /*-------------------------------------------------------- */ + /* Look for the other devices we need */ + /*-------------------------------------------------------- */ + + case UPNP_SSDP_DISCOVER: + + /* skip anything here for now */ + up->state = UPNP_STARTUP_FINISHED; + break; + + /*-------------------------------------------------------- */ + /* The startup phase is complete */ + /* Let the system know it can "do its thing" */ + /*-------------------------------------------------------- */ + + case UPNP_STARTUP_FINISHED: + + DS_set_byte(tag_POLLING_ENABLED, iface, 1); + up->state = UPNP_IDLE; + up->idle_timer = 0; +#ifdef USER_SMTP_ALERTS + UserSmtp_LookupStart(); +#endif + break; + + /*-------------------------------------------------------- */ + /* Spin here until its time to do monitoring and checkup stuff */ + /*-------------------------------------------------------- */ + + case UPNP_IDLE: + + up->idle_timer++; + if (up->idle_timer >= CHECKUP_TIME) + { + /* don't recheck if we have a dhcp address already */ + if (up->got_dhcp_address == FALSE) + { + up->state = UPNP_DHCP_CHECKUP; + } + /* Mark net as up so we can try again */ + nets[iface]->n_mib->ifOperStatus = NI_UP; + up->idle_timer = 0; + } + break; + + /*-------------------------------------------------------- */ + /* Here we stay as fixed IP */ + /*-------------------------------------------------------- */ + + case UPNP_IDLE_FIXED: + break; + + /*-------------------------------------------------------- */ + /* Check for a dhcp that might have come on-line */ + /*-------------------------------------------------------- */ + + case UPNP_DHCP_CHECKUP: + + /* start dhcp again */ + dhc_state_init(iface, TRUE); + dhc_set_callback(iface, upnp_recv_dhcp_status ); + up->state = UPNP_DHCP_RESEEK; + up->idle_timer = 0; + break; + + /*-------------------------------------------------------- */ + /* We are in AutoIP mode or DHCP Failed->Fixed mode */ + /* let's looking for a dhcp server again */ + /*-------------------------------------------------------- */ + + case UPNP_DHCP_RESEEK: + + if (up->got_dhcp_address) + { + up->state = UPNP_GOT_DHCP_ADDRESS; + break; + } + + /* If dhcp dos not resolve after a while return to idle */ + up->idle_timer++; + if (up->idle_timer >= (unsigned)DHCP_WAIT_TIME) + { + /* Nothing found, back to idle */ + up->state = UPNP_IDLE; + /* turn off dhcp, otherwise it will reset */ + dhc_halt(iface); + } + break; + + case UPNP_DISABLED: + break; + + default: + dtrap(); + break; + } /* switch */ + } /* for */ + +#ifdef USER_SMTP_ALERTS + UserSmtp_Tick(); +#endif + + USE_ARG(dummy); +} + + + +/* FUNCTION: upnp_set_fixed_net_vars() + * + * PARAM1: int iface + * + * RETURNS: + */ + +static void +upnp_set_fixed_net_vars(int iface) +{ + NET ifp; + + ifp = nets[iface]; + + /* Get the fixed IP address info out of database */ + DS_get_long(tag_NET_FIXED_IP, iface, &ifp->n_ipaddr); + DS_get_long(tag_NET_FIXED_SUBNET, iface, &ifp->snmask); + DS_get_long(tag_NET_FIXED_GATEWAY, iface, &ifp->n_defgw); + + if ( ifp->snmask == 0 ) + { + fixup_subnet_mask(iface); + dhc_states[iface].snmask = ifp->snmask; + } + + /* fixup broadcast addresses */ + ifp->n_netbr = ifp->n_ipaddr | ~ifp->snmask; + ifp->n_netbr42 = ifp->n_ipaddr & ifp->snmask; + ifp->n_subnetbr = ifp->n_ipaddr | ~ifp->snmask; + +} + + +/* FUNCTION: Upnp_GetDnsOptionsFromDhcpOptions() + * + * PARAM1: void + * + * RETURNS: + */ + +void +Upnp_GetDnsOptionsFromDhcpOptions(void) +{ +#ifdef DNS_CLIENT + int i; + int iface; + + iface = 0; + i=0; + while ((i < DHC_MAXDNSRVS) && (i < MAXDNSSERVERS)) + { + dns_servers[i] = dhc_states[iface].dnsrv[i]; + i++; + } +#endif /* DNS_CLIENT */ +} + + +/* FUNCTION: upnp_add_net_vars_to_database() + * + * PARAM1: int iface + * + * RETURNS: + */ + +static void +upnp_add_net_vars_to_database(int iface) +{ + char buf[32]; + NET ifp; + + ifp = nets[iface]; + + /* Put this info in the database */ + DS_set_long(tag_NET_IP_ADDRESS, iface, ifp->n_ipaddr); + DS_set_long(tag_NET_SUBNET, iface, ifp->snmask); + DS_set_long(tag_NET_GATEWAY, iface, ifp->n_defgw); + + sprintf(buf,"%u.%u.%u.%u\0", PUSH_IPADDR(ifp->n_ipaddr)); + DS_set_string(tag_IP_ADDRESS_STRING, iface, buf); +} + + +/* FUNCTION: upnp_add_net_vars_to_database() + * + * PARAM1: int iface + * + * RETURNS: + */ + +static void +upnp_add_Fixed_vars_to_database(int iface) +{ + NET ifp; + + ifp = nets[iface]; + + /* Put this info in the database */ + DS_set_long(tag_NET_FIXED_IP, iface, ifp->n_ipaddr); + DS_set_long(tag_NET_FIXED_SUBNET, iface, ifp->snmask); + DS_set_long(tag_NET_FIXED_GATEWAY, iface, ifp->n_defgw); +} + +#endif /* USE_UPNP */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnp.h b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnp.h new file mode 100644 index 0000000..b13d063 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnp.h @@ -0,0 +1,61 @@ +/* UPNP.h + + Universal plug and play + + 9/15/2000 - Created - Stan Breitlow + +*/ + +#ifndef UPNP_H +#define UPNP_H + +/* How long to wait for a DHCP address */ +extern int DHCP_WAIT_TIME; + + +#define SSDP_NOTIFY_DELAY 10 /* 1 second */ +#define SSDP_NOTIFY_COUNT 3 /* 3 times */ +#define SECONDS_PER_MINUTE 60 +#define TICKS_PER_SECOND 10 +#define CHECKUP_TIME 5*SECONDS_PER_MINUTE*TICKS_PER_SECOND /* 5 minutes */ + +typedef enum +{ + UPNP_START, + UPNP_INIT, + UPNP_DHCP_SEEK, + UPNP_GOT_DHCP_ADDRESS, + UPNP_AUTO_IP, + UPNP_FIXED_IP, + UPNP_SSDP_NOTIFY, + UPNP_SSDP_WAIT, + UPNP_SSDP_DISCOVER, + UPNP_STARTUP_FINISHED, + UPNP_IDLE, + UPNP_IDLE_FIXED, + UPNP_DHCP_CHECKUP, + UPNP_DHCP_RESEEK, + UPNP_DISABLED +} eUPNP_STATE; + + +struct tUPNP +{ + eUPNP_STATE state; + eIP_METHOD ip_method; + int got_dhcp_address; /* boolean */ + u_long idle_timer; + u_long notify_delay; + u_long notify_count; + int local_iface; +}; + +extern struct tUPNP upnp[MAXNETS]; + + +int Upnp_init(void); +void Upnp_tick(long); + +#endif /* UPNP_H */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnpmenu.c b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnpmenu.c new file mode 100644 index 0000000..4f023e6 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/autoip4/upnpmenu.c @@ -0,0 +1,266 @@ +/* + * FILENAME: upnpmenu.c + * + * Copyright 2002 By InterNiche Technologies Inc. All rights reserved + * + * Universal plug and play menu stats & control user interface + * + * ROUTINES: upnp_stats(), upnp_disable(), upnp_restart(), + * ROUTINES: upnp_base(), + * + * + * MODULE: AUTOIP4 + * + * ROUTINES: + * + * PORTABLE: yes + */ + + + +#include "ipport.h" + +#ifdef USE_UPNP +#ifdef IN_MENUS + +#include "q.h" +#include "netbuf.h" +#include "net.h" +#include "menu.h" + +#include "autoip.h" +#include "upnp.h" +#include "ds_app.h" + +/* routine in ..\ip to get NET pointer from console text */ +extern NET if_netbytext(void * pio, char * cp); + +/* UPnP menu routines */ +int upnp_stats(void * pio); +int upnp_disable(void * pio); +int upnp_restart(void * pio); +int upnp_base(void * pio); +int upnp_db(void * pio); + +char * upnp_states[] = /* match eUPNP_STATE enums to text */ +{ + "START", + "INIT", + "DHCP_SEEK", + "GOT_DHCP_ADDRESS", + "AUTO_IP", + "FIXED_IP", + "SSDP_NOTIFY", + "SSDP_WAIT", + "SSDP_DISCOVER", + "STARTUP_FINISHED", + "IDLE", + "IDLE_FIXED", + "DHCP_CHECKUP", + "DHCP_RESEEK", + "DISABLED", +}; + + +struct menu_op upnpmenu[] = +{ + "upnp", stooges, "Upnp menu", + "upstats", upnp_stats, "status of UPnP Interfaces", + "updisable", upnp_disable, "disable UPnP on an interface", + "uprestart", upnp_restart, "restart UPnP process on interface", + "upbase", upnp_base, "Set new base for UPnP address pool", + "updbase", upnp_db, "Dump UPnP database for interface", + NULL, +}; + + + +/* FUNCTION: upnp_stats() + * + * Basic status dump menu routine + * + * PARAM1: void * pio + * + * RETURNS: 0 if OK, Else ENP_ error code + */ + +int +upnp_stats(void * pio) +{ + int i; + + ns_printf(pio, "UPnP stats:\n"); + + for(i = 0; i < MAXNETS; i++) + { + if(nets[i] == NULL) + break; + ns_printf(pio, "iface %s; state:%s; current IP:%u.%u.%u.%u\n", + nets[i]->name, upnp_states[upnp[i].state], + PUSH_IPADDR(nets[i]->n_ipaddr)); + } + + return 0; +} + + +/* FUNCTION: upnp_disable() + * + * Menu routine to disable UPnP on a specified interface + * + * PARAM1: void * pio + * + * RETURNS: 0 if OK, Else ENP_ error code + */ + +int +upnp_disable(void * pio) +{ + char * cp; + NET ifp; + int iface; + + cp = nextarg( ((GEN_IO)pio)->inbuf ); + if(!*cp) + { + ns_printf(pio, "please enter iface to disable UPnP\n"); + return -1; + } + ifp = if_netbytext(pio, cp); + if(ifp == NULL) /* error parsing iface name/number text? */ + return -1; + iface = if_netnumber(ifp); + upnp[iface].state = UPNP_DISABLED; + ns_printf(pio, "Disabled UPnP in iface %s\n", ifp->name); + return 0; +} + + +/* FUNCTION: upnp_restart() + * + * Menu routine to restart the Auto-Ip process on the specified interface + * + * PARAM1: void * pio + * + * RETURNS: 0 if OK, Else ENP_ error code + */ + +int +upnp_restart(void * pio) +{ + char * cp; + NET ifp; + int iface; + + cp = nextarg( ((GEN_IO)pio)->inbuf ); + if(!*cp) + { + ns_printf(pio, "please enter iface to restart UPnP\n"); + return -1; + } + ifp = if_netbytext(pio, cp); + if(ifp == NULL) /* error parsing iface name/number text? */ + return -1; + iface = if_netnumber(ifp); + + /* skip the DHCP step and go right to autoIP */ + upnp[iface].state = UPNP_START; + upnp[iface].ip_method = eIP_METHOD_AUTO_FIXED; + autoIPs[iface].state = AUTOIP_START; + autoIPs[iface].response_timer = 0; + autoIPs[iface].arp_attempts = 0; + + ns_printf(pio, "(re)started UPnP in iface %s\n", ifp->name); + return 0; +} + + +/* FUNCTION: upnp_base() + * + * Menu routine to change the address pool used by Auto IP + * + * PARAM1: void * pio + * + * RETURNS: 0 if OK, Else ENP_ error code + */ + +int +upnp_base(void * pio) +{ + char * cp; + u_long newbase; + u_long oldrange; + unsigned mask; + + cp = nextarg( ((GEN_IO)pio)->inbuf ); + if(!*cp) + { + ns_printf(pio, "please enter IP address for new base\n"); + return -1; + } + + cp = parse_ipad(&newbase, &mask, cp); + if(cp) + { + ns_printf(pio, "Bad IP address: %s\n", cp); + return -1; + } + + oldrange = dAUTO_IP_RANGE; + dBASE_AUTO_IP_ADDRESS = htonl(newbase); /* store in local endian */ + dMAX_AUTO_IP_ADDRESS = htonl(newbase + oldrange); + + ns_printf(pio, "Changed base of Auto-IP address pool to %u.%u.%u.%u\n", + PUSH_IPADDR(newbase) ); + + return 0; +} + +int +upnp_db(void * pio) +{ + char * cp; + NET ifp; + int iface; + ip_addr addr; + ip_addr mask; + ip_addr gateway; + + cp = nextarg( ((GEN_IO)pio)->inbuf ); + if(!*cp) + { + ns_printf(pio, "please enter iface for database dump\n"); + return -1; + } + ifp = if_netbytext(pio, cp); + if(ifp == NULL) /* error parsing iface name/number text? */ + return -1; + iface = if_netnumber(ifp); + + /* Get the fixed IP info from database into tmp vars */ + DS_get_long(tag_NET_FIXED_IP, iface, &addr); + DS_get_long(tag_NET_FIXED_SUBNET, iface, &mask); + DS_get_long(tag_NET_FIXED_GATEWAY, iface, &gateway); + + ns_printf(pio, "iface:%s; ", ifp->name); + ns_printf(pio, " Fixed IP: %u.%u.%u.%u", PUSH_IPADDR(addr) ); + ns_printf(pio, " mask: %u.%u.%u.%u", PUSH_IPADDR(mask) ); + ns_printf(pio, " gateway: %u.%u.%u.%u\n", PUSH_IPADDR(gateway) ); + + /* Get the current IP info from database into tmp vars */ + DS_get_long(tag_NET_IP_ADDRESS, iface, &addr); + DS_get_long(tag_NET_SUBNET, iface, &mask); + DS_get_long(tag_NET_GATEWAY, iface, &gateway); + + ns_printf(pio, "Current ip: %u.%u.%u.%u", PUSH_IPADDR(addr)); + ns_printf(pio, " mask: %u.%u.%u.%u", PUSH_IPADDR(mask)); + ns_printf(pio, " gateway: %u.%u.%u.%u\n", PUSH_IPADDR(gateway)); + + return 0; +} + + +#endif /* IN_MENUS */ +#endif /* USE_UPNP */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpclnt.c b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpclnt.c new file mode 100644 index 0000000..f94f956 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpclnt.c @@ -0,0 +1,2424 @@ +/* + * FILENAME: ftpclnt.c + * + * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTPCLIENT + * + * ROUTINES: fc_check(), fc_getreply(), fc_checklogin(), + * ROUTINES: fc_checkcmd(), fc_endxfer(), fc_clearf(), fc_sendmore(), + * ROUTINES: fc_getmore(), fc_dataconn(), fc_killsess(), fc_connect(), + * ROUTINES: fc_get(), fc_put(), fc_connopen(), fc_senduser(), fc_sendpass(), + * ROUTINES: fc_sendport(), fc_sendcmd(), fc_dir(), fc_pwd(), fc_chdir(), + * ROUTINES: fc_settype(), fc_quit(), fc_ready(), fc_usercmd(), + * ROUTINES: fc_hashmark(), fc_state(), fc_pasv(), + * + * PORTABLE: yes + */ + +/* ftpclnt.c Generic FTP client. This file contains the guts of the + * FTP client logic. There are several entry poins for user commands, + * include connect, send, and recv. These initiate a change in the + * connection's state machine which is should result in the + * performance of the desired task. These jobs are driven by periodic + * calls to fc_check, which can be made from a super loop, or a task + * which sleeps on ftp_clients == NULL. + * 1/12/97 - Created. John Bartas + */ + +#include "ftpport.h" /* TCP/IP, sockets, system info */ + +#ifdef FTP_CLIENT +#include "ftpsrv.h" +#include "ftpclnt.h" + +#ifdef IP_V6 +#include "socket6.h" +#endif /* IP_V6 */ + + +/* operating parmeters which may be overwritten by application code + * 1. If the FTP Client sends any FTP command, and it doesn't receive + * a reply for fc_replytmo seconds, then the FTP Client connection is + * closed. + * 2. If the FTP Client connection has remained idle ( no + * commands sent ) for fc_activity_tmo seconds, then the FTP Client + * connection is closed + */ +int fc_replytmo = 20; /* secs of inactivity for cmd timeout */ +int fc_connect_tmo = 300; /* secs of inactivity for connect timeout */ +int fc_activity_tmo = 1200; /* ftp client's inactivity timeout (secs) */ + +/* Starting port number for data transfers of ftp client */ +#define FTP_START_DATA_PORT 8000 /* Refered RFC1700 Assigned nums */ + +static unshort fc_next_port=FTP_START_DATA_PORT ; + +/* The FTP client's per-port message handler */ +extern void fc_printf(ftpc *, char *, ...); /* per-port response printer */ + +/* internal routines */ +int fc_connopen(ftpc * ftpconn); /* initiate command connection */ +int fc_getreply(ftpc * ftpconn, int * code); /* check for ftpconn reply */ +int fc_dataconn(ftpc * ftpconn); /* initiate data connection */ +int fc_checklogin(ftpc * ftpconn);/* see if user login is complete */ +int fc_checkcmd(ftpc * ftpconn); /* see if last cmd is complete */ +int fc_sendmore(ftpc * ftpconn); /* send more data on a STOR command */ +int fc_getmore(ftpc * ftpconn); /* send more data on a RETR command */ +int fc_senduser(ftpc * ftpconn); +int fc_sendpass(ftpc * ftpconn); +int fc_sendport(ftpc * ftpconn); +int fc_usercmd(ftpc * ftpconn, int cmdcode, char * cmdarg); +int fc_sendcmd(ftpc * ftpconn); +int fc_ready(ftpc * ftpconn); /* test session readiness for command */ +void fc_hashmark(ftpc * ftpconn, ulong before, unsigned added); +void fc_killsess(ftpc * ftpconn); /* clean up ftpconn resources */ +void fc_clearf(ftpc * ftpconn); /* reset ftpconn counters */ +void fc_endxfer(ftpc * ftpconn); /* end data xfer */ + +#ifdef FC_LOG +GEN_IO ftplog =NULL; /* By default log o/p would goto std output */ +int log_flag=FALSE; /* By default, logging is disabled */ +/* Text strings for logstate and cmdstate. Update this if any change + is done to the states */ +char * fc_str[]= { + "0", + "FCL_CONNECTING", /* 1 */ + "FCL_CONNECTED", /* 2 */ + "FCL_READY", /* 3 */ + "FCL_SENTUSER", /* 4 */ + "FCL_SENTPASS", /* 5 */ + "FCL_LOGGEDIN", /* 6 */ + "FCL_PENDING", /* 7 */ + "FCL_CLOSING", /* 8 */ + "9", + "FCC_RECVPORT", /* 10*/ + "FCC_RECVOK", /* 11*/ + "FCC_RECVCONN", /* 12*/ + "FCC_RECEIVING", /* 13*/ + "FCC_RECVDONE", /* 14*/ + "15", + "16", + "17", + "18", + "19", + "FCC_SENDPORT", /* 20*/ + "FCC_SENDOK", /* 21*/ + "FCC_SENDCONN", /* 22*/ + "FCC_SENDING", /* 23*/ + "FCC_SENDDONE", /* 24*/ + "25", + "26", + "27", + "28", + "29", + "FCC_NLSTPORT", /* 30*/ + "FCC_NLSTOK", /* 31*/ + "FCC_NLSTCONN", /* 32*/ + "FCC_NLSTING", /* 33*/ + "FCC_NLSTDONE", /* 34*/ + "35" +}; + +#define FC_CBLOG(fc) { \ + if (log_flag==TRUE) \ + log_printf(ftplog,"logstate=%s,cmdstate=%s\n",\ + fc_str[fc->logstate],fc_str[fc->cmdstate]); \ + } +#else /* FC_LOG */ +#define FC_CBLOG(fc) ; +#endif /* FC_LOG */ + +/* Define FC_CBACK if FC_USECALLBACK is enabled */ + +#ifdef FC_USECALLBACK +void (*fc_callback)(void * fc, int logstate, int cmdstate) = NULL ; +#define FC_CBACK(fc) {if(fc_callback) \ + (*fc_callback)((void *)fc,fc->logstate,fc->cmdstate);} +#else +#define FC_CBACK(fc) ; +#endif /* FC_USECALLBACK */ + +/* The user application can set a callback via fc_callback to receive + * information when the logstate or cmdstate changes This feature is + * available only when FC_USECALLBACK in enabled in ftpclnt.h If + * FC_LOG is enabled, then the change of state is also logged. If + * FC_USEBCALLBACK and FC_LOG are both disabled, FC_CALLBACK will + * evaluate to empty braces. + */ +#define FC_CALLBACK(fc) { \ + FC_CBACK(fc); \ + FC_CBLOG(fc); \ + } + +/* FC_SETLOGSTATE updates the logstate of ftpcon and calls + * FC_CALLBACK. Hence, if FC_CALLBACK(fc) is {}, it evaluates to a + * simple C assignment and there is no extra code. + */ +#define FC_SETLOGSTATE(fc,lstate) { fc->logstate=lstate; FC_CALLBACK(fc); } + +struct ftpc * ftp_clients = NULL ; /* support multiple client links */ + +struct queue ftpcq; /* contains messages from other tasks */ +unsigned char ftpc_msgsize [FTPC_NUM_MSGS] = {0x10, 0x0C, 0x0C, 0x0C, 0x00, 0x20, 0x0C, 0x10, 0x0C, 0x0C, 0x0C, 0x00, 0x08}; +struct ftpc_msg_stats ftpc_msg_stats; +struct ftpc_err ftpc_err; +extern struct ftpc * ftp_get_con(void * pio); + +#define FC_MENULOG() ; + + +/* FUNCTION: fc_check() + * + * fc_check() - poll ftp clients for work. This does not need to be + * called if(ftp_clients == NULL), else it should be called + * periodicly to move FTP transactions. + * + * PARAM1: void + * + * RETURNS: 0 if there are not more conenctions open, + * 1 if there are connections but no IO in progress, + * 2 if the is at least 1 file transfer going + */ + +int +fc_check(void) +{ + ftpc * ftpconn; + ftpc * ftpc_next; + int e; /* generic error holder */ + int retval = 0; + + /* loop through active client list */ + for (ftpconn = ftp_clients; ftpconn; ftpconn = ftpc_next) + { + ftpc_next = ftpconn->next; + if (ftpconn->in_use) /* make sure we're not being re-entered */ + continue; + ftpconn->in_use++; /* set re-entry flag */ + + e = 0; /* clear error before each connection */ + switch (ftpconn->logstate) + { + case FCL_CONNECTING: + case FCL_CONNECTED: + /* see if we timed out on non-blocking connect() */ + if ((ftpconn->last_cmd + ((unsigned long)fc_connect_tmo * TPS)) < ftp_ticks) + { + fc_printf(ftpconn, + "FTP Connection timed out on non-blocking connect.\n"); + e = -1; + } + else + { + e = fc_connopen(ftpconn); /* keep polling until state goes READY */ + } + break; + case FCL_SENTUSER: /* check for reply to USER or PASS cmd */ + case FCL_SENTPASS: + e = fc_checklogin(ftpconn); + if (ftpconn->logstate == FCL_LOGGEDIN) + fc_printf(ftpconn, "ftp user \"%s\" logged in.\n", ftpconn->username); + break; + case FCL_READY: /* connected & ready, but not doing login */ + if ((ftpconn->last_cmd + ((unsigned long)fc_activity_tmo*TPS)) < ftp_ticks) + { + fc_printf(ftpconn, + "FTP Connection timed out : No activity for %d secs\n", + fc_activity_tmo); + e=-1; + } + break; + case FCL_LOGGEDIN: /* nothing to do here */ + if ((ftpconn->last_cmd + ((unsigned long)fc_activity_tmo*TPS)) < ftp_ticks) + { + fc_printf(ftpconn, + "FTP Connection timed out : No activity for %d secs\n", + fc_activity_tmo); + e=-1; + } + break; + case FCL_PENDING: /* command in progress */ + e = fc_checkcmd(ftpconn); /* push command to next state */ + break; + case FCL_CLOSING: /* close FTP connection */ + e = -1; /* mark for deletion */ + break; + default: + e = -1; /* mark for deletion */ + break; + } + ftpconn->in_use--; /* clear re-entry flag */ + + if (ftpconn->logstate == FCL_PENDING) + retval = 2; /* At least 1 connection has transaction in progress */ + + /* delete any terminating connections */ + if (e) + { +#ifdef FC_LOG + if (log_flag == TRUE) + { + ftpconn->in_use++; /* set re-entry flag */ + log_printf(ftplog,"Closing FTP client connection.\n"); + ftpconn->in_use--; /* clear re-entry flag */ + } +#endif + ftpc_next = ftpconn->next; /* maintain pointer to next */ + fc_killsess(ftpconn); + } + } + if((retval == 0) && (ftp_clients)) + retval = 1; /* at least one connection open */ + return retval; +} + + + + +/* FUNCTION: fc_getreply() + * + * fc_getreply() - check for a reply to and outstanding command. + * Performs state machine actions if reply is ready. Does not handle + * timeouts. + * + * PARAM1: ftpc * ftpconn + * PARAM2: int * replycode + * + * RETURNS: Returns: 0 if we have full command, -1 if error, 1 if no + * reply yet. + */ + +int +fc_getreply(ftpc * ftpconn, int * replycode) +{ + int e; /* error holder */ + int current; /* cuurent cmd text length */ + char * beginLine; + char * endLine; + char * cp; + int rc = 1; + + current = strlen(ftpconn->cmdbuf); + e = t_recv(ftpconn->cmd_sock, ftpconn->cmdbuf + current, + CMDBUFSIZE - current, 0); + if (e < 0) /* read error ? */ + { + e = t_errno(ftpconn->cmd_sock); + if (e == EWOULDBLOCK) + { + /* If some reply info is left in buffer from a previous read, + * return code to this affect + */ + if(ftpconn->cmdbuf[0] == 0) + return 1; /* wait some more */ + } + else + { + fc_printf(ftpconn, "ftp client read error %d\n", e); + return -1; + } + } + else if (e == 0) /* socket closed by server */ + { + fc_printf(ftpconn, "ftp connection closed by server\n"); + return -1; + } + + /* add bytes read on last t_recv() to total bytes in buffer */ + current += e; + /* null terminate after length of buffer */ + ftpconn->cmdbuf[current] = 0; + beginLine = ftpconn->cmdbuf; + for (;;) + { + /* find CRLF at end of command buffer */ + endLine = strstr(beginLine, "\r\n"); + /* not a complete line yet so break and return no reply yet */ + if (!endLine) + break; + + /* scan reply code from decimal digits at beginning of line */ + cp = beginLine; + *replycode = 0; + while ((*cp >= '0') && (*cp <= '9')) + { + *replycode = (*replycode * 10) + *cp - '0'; + cp++; + } + + /* if the character following the digits is not a dash + * continuation character (see section 4.2 of RFC 959) and + * three digits were read + */ + if ((*cp != '-') && (cp == beginLine + 3)) + { + if (ftpconn->options & FCO_VERB) + fc_printf(ftpconn, "ftp reply: %s", ftpconn->cmdbuf); + if (*replycode == 421) + { + fc_printf(ftpconn, "ftp closing session per code 421\n"); + rc = -1; + } + else + rc = 0; /* command is ready */ + break; + } + /* we didn't see a complete reply so try starting at the + beginning of the next line */ + beginLine = endLine + 2; + } + return rc; +} + + + +/* FUNCTION: fc_checklogin() + * + * fc_checklogin() - Check for a reply to an outstanding USER or PASS + * command. Handle state changes if reply has arrived, do timeouts. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if OK (including no reply), if error returns -1. + */ + +int +fc_checklogin(ftpc * ftpconn) +{ + int e; + int replycode; + + e = fc_getreply(ftpconn, &replycode); + if (e == 1) /* reply not ready yet */ + { + /* see if we should time out waiting for reply */ + if ((ftpconn->last_cmd + ((unsigned long)fc_replytmo*TPS)) < ftp_ticks) + { + fc_printf(ftpconn, "ftp login timed out\n"); + return -1; + } + return 0; /* else wait some more */ + } + if (e != 0) /* fatal connection error? */ + return -1; + + + if ( replycode == 220 ) + { + /* remove all 220 commands from buffer */ + /* We have remove all lines starting with 220 from cmd buf */ + char * curpos, * nextpos; + + curpos=ftpconn->cmdbuf ; + while ( (nextpos= strstr(curpos, "\r\n")) != NULL ) + { + replycode = atoi(curpos); + if ( replycode == 220 ) /* keep searching */ + curpos=nextpos+2; + else + break; + } + /* if there were any 220 commands */ + if (curpos != ftpconn->cmdbuf) + { + int reply_220_len; /* length of 220 commands */ + int remainder_len; /* length of remainder of command buffer */ + + /* compute length of 220 commands and length of remainder of + command buffer */ + reply_220_len = curpos - ftpconn->cmdbuf; + remainder_len = sizeof(ftpconn->cmdbuf) - reply_220_len; + + /* move the remainder of the command buffer to the front */ + MEMMOVE(ftpconn->cmdbuf,curpos,remainder_len); + /* zero out the number of bytes removed at the tail end of buf */ + MEMSET(ftpconn->cmdbuf + remainder_len,0,reply_220_len); + } + } + + /* we have complete reply in ftpconn->cmdbuf */ + if (replycode > 399 || replycode < 200) + { + fc_printf(ftpconn, "User login failed, error.\n"); + FC_SETLOGSTATE(ftpconn,FCL_READY); /* not logged in */ + return -1; + } + + if (replycode < 230) /* ignore 220, 226, et.al. */ + { + return 0; + } + + /* code is now in range 230 - 399 */ + switch (ftpconn->logstate) + { + case FCL_SENTUSER: /* got reply to USER cmd */ + if (replycode >= 300 && replycode < 399) /* need password */ + { + e = fc_sendpass(ftpconn); /* send password */ + if (e) + return e; + } + else + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); + break; + case FCL_SENTPASS: /* got reply to PASS cmd */ + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); + break; + } + return 0; +} + + + + +/* FUNCTION: fc_checkcmd() + * + * fc_checkcmd() - check for a reply to and outstanding command. + * Performs state machine actions if reply is ready. Also does + * timeouts. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if OK, if error returns -1. + */ + +int +fc_checkcmd(ftpc * ftpconn) +{ + int e; + int replycode; + char* cp; + + /* if waiting for connect or doing data IO, just keep doing it */ + switch (ftpconn->cmdstate) + { + case FCC_SENDING: + e = fc_sendmore(ftpconn); + return e; + case FCC_RECEIVING: + case FCC_NLSTING: + e = fc_getmore(ftpconn); + return e; + case FCC_SENDCONN: /* we are trying to connect... */ + case FCC_RECVCONN: + case FCC_NLSTCONN: + e = fc_dataconn(ftpconn); /* poll data connect */ + if (e == 1) /* data port connected? */ + { + ftpconn->cmdstate++; /* go listen for result */ + FC_CALLBACK(ftpconn); + e = 0; /* definitely not an error */ + /* If cmdstate is FCC_NLSTING or FCC_RECEIVING, + * or FCC_SENDING display the message + */ + if (ftpconn->cmdstate == FCC_SENDING) + fc_printf(ftpconn, "sending file... cticks = %lu\n", cticks); + else /* FCC_NLSTING or FCC_RECEIVING */ + fc_printf(ftpconn, "receiving file...\n"); + } + else + { + /* see if we should time out waiting for connect */ + if ((ftpconn->last_cmd + ((unsigned long)fc_replytmo*TPS)) < ftp_ticks) + { + fc_printf(ftpconn, "ftp command timed out\n"); + return -1; + } + } + return e; + } + + /* fall to here if expecting a command reply */ + e = fc_getreply(ftpconn, &replycode); + if (e == 1) /* reply not ready yet */ + { + /* see if we should time out waiting for reply */ + if ((ftpconn->last_cmd + ((unsigned long)fc_replytmo*TPS)) < ftp_ticks) + { + fc_printf(ftpconn, "ftp command timed out\n"); + return -1; + } + else + { + return 0; /* else wait some more */ + } + } + else if (e != 0) /* fatal connection error? */ + { + return -1; + } + else /* e=0 */ + { + if (strstr(ftpconn->cmdbuf, "\r\n") == NULL) + return 0; + } + + + /* fall to here if we got whole reply */ + e = 0; /* clear error holder prior to case statement */ + switch (ftpconn->cmdstate) + { + case FCC_SENDPORT: + case FCC_RECVPORT: + case FCC_NLSTPORT: + if (replycode < 200 || replycode > 299) /* OK code? */ + { + fc_printf(ftpconn, "ftp port command error %s\n", ftpconn->cmdbuf); + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); + break; /* this is not fatal to command connection */ + } + ftpconn->cmdstate++; /* bump to actual IO command */ + FC_CALLBACK(ftpconn); + e = fc_usercmd(ftpconn, ftpconn->cmdstate, NULL); /* send cmd */ + break; + case FCC_SENDOK: + case FCC_RECVOK: + case FCC_NLSTOK: + if ((replycode == 150) || (replycode == 125)) + { + ftpconn->cmdstate++; /* next state is handle actual connect */ + FC_CALLBACK(ftpconn); + } + else /* not a 150 code, clean up data conn */ + { + fc_endxfer(ftpconn); /* kill data connection */ + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); /* back to base state */ + e = 0; /* don't kill command connection */ + } + break; + case FCC_RECVDONE: /* closing receive data connection */ + case FCC_NLSTDONE: + fc_endxfer(ftpconn); /* cleanup resources */ + /* fall to logstate logic */ + case FCC_SENDDONE: /* done with file send, awaiting reply */ + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); /* back to base state */ + break; + case FCC_TYPE: + if (replycode == 200) + ftpconn->mode = ftpconn->newmode; + else + fc_printf(ftpconn, "type cmd failed\n"); + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); /* go back to idle state */ + break; + case FCC_CWD: /* get reply to Change Working Directory cmd */ + case FCC_PWD: /* get reply to Print Working Directory cmd */ + if (replycode < 200 || replycode > 299) /* check reply code */ + fc_printf(ftpconn, "path error: %s", &ftpconn->cmdbuf[5]); + else /* good reply, display to user */ + fc_printf(ftpconn, "ftp: %s", &ftpconn->cmdbuf[4]); + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); /* go back to idle state */ + break; + case FCC_QUIT: /* get reply to QUIT command */ + if (replycode < 200 || replycode > 299) /* check reply code */ + fc_printf(ftpconn, "quit error: %s", &ftpconn->cmdbuf[5]); + else /* good reply, display to user */ + fc_printf(ftpconn, "ftp: %s", &ftpconn->cmdbuf[4]); + FC_SETLOGSTATE(ftpconn,FCL_CLOSING); /* go ahead and close conn */ + break; + default: + dtrap(); /* bad case? */ + e = -1; + } + + /* Flush current command from cmdbuf */ + cp = strstr(ftpconn->cmdbuf, "\r\n"); /* find end of command */ + if((cp == NULL) || (*(cp + 2) == 0)) + { + ftpconn->cmdbuf[0] = 0; /* invalidate whole buffer */ + } + else /* there was another command in the buffer */ + { + cp += 2; /* point to next cmd (past CR/LF) */ + MEMMOVE(ftpconn->cmdbuf, cp, strlen(cp) + 1); /* move up next cmd */ + } + return e; +} + +/* FUNCTION: fc_showspeed() + * + * show speed parameters of current transfer. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: + */ + +void +fc_showspeed(ftpc * ftpconn) +{ + unsigned secs; + u_long ticks; + char * oper; + + switch (ftpconn->cmdstate) /* set operation string */ + { + case FCC_SENDING: + case FCC_SENDDONE: + oper = "Sent"; + break; + case FCC_RECEIVING: + case FCC_RECVDONE: + oper = "Received"; + break; + case FCC_NLSTING: + case FCC_NLSTDONE: + oper = "Listed"; + break; + default: + return; + } + + ticks = ftp_ticks - ftpconn->last_data; + secs = (unsigned)(ticks/TPS); + fc_printf(ftpconn, "%s %lu bytes in %d seconds (cticks = %lu)\n", + oper, ftpconn->datadone, secs, cticks); + /* show speed if samples are big enough */ + if (secs > 0 && ftpconn->datadone > 1024) + { + fc_printf(ftpconn, "speed: %ld.%ld KB/s\n", + (ftpconn->datadone/secs)/1024L, + (ftpconn->datadone/secs)%1024L ); + } +} + +/* FUNCTION: fc_endxfer() + * + * fc_endxfer(ftpconn) - housekepping routine to clean up after a + * data transfer. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: + */ + +void +fc_endxfer(ftpc * ftpconn) +{ + /* close file if open */ + if (ftpconn->fp) + vfclose(ftpconn->fp); + ftpconn->fp = NULL; + + /* close data socket if open */ + if (ftpconn->data_sock && ftpconn->data_sock != SYS_SOCKETNULL) + t_socketclose(ftpconn->data_sock); + ftpconn->data_sock = SYS_SOCKETNULL; + + /* printf messages as required */ + if (ftpconn->options & FCO_VERB) + { + fc_showspeed(ftpconn); + } + + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); + /* reset data transfer state variables */ + fc_clearf(ftpconn); +} + + + +/* FUNCTION: fc_clearf() + * + * fc_clearf(ftpconn) - housekepping routine to set all file transfer + * counters to zero. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: + */ + +void +fc_clearf(ftpc * ftpconn) +{ + /* clean up ftpconn counters, etc. */ + ftpconn->datact = 0; /* clear count */ + ftpconn->offset = 0; /* clear offset */ + ftpconn->datadone = 0L; + ftpconn->filesize = 0L; + ftpconn->last_cmd = ftp_ticks; /* update last_cmd */ +} + + + +/* FUNCTION: fc_sendmore() + * + * fc_XXXXmore() - called to drive file transfers. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Both return 0 if OK, if error returns -1. + */ + +int +fc_sendmore(ftpc * ftpconn) +{ + int e; + + /* see if we need to read in buffer */ + if (ftpconn->datact == 0) + { + ftpconn->offset = 0; /* reset databuf index */ + ftpconn->datact = vfread(ftpconn->databuf, 1, FILEBUFSIZE, ftpconn->fp); + if (ftpconn->datact <= 0) /* end of file? */ + { + ftpconn->cmdstate = FCC_SENDDONE; /* move to await reply? */ + FC_CALLBACK(ftpconn); + fc_endxfer(ftpconn); /* close data connection , etc. */ + /* At this point we expect to receive the cmd "226 Transfer + * complete at connection for " from the peer. + * Hence the logstate should be FCL_PENDING. + */ + FC_SETLOGSTATE(ftpconn,FCL_PENDING); + return 0; + } + } + e = t_send(ftpconn->data_sock, &ftpconn->databuf[ftpconn->offset], + ftpconn->datact, 0); + if (e <= 0) + { + e = t_errno(ftpconn->data_sock); + if((e == EWOULDBLOCK) || + (e == ENOBUFS)) + { + return 0; /* Transient error, try again later */ + } + else + { + fc_printf(ftpconn, "ftp data send error %d\n", e); + return -1; + } + } + + /* fall to here if we sent data. Consider this command activity */ + ftpconn->last_cmd = ftp_ticks; + + /* do hash mark printfing */ + if (ftpconn->options & FCO_HASH) + fc_hashmark(ftpconn, ftpconn->datadone, (unsigned)e); + + ftpconn->offset += e; + ftpconn->datadone += (long)e; + ftpconn->datact -= e; + return 0; +} + +#define FTPC_MAX_PRINTF_LEN 80 + + + +/* FUNCTION: fc_getmore() + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: + */ + +int +fc_getmore(ftpc * ftpconn) +{ + int e; + int read_size; + + /* we will usually try to read a whole buffer full */ + read_size = FILEBUFSIZE; + /* but if its for a list command, we read 1 byte less so that we + * got room to null terminate what we've read so we can pass it to + * fc_printf() + */ + if (ftpconn->cmdstate == FCC_NLSTING) + read_size--; + + e = t_recv(ftpconn->data_sock, ftpconn->databuf, read_size, 0); + if (e < 0) /* socket error */ + { + e = t_errno(ftpconn->data_sock); + if (e == EWOULDBLOCK) + return 0; /* no data ready try again later */ + fc_printf(ftpconn, "ftp data socket error %d\n", e); + return -1; + } + else if (e == 0) /* server closed connection */ + { + /* this is a normal transfer termination */ + if (ftpconn->options & FCO_VERB) + fc_printf(ftpconn, "ftp server closed data connection\n"); + +#if 0 + /* close data socket if open */ + if (ftpconn->data_sock && ftpconn->data_sock != SYS_SOCKETNULL) + t_socketclose(ftpconn->data_sock); + ftpconn->data_sock = SYS_SOCKETNULL; +#endif + + ftpconn->cmdstate++; /* move to shutdown state */ + FC_CALLBACK(ftpconn); + return 0; + } + else /* e is positive byte count */ + { + /* got data - consider this a command activity */ + ftpconn->last_cmd = ftp_ticks; + ftpconn->offset = 0; /* update data pointer & count */ + ftpconn->datact = e; + } + + if (ftpconn->cmdstate == FCC_NLSTING) + { + /* our homegrown version of printf() limits field sizes to + * something like 132 bytes. this loop feeds the LIST output + * to printf() 80 chars at a time so as not to exceed this limit + */ + char * cp; + char c; + int len; + + /* null terminate the string so printf will handle it right */ + ftpconn->databuf[e] = 0; + cp = ftpconn->databuf; + len = e; + + /* while there's more than 80 chars left to printf */ + while (len > FTPC_MAX_PRINTF_LEN) + { + /* save the 80th char in so we can restore it below */ + c = *(cp + FTPC_MAX_PRINTF_LEN); + /* overwrite the 80th char with a null so printf will do + the right thing */ + *(cp + FTPC_MAX_PRINTF_LEN) = 0; + + /* print the 80 bytes */ + fc_printf(ftpconn, "%s", cp); + + /* put the overwritten byte back */ + *(cp + FTPC_MAX_PRINTF_LEN) = c; + len -= FTPC_MAX_PRINTF_LEN; + cp += FTPC_MAX_PRINTF_LEN; + } + + fc_printf(ftpconn, "%s", cp); + ftpconn->datadone += ftpconn->datact; + return 0; + } + + e = vfwrite(ftpconn->databuf, 1, ftpconn->datact, ftpconn->fp); + if (e != (int)ftpconn->datact) + { + fc_printf(ftpconn, "ftp file write error\n"); + return -1; + } + /* do hash mark printfing */ + if (ftpconn->options & FCO_HASH) + fc_hashmark(ftpconn, ftpconn->datadone, ftpconn->datact); + ftpconn->datadone += (long)ftpconn->datact; + ftpconn->datact = 0;; + return 0; +} + + + + +/* FUNCTION: fc_dataconn() + * + * fc_dataconn() - Initiate or check open of a data connection. If + * ftpconn->data_sock is nonzero, this creates a socket and starts + * the non-blocking connect, else it calls connect to see if + * connection has completed. If connection completes + * ftpconn->cmdstate is incremented. This handles both active and + * passive opens, based on the FCP_PASV bit int ftpconn->options. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns -1 if error detected, 1 if we're now connected, + * 0 if still * waiting. + */ + +int +fc_dataconn(ftpc * ftpconn) +{ + int e; + SOCKTYPE sock = SYS_SOCKETNULL; + struct sockaddr ftpsin; /* generic, will be cast to v4 or v6 format */ + int sinsize; /* size of ftpsin after domain selection */ + + switch (ftpconn->domain) + { +#ifdef IP_V4 + case AF_INET: + { + struct sockaddr_in * ftpsin4; + /* fill in connect parameters for v4 connection */ + sinsize = sizeof(struct sockaddr_in); + ftpsin4 = (struct sockaddr_in *)&ftpsin; + ftpsin4->sin_family = AF_INET; + ftpsin4->sin_addr.s_addr = ftpconn->fhost; + break; + } +#endif /* IP_V4 */ +#ifdef IP_V6 + case AF_INET6: + { + struct sockaddr_in6 * ftpsin6; + /* fill in connect parameters for v6 connection */ + sinsize = sizeof(struct sockaddr_in6); + ftpsin6 = (struct sockaddr_in6 *)&ftpsin; + ftpsin6->sin6_family = AF_INET; + IP6CPY(&ftpsin6->sin6_addr, &ftpconn->ip6_fhost); + break; + } +#endif /* IP_V4 */ + default: + dtrap(); /* no domain setting */ + return -1; + } + + /* see if there is already a connection in progress */ + if (ftpconn->data_sock && ftpconn->data_sock != SYS_SOCKETNULL) + { + /* see if we are listening (passive) or connecting (active) */ + if ((ftpconn->options & FCO_PASV)==0) /* server not passive, try accept */ + { + sock = t_accept(ftpconn->data_sock, &ftpsin, &sinsize); + if (sock == SYS_SOCKETNULL) + { + e = t_errno(ftpconn->data_sock); + if (e == EWOULDBLOCK) + return 0; /* normal return for waiting opens */ + fc_printf(ftpconn, "ftp: error %d on listening socket\n", e); + return -1; + } + else /* accept worked, we are connected */ + { + t_socketclose(ftpconn->data_sock); /* close listen socket */ + ftpconn->data_sock = sock; /* install accepted data socket */ + + return 1; /* return "connected" code */ + } + } + else /* server passive, we must poll active connect */ + { + e = t_connect(sock, &ftpsin, sinsize); + if (e == 0) /* connection completed OK */ + { + ftpconn->cmdstate++; /* bump command to next state */ + FC_CALLBACK(ftpconn); +#ifdef IP_V4 + if(ftpconn->domain == AF_INET) + ftpconn->dport = htons(((struct sockaddr_in *)(&ftpsin))->sin_port); +#endif /* IP_V4 */ +#ifdef IP_V6 + if(ftpconn->domain == AF_INET6) + ftpconn->dport = htons(((struct sockaddr_in6*)(&ftpsin))->sin6_port); +#endif /* IP_V6 */ + return 1; + } + e = t_errno(sock); /* get socket error */ + if (e == EINPROGRESS) /* still connecting */ + return 0; /* normal return for PASV SENDCONN & RECVCONN */ + fc_printf(ftpconn, "ftp: error %d open data connection\n", e); + return -1; + } + } + + /* see if we should be listening or connecting */ + if ((ftpconn->options & FCO_PASV)==0) /* server not passive, do listen */ + { + /* start TCP listen on data port, passing parms in local endian */ + + ftpconn->dport= fc_next_port; /* Use a unique data port */ + + fc_next_port++; + if ( fc_next_port < FTP_START_DATA_PORT ) /* wraparound occurd ? */ + fc_next_port = FTP_START_DATA_PORT ; + + sock = t_tcplisten((u_short*)&ftpconn->dport, ftpconn->domain); + + if (sock == SYS_SOCKETNULL) + { + e = t_errno(ftpconn->data_sock); + fc_printf(ftpconn, "ftp client data port list failed, error %d\n", e); + return -1; + } + } + else /* server is passive, initiate connection */ + { + sock = t_socket(ftpconn->domain, SOCK_STREAM, 0); + if (sock == SYS_SOCKETNULL) + return -1; /* fatal, kill command connection */ + + /* make non-blocking connect call */ + t_setsockopt(sock, SOL_SOCKET, SO_NBIO, NULL, 0); + e = t_connect(sock, &ftpsin, sinsize); + if (e != 0) + { + e = t_errno(sock); /* get socket error */ + if (e != EINPROGRESS) /* still connecting */ + { + fc_printf(ftpconn, "ftp: error %d open data connection\n", e); + return -1; + } + } + } + /* update state variables */ + ftpconn->last_cmd = ftp_ticks; + ftpconn->last_data = ftp_ticks; + ftpconn->data_sock = sock; + ftpconn->cmdstate++; + FC_CALLBACK(ftpconn); + return 0; +} + + + + +/* FUNCTION: fc_killsess() + * + * fc_killsess() - the "destructor" for an ftp client session struct + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: + */ + +void +fc_killsess(ftpc * ftpconn) +{ + ftpc * ftpnext; + ftpc * ftplast; + + if (ftpconn->cmd_sock && ftpconn->cmd_sock != INVALID_SOCKET) + t_socketclose(ftpconn->cmd_sock); + ftpconn->cmd_sock = INVALID_SOCKET; + if (ftpconn->data_sock && ftpconn->data_sock != INVALID_SOCKET) + t_socketclose(ftpconn->data_sock); + ftpconn->data_sock = INVALID_SOCKET; + if (ftpconn->fp) + vfclose(ftpconn->fp); + + /* search ftp client list for ftpconn so we can unlink it */ + ftpnext = ftp_clients; + ftplast = NULL; + while (ftpnext) + { + if (ftpnext == ftpconn) /* found connection to delete */ + { + if (ftplast) /* not at head of queue */ + ftplast->next = ftpconn->next; /* unlink */ + else /* it's head of queue */ + ftp_clients = ftpconn->next; + break; + } + ftplast = ftpnext; + ftpnext = ftpnext->next; + } +#ifdef NPDEBUG + if (!ftpnext) /* not found in list ? */ + { dtrap(); } +#endif + FTPC_FREE(ftpconn); /* free structure memory */ +} + + + +/* FUNCTION: fc_connect() + * + * fc_connect() - initiate connect to an FTP server. If user name is + * not passed, connection will be made, but no login will occur. If + * username in given, password must be passed also if the server will + * require it. Note that many BSD derived servers ask for the + * password even if the UNIX user does not have one in his passwd + * file. + * + * this first parameter is a pointer to a binary IP address. This + * is 4 bytes long if the domain parameter is AF_INET, and 16 bytes + * long if AF_INET6. + * + * PARAM1: ip_addr fhost - ftp server to contact + * PARAM2: char * user - user & passwd to log in with + * PARAM3: char * passwd + * PARAM4: void * pio + * PARAM5: int domain - AF_INET or AF_INET6 + * + * RETURNS: Returns NULL if error, else an ftpc structure. + */ + +ftpc * +fc_connect(void * ipaddr, + char * user, /* user name */ + char * passwd, /* optional password, may be NULL or "" */ + void * pio, /* Handle to output device (for messages) */ + int domain) /* AF_INET or AF_INET6 */ +{ + ftpc * ftpconn; + int e; + + /* create connection structure */ + ftpconn = FTPC_ALLOC(sizeof(ftpc)); + if (ftpconn == NULL) + { + fc_printf(NULL, "alloc failed\n"); + return NULL; + } + + /* fill in connection structure */ + FC_SETLOGSTATE(ftpconn,0); + ftpconn->mode = FTPTYPE_ASCII; + ftpconn->domain = domain; + + /* make a copy of the passed FTP server IP address */ + switch(domain) + { +#ifdef IP_V4 + case AF_INET: + /* IPv4 Host is passed in net endian */ + ftpconn->fhost = *(ip_addr *)ipaddr; + break; +#endif /* IP_V4 */ +#ifdef IP_V6 + case AF_INET6: + IP6CPY(&ftpconn->ip6_fhost, (ip6_addr *)ipaddr); + break; +#endif /* IP_V6 */ + default: + dtrap(); + return NULL; + } + + /* if user & pw passed, copy them; else leave as 0s */ + if (user) + MEMCPY(ftpconn->username, user, FTPMAXUSERNAME); + if (passwd) + MEMCPY(ftpconn->password, passwd, FTPMAXUSERPASS); + ftpconn->next = ftp_clients; /* link at front of list */ + ftp_clients = ftpconn; + +#ifdef NPDEBUG + ftpconn->options |= FCO_VERB; /* turn on verbose for debug builds */ +#endif + + ftpconn->pio = pio; + + /* start the connection request */ + e = fc_connopen(ftpconn); + if (e) + { + fc_printf(NULL, "connect error %d\n", e); + fc_killsess(ftpconn); + return NULL; + } + SignalFtpClient(); /* wake client maintainance task */ + return ftpconn; +} + + + +/* FUNCTION: fc_get() + * + * fc_get() - Start the RETR of a file from the ftp server to the + * local file system. + * + * PARAM1: ftpc * fc + * PARAM2: char * sname + * PARAM3: char * dname + * + * RETURNS: Returns 0 if OK, else negtive error code + */ + +int +fc_get(ftpc * fc, char * sname, char * dname) +{ + int e; + char * mode; + + /* make sure session is conencted and ready */ + if (fc->logstate != FCL_LOGGEDIN) + return -1; + + if (fc->mode == FTPTYPE_ASCII) + mode = "wt"; /* ANSI translated mode */ + else + mode = "wb"; /* ANSI binary mode */ + + /* open emtpy file for receive */ + fc->fp = vfopen(dname, mode); /* check mode later */ + if (fc->fp == NULL) + { + fc_printf(fc, "Unable to open local file %s\n", dname); + return -1; + } + + MEMCPY(fc->ffilename, sname, sizeof(fc->ffilename)); + FC_SETLOGSTATE(fc,FCL_PENDING); + + if ((fc->options & FCO_PASV)==0) /* server not passive */ + { + e = fc_dataconn(fc); /* this will start our listen */ + if (e) return e; + } + + fc->cmdstate = FCC_RECVPORT; + FC_SETLOGSTATE(fc,FCL_PENDING); /* Maybe this is redundant */ + e = fc_sendport(fc); + return e; +} + + + +/* FUNCTION: fc_put() + * + * fc_put() - Start the STOR of a local file to the ftp server. + * + * PARAM1: ftpc * fc + * PARAM2: char * sname + * PARAM3: char * dname + * + * RETURNS: Returns 0 if OK, else negtive error code + */ + +int +fc_put(ftpc * fc, char * sname, char * dname) +{ + int e; + char * mode; + + /* make sure session is connected and ready */ + if (fc->logstate != FCL_LOGGEDIN) + return -1; + + /* open local file for send */ + if (fc->mode == FTPTYPE_ASCII) + mode = "rt"; /* ANSI translated mode */ + else + mode = "rb"; /* ANSI binary mode */ + + fc->fp = vfopen(sname, mode); + if (fc->fp == NULL) + { + fc_printf(fc, "Unable to open local file %s\n", sname); + return -1; + } + + MEMCPY(fc->ffilename, dname, sizeof(fc->ffilename)); + FC_SETLOGSTATE(fc,FCL_PENDING); + + if ((fc->options & FCO_PASV)==0) /* server not passive */ + { + e = fc_dataconn(fc); /* this will start our listen */ + if (e) return e; + } + + fc->cmdstate = FCC_SENDPORT; + FC_SETLOGSTATE(fc,FCL_PENDING); + e = fc_sendport(fc); + return e; +} + + + + +/* FUNCTION: fc_connopen() + * + * fc_connopen() - TCP active open routine. Provided so FTP client + * et.al. can open an active TCP connection without blocking in TCP. + * All parameters are passed in network endian. When calling for the + * first time, ftpconn->fhost and ftpconn->dport should be set and + * ftpconn->cmdstate should be 0. To poll for connection ready, + * ftpconn->cmdstate is set to the value returned from the first call + * and all other settings are ignored. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if OK, -1 if error detected. + */ + +int +fc_connopen(ftpc * ftpconn) +{ + int e; + SOCKTYPE sock; + struct sockaddr ftpsin; /* cast as sockaddr_in or sockaddr_in6 */ + int sinsize; /* size of ftpsin cast */ + int replycode; + + if (ftpconn->logstate == FCL_CONNECTED) /* connected but not ready */ + { + e = fc_getreply(ftpconn, &replycode); + if (e == -1) return -1; /* return if error */ + if (e == 1) return 0; /* return if not ready yet */ + /* fall to here if we have an FTP message after socket open */ + if (replycode == 220) /* got "ready" code? */ + { + FC_SETLOGSTATE(ftpconn,FCL_READY); /* ready to send USER cmd */ + if (ftpconn->username[0]) + return(fc_senduser(ftpconn)); + else + return 0; + } + else /* got code other than "ready" - this is bad. */ + { + fc_printf(ftpconn, "connect failed; %s\n", ftpconn->cmdbuf); + return -1; /* kill off client session */ + } + } + + switch (ftpconn->domain) + { +#ifdef IP_V4 + case AF_INET: + { + struct sockaddr_in * ftpsin4; + /* fill in connect parameters for v4 connection */ + sinsize = sizeof(struct sockaddr_in); + ftpsin4 = (struct sockaddr_in *)&ftpsin; + ftpsin4->sin_family = AF_INET; + ftpsin4->sin_addr.s_addr = ftpconn->fhost; + ftpsin4->sin_port = htons(FTP_PORT); + break; + } +#endif /* IP_V4 */ +#ifdef IP_V6 + case AF_INET6: + { + struct sockaddr_in6 * ftpsin6; + /* fill in connect parameters for v6 connection */ + sinsize = sizeof(struct sockaddr_in6); + ftpsin6 = (struct sockaddr_in6 *)&ftpsin; + ftpsin6->sin6_family = AF_INET6; + ftpsin6->sin6_port = htons(FTP_PORT); + IP6CPY(&ftpsin6->sin6_addr, &ftpconn->ip6_fhost); + break; + } +#endif /* IP_V6 */ + default: + dtrap(); /* no domain setting */ + return -1; + } + + + /* if this client session already has a socket, see if it's connected */ + if (ftpconn->logstate == FCL_CONNECTING) + { + /* poll t_connect() for complete */ + e = t_connect(ftpconn->cmd_sock, &ftpsin, sinsize); + if (e) + e = t_errno(ftpconn->cmd_sock); + if (e == 0 || e == EISCONN) /* socket connected to server OK */ + { + FC_SETLOGSTATE(ftpconn,FCL_CONNECTED); + return 0; + } + /* else handle connect error */ + if (e == EINPROGRESS) /* connect still in progress? */ + return 0; /* wait some more */ + fc_printf(ftpconn, "ftp connect error %d\n", e); + return -1; + } + + /* fall to here on first connect. Get a new socket: */ + sock = t_socket(ftpconn->domain, SOCK_STREAM, 0); + if (sock == SYS_SOCKETNULL) + return -1; + + ftpconn->cmd_sock = sock; + + t_setsockopt(sock, SOL_SOCKET, SO_NBIO, NULL, 0); + + /* make initial non-blocking connect call */ + e = t_connect(sock, &ftpsin, sinsize); + if (e != 0) + { + e = t_errno(sock); + if (e != EINPROGRESS) /* still connecting */ + { + return -1; + } + } + ftpconn->last_cmd = ftp_ticks; + FC_SETLOGSTATE(ftpconn,FCL_CONNECTING); + return 0; +} + + + +/* FUNCTION: fc_senduser() + * + * state drivers - each of these is called from the state machine + * switch table to push the connection from one state to another. + * + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: All return 0 if OK, else non-zero error code + */ + +int +fc_senduser(ftpc * ftpconn) +{ + /* try to log in with username */ + sprintf(ftpconn->cmdbuf, "USER %s\r\n", ftpconn->username); + FC_SETLOGSTATE(ftpconn,FCL_SENTUSER); + return (fc_sendcmd(ftpconn)); +} + + + +/* FUNCTION: fc_sendpass() + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: + */ + +int +fc_sendpass(ftpc * ftpconn) +{ + sprintf(ftpconn->cmdbuf, "PASS %s\r\n", ftpconn->password); + FC_SETLOGSTATE(ftpconn,FCL_SENTPASS); + return (fc_sendcmd(ftpconn)); +} + + + +/* FUNCTION: fc_sendport() + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: + */ + +int +fc_sendport(ftpc * ftpconn) +{ + +#ifdef IP_V4 + if(ftpconn->domain == AF_INET) + { + ulong lp; + unshort sp; + + /* get my IP addr for this connection, set to local endian */ + lp = htonl(ip_mymach(ftpconn->fhost)); + sp = (unshort)ftpconn->dport; + + /* format the port command from the fhost and dport info */ + sprintf(ftpconn->cmdbuf, "PORT %u,%u,%u,%u,%u,%u\r\n", + (unsigned)(lp >> 24), (unsigned)(lp >> 16)&0xff, + (unsigned)(lp >> 8)&0xff, (unsigned)(lp&0xff), + (unsigned)(sp >> 8), (unsigned)(sp & 0xff)); + } +#endif /* IPV4 */ +#ifdef IP_V6 + if(ftpconn->domain == AF_INET6) + { + struct ip6_inaddr * myaddr; + char addrbuf[46]; + + /* get my IP addr for this connection & format into text */ + myaddr = ip6_myaddr(&ftpconn->ip6_fhost, NULL); + if(myaddr == NULL) + { + dtrap(); + return ENP_LOGIC; + } + inet_ntop(AF_INET6, &myaddr->addr, addrbuf, sizeof(addrbuf) ); + + /* format the port command from the fhost and dport info */ + sprintf(ftpconn->cmdbuf, "EPRT |2|%s|%u|\r\n", addrbuf, ftpconn->dport); + } +#endif /* IP_V6 */ + + fc_clearf(ftpconn); /* clear file xfer counters */ + return (fc_sendcmd(ftpconn)); +} + + + + +/* FUNCTION: fc_sendcmd() + * + * fc_sendcmd(ftpc ftpconn) - send the command in the + * ftpconn->cmdbuf. This is suitable for calling from the state + * driver switch statement in fc_check() + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if OK, else non-zero error code + */ + +int +fc_sendcmd(ftpc * ftpconn) +{ + int e; + int send_len; + + /* + * Altera Niche Stack Nios port modification: + * print cmdstate as %d rather than %s to remove build warning. + */ + if(ftpconn->cmd_sock == INVALID_SOCKET) + { + dprintf("fc_sendcmd: bad socket; logstate: %d, cmdstate:%d \n", + ftpconn->logstate, ftpconn->cmdstate); + dtrap(); + return -1; + } + + /* do the printf first, else we run into state machine problems + on speedy systems if command finishes while we're printfing */ + if (ftpconn->options & FCO_VERB) + fc_printf(ftpconn, "ftp send: %s", ftpconn->cmdbuf); + + send_len = strlen(ftpconn->cmdbuf); + /* these are short commands and should send all at once: */ + e = t_send(ftpconn->cmd_sock, ftpconn->cmdbuf, send_len, 0); + if (e < 0) + { + e = t_errno(ftpconn->cmd_sock); + fc_printf(ftpconn, "send error %d on cmd %s", e, ftpconn->cmdbuf); + return -1; + } + /* verify that the whole buffer was sent */ + if (e != send_len) + { + fc_printf(ftpconn,"partial send %d bytes on cmd %s",e,ftpconn->cmdbuf); + return -1; + } + ftpconn->last_cmd = ftp_ticks; + ftpconn->cmdbuf[0] = 0; /* clear command buffer for reply */ + return 0; +} + + + +/* FUNCTION: fc_dir() + * + * fc_dir() - start the ftp command to do a DIR ("ls" for you UNIX + * folks) of the current directory of the server. Problems or results + * are reported via fc_printf(). + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if OK, else ENP_ error code. + */ + +int +fc_dir(ftpc * ftpconn) +{ + int e; + + if ((e = fc_ready(ftpconn)) != 0) + return e; + if ((ftpconn->options & FCO_PASV)==0) /* server not passive */ + { + e = fc_dataconn(ftpconn); /* this will start our listen */ + if (e) /* if error, kill session and exit */ + { + fc_killsess(ftpconn); + return e; + } + } + ftpconn->cmdstate = FCC_NLSTPORT; /* command state: sending list port */ + FC_SETLOGSTATE(ftpconn,FCL_PENDING); /* login state: cmd in progress */ + e = fc_sendport(ftpconn); /* kick off the port command */ + return e; +} + + + +/* FUNCTION: fc_pwd() + * + * fc_pwd() - start the ftp command to return the Current Working + * Directory. Problems or results are reported via fc_printf(). + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if OK, else ENP_ error code. + */ + +int +fc_pwd(ftpc * ftpconn) +{ + int e; + + if ((e = fc_ready(ftpconn)) != 0) + return e; + return(fc_usercmd(ftpconn, FCC_PWD, NULL)); +} + + + +/* FUNCTION: fc_chdir() + * + * fc_chdir() - start the ftp command to return the Current Working + * Directory. Problems or results are reported via fc_printf(). + * + * PARAM1: ftpc * ftpconn + * PARAM2: char * dirparm + * + * RETURNS: Returns 0 if OK, else ENP_ error code. + */ + +int +fc_chdir(ftpc * ftpconn, char * dirparm) +{ + int e; + + if ((e = fc_ready(ftpconn)) != 0) + return e; + return(fc_usercmd(ftpconn, FCC_CWD, dirparm)); +} + + + +/* FUNCTION: fc_settype() + * + * fc_chdir() - start the ftp command to set the data type Problems + * or results are reported via fc_printf(). + * + * PARAM1: ftpc * ftpconn + * PARAM2: int typecode + * + * RETURNS: Returns 0 if OK, else ENP_ error code. + */ + +int +fc_settype(ftpc * ftpconn, int typecode) +{ + char * typestring; + int e; + + if ((e = fc_ready(ftpconn)) != 0) + return e; + + if (typecode == FTPTYPE_ASCII) + typestring = "A"; + else if(typecode == FTPTYPE_IMAGE) + typestring = "I"; + else + return ENP_PARAM; /* unsupported typecode */ + + ftpconn->newmode = typecode; /* save type in case command works */ + return(fc_usercmd(ftpconn, FCC_TYPE, typestring)); /* roll the bones */ +} + + + +/* FUNCTION: fc_quit() + * + * fc_quit() - start the ftp command to end the ftp connection. + * Problems or results are reported via fc_printf(). + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if OK, else ENP_ error code. + */ + +int +fc_quit(ftpc * ftpconn) +{ + int e; + + if(ftpconn == NULL) + { + fc_printf(ftpconn, "ftp client not open\n"); + return ENP_PARAM; + } + + if(ftpconn->logstate != FCL_LOGGEDIN) + { + /* not logged in yet, just close the cmd socket */ + if (ftpconn->cmd_sock && ftpconn->cmd_sock != INVALID_SOCKET) + t_socketclose(ftpconn->cmd_sock); + ftpconn->cmd_sock = INVALID_SOCKET; + } + if ((e = fc_ready(ftpconn)) != 0) + return e; + return(fc_usercmd(ftpconn, FCC_QUIT, NULL)); +} + + + +/* FUNCTION: fc_ready() + * + * fc_ready() - Check to see if the passed session is ready to + * initiate a new command. + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if ready, else ENP_ error code. + */ + +int +fc_ready(ftpc * ftpconn) +{ + if(ftpconn == NULL) + { + fc_printf(ftpconn, "ftp client not open\n"); + return ENP_PARAM; + } + + if (ftpconn->logstate != FCL_LOGGEDIN) + { + if (ftpconn->logstate == FCL_PENDING) + fc_printf(ftpconn, "ftp client is busy, state %d\n", ftpconn->logstate); + else + fc_printf(ftpconn, "ftp client not logged in\n"); + return ENP_BAD_STATE; + } + return 0; /* ready for new command */ +} + + + +/* FUNCTION: fc_usercmd() + * + * fc_usertcmd() - The guts of several simple ftp client commands. + * Formats & send a command based on the passed code and an optional + * text parameter. Problems or results are reported via fc_printf(). + * + * PARAM1: ftpc * ftpconn + * PARAM2: int cmdcode + * PARAM3: char * cmdarg + * + * RETURNS: Returns 0 if OK, else ENP_ error code. + */ + +int +fc_usercmd(ftpc * ftpconn, int cmdcode, char * cmdarg) +{ + + ftpconn->cmdstate = cmdcode; /* set command state */ + FC_SETLOGSTATE(ftpconn,FCL_PENDING); /* mark login state as busy */ + switch (cmdcode) + { + case FCC_PWD: + strcpy(ftpconn->cmdbuf, "XPWD\r\n"); + break; + case FCC_CWD: + sprintf(ftpconn->cmdbuf, "CWD %s\r\n", cmdarg); + break; + case FCC_TYPE: + sprintf(ftpconn->cmdbuf, "TYPE %s\r\n", cmdarg); + break; + case FCC_NLSTOK: + sprintf(ftpconn->cmdbuf, "NLST\r\n"); + break; + case FCC_RECVOK: + sprintf(ftpconn->cmdbuf, "RETR %s\r\n", ftpconn->ffilename); + break; + case FCC_SENDOK: + sprintf(ftpconn->cmdbuf, "STOR %s\r\n", ftpconn->ffilename); + break; + case FCC_QUIT: + sprintf(ftpconn->cmdbuf, "QUIT\r\n"); + break; + default: /* bad parameter */ + dtrap(); + return ENP_PARAM; + } + return(fc_sendcmd(ftpconn)); /* send to server */ +} + +unsigned marksize = 4096; /* units for hash marking */ + + +/* FUNCTION: fc_hashmark() + * + * fc_hashmark() - called after each sucessfull network data block + * transfer to handle the printing of hashmarks. + * + * PARAM1: ftpc * ftpconn + * PARAM2: ulong before + * PARAM3: unsigned added + * + * RETURNS: + */ + +void +fc_hashmark(ftpc * ftpconn, + ulong before, /* data already moved before this transfer */ + unsigned added) /* additional data moved in this transfer */ +{ + /* print a hash mark for each "marksize" boundary */ + while (before/marksize < (before+added)/marksize) + { + fc_printf(ftpconn, "#"); /* call per-port printf */ + if (added > marksize) /* don't let "added" wrap */ + added -= marksize; + else + added = 0; + } +} + + + +/* fc_state() - display state info for passed connection */ + +#ifdef NET_STATS + +char * fc_statestr[]={ + "started connect", + "connected but no \"220 ready\" msg", + "ready, but not logged in", + "sent user, waiting reply", + "user OK, sent password", + "cmd port open, no activity", + "command in progress", + "closing command connection", +}; + + + +/* FUNCTION: fc_state() + * + * PARAM1: ftpc * fc + * + * RETURNS: + */ + +int +fc_state(ftpc * fc) +{ + ns_printf(fc->pio,"state: %s, cmdstate: %d, mode:%s idle:%ld\n", + fc_statestr[fc->logstate-1], + fc->cmdstate, + fc->mode == FTPTYPE_ASCII?"ascii":"binary", + (ftp_ticks - fc->last_cmd)/TPS); + ns_printf(fc->pio,"server: %u.%u.%u.%u, data port:%d\n", + PUSH_IPADDR(fc->fhost), fc->dport ); + ns_printf(fc->pio,"Hashing: %s, passive: %s\n", + (fc->options & FCO_HASH)?"ON":"OFF", + (fc->options & FCO_PASV)?"enabled":"off"); + + /* printf what's left of the last command. We do this by starting + * with the second char, sice we may have nulled-out the first to + * invalidate the buffer. + */ + if(fc->cmdbuf[1]) /* don't bother if no text is set */ + ns_printf(fc->pio, "last msg: %s", &fc->cmdbuf[3]); + /* if command in progess, show speed */ + if(fc->logstate == 7) + fc_showspeed(fc); + return 0; +} +#endif /* NET_STATS */ + + + +/* FUNCTION: fc_pasv() + * + * fc_pasv(ftpc ftpconn) - Start attempt to set FTP command session + * to passive mode. This will cause the server to wait for client + * (that's us) to initiate data transfers. This is usefull if we are + * behind a firewall. Problems or results are reported via + * fc_printf(). + * + * PARAM1: ftpc * ftpconn + * + * RETURNS: Returns 0 if OK, else ENP_ error code. + */ + +int +fc_pasv(ftpc * ftpconn) +{ + int e; + + if ((e = fc_ready(ftpconn)) != 0) + return e; + + if (ftpconn->options & FCO_PASV) /* already passive? */ + return ENP_LOGIC; + + /* send PASV command to server */ + ftpconn->cmdstate = FCC_PASV; /* command state: sending pasv */ + FC_SETLOGSTATE(ftpconn,FCL_LOGGEDIN); /* login state: cmd in progress */ + +#ifdef INWORKS + !!!!!!!!! + + /* post-pasv operations */ + + ftpconn->options |= FCO_PASV; /* set connection bit */ + +#endif + + + return 0; +} + + +#ifdef OS_PREEMPTIVE +/* FUNCTION: ftpc_process_rcvd_msgs () + * + * It processes messages received from other tasks (such as console + * task, Telnet server task, and timer task). These messages provide + * configuration parameters, initiate (or terminate) FTP transfer + * requests, and provide periodic timeout notification. This function + * is invoked after the FTP client task returns from its wait for the + * FTP client semaphore. + * + * This function is only used in multitasking environments. + * + * INPUT: None. + * + * OUTPUT: None. + */ + +void ftpc_process_rcvd_msgs (void) +{ + struct ftpctask_msg * msgp; + + while (ftpcq.q_len > 0) + { + LOCK_NET_RESOURCE (FTPCQ_RESID); + msgp = getq (&ftpcq); + UNLOCK_NET_RESOURCE (FTPCQ_RESID); + + if (!msgp) + { + ++ftpc_err.empty_q; + return; + } + + switch (msgp->type) + { + case FTPC_CNTRL_TRANSFER_MODE: + { + u_long transfer_mode; + + ++ftpc_msg_stats.transfer_mode; + /* extract new transfer mode from rcvd message */ + transfer_mode = *((u_long *)(&(msgp->parms [0]))); + if (transfer_mode == FTPTYPE_ASCII) + ftpc_process_asc_mode ((void *) (msgp->pio)); + else + ftpc_process_bin_mode ((void *) (msgp->pio)); + break; + } + case FTPC_CNTRL_CD: + ++ftpc_msg_stats.cd; + ftpc_process_chdir (((void *) (msgp->pio)), (char *) &(msgp->parms [0])); + break; + case FTPC_CNTRL_QUIT_FTP_SESS: + ++ftpc_msg_stats.quit_sess; + ftpc_process_quit_sess ((void *) (msgp->pio)); + break; + case FTPC_CNTRL_VERBOSE: + ++ftpc_msg_stats.verbose; + ftpc_process_verbose ((void *) (msgp->pio)); + break; + case FTPC_CNTRL_PASV: + ++ftpc_err.not_implemented; + break; + case FTPC_CNTRL_START_SESS: + { + u_long domain; + char * userp; + char * passwdp; + + ++ftpc_msg_stats.start_sess; + domain = *((u_long *)((&(msgp->parms [0])) + 16)); + userp = (char *) (((&(msgp->parms [0])) + 16) + sizeof (domain)); + passwdp = userp + strlen (userp) + 1; + ftpc_process_open (((void *) (msgp->pio)), (&(msgp->parms [0])), domain, userp, passwdp); + break; + } + case FTPC_CNTRL_HASH_PRINT: + ++ftpc_msg_stats.hash_print; + ftpc_process_hash ((void *) (msgp->pio)); + break; + case FTPC_CNTRL_MOVE_FILE: + { + u_long transfer_type; + char * sfilep; + char * dfilep; + + ++ftpc_msg_stats.move_file; + transfer_type = *((u_long *)(&(msgp->parms [0]))); + sfilep = (char *) (&(msgp->parms [0]) + sizeof (transfer_type)); + dfilep = sfilep + strlen (sfilep) + 1; + ftpc_process_move (((void *) (msgp->pio)), transfer_type, sfilep, dfilep); + break; + } + case FTPC_CNTRL_PWD: + ++ftpc_msg_stats.pwd; + ftpc_process_pwd ((void *) (msgp->pio)); + break; + case FTPC_CNTRL_LIST: + ++ftpc_msg_stats.list; + ftpc_process_list ((void *) (msgp->pio)); + break; + case FPTC_CNTRL_PRINT_STATE: + ++ftpc_msg_stats.print_state; + ftpc_process_print_state ((void *) (msgp->pio)); + break; + case FTPC_CNTRL_LOG: + ++ftpc_err.not_implemented; + break; + case FTPC_CNTRL_PERIODIC_TIMER: + ++ftpc_msg_stats.periodic_timer; + fc_check (); + break; + default: + /* increment error counter */ + ++ftpc_err.bad_msgtype; + break; + } + + /* free the message structure */ + FTPC_FREE (msgp); + } +} +#endif /* OS_PREEMPTIVE */ + + +/* FUNCTION: ftpc_process_asc_mode () + * + * This function sets the file transfer type for an ongoing FTP session + * to ASCII. it is either invoked directly from the FTP menu functions + * that process user input (for SUPERLOOP-type systems), or from the + * message handler (ftpc_process_rcvd_msgs () (for multitasking + * environments)). + * + * INPUT: Pointer to generic IO structure where request originated. + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * or return code from fc_settype (). + */ + +int +ftpc_process_asc_mode(void * pio) +{ + struct ftpc * tmpcon; + int e; + + FC_MENULOG(); + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf(pio,"Open FTP session first\n"); + return -1; + } + + e = fc_settype (tmpcon, FTPTYPE_ASCII); + if (e) + ns_printf (pio,"ftp error %d setting type.\n", e); + + return e; +} + + +/* FUNCTION: ftpc_process_bin_mode () + * + * This function sets the file transfer type for an ongoing FTP session + * to image (binary). + * + * INPUT: Pointer to generic IO structure where request originated. + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * or return code from fc_settype (). + */ + +int +ftpc_process_bin_mode(void * pio) +{ + struct ftpc * tmpcon; + int e; + + FC_MENULOG(); + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf (pio,"Open FTP session first\n"); + return -1; + } + + e = fc_settype (tmpcon, FTPTYPE_IMAGE); + if (e) + ns_printf (pio,"ftp error %d setting type.\n", e); + + return e; +} + + +/* FUNCTION: ftpc_process_chdir () + * + * This function requests a change to a new working directory. + * + * INPUT: (1) Pointer to generic IO structure where request originated. + * (2) Name of new working directory + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * or return code from fc_chdir (). + */ + +int +ftpc_process_chdir(void * pio, char * dirstr) +{ + struct ftpc * tmpcon; + + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf (pio,"Open FTP session first\n"); + return -1; + } + + return (fc_chdir (tmpcon, dirstr)); +} + + +/* FUNCTION: ftpc_process_quit_sess () + * + * This function requests a termination of the FTP session. + * + * INPUT: Pointer to generic IO structure where request originated. + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * or return code from fc_quit (). + */ + +int +ftpc_process_quit_sess (void * pio) +{ + struct ftpc * tmpcon; + + FC_MENULOG(); + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf(pio,"Open FTP session first\n"); + return -1; + } + + return (fc_quit (tmpcon)); +} + + +/* FUNCTION: ftpc_process_verbose () + * + * This function sets the verbose flag for the FTP session. + * + * INPUT: Pointer to generic IO structure where request originated. + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * 0, otherwise. + */ + +int +ftpc_process_verbose(void * pio) +{ + struct ftpc * tmpcon; + + FC_MENULOG(); + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf(pio,"Open FTP session first\n"); + return -1; + } + + if (tmpcon->options & FCO_VERB) + tmpcon->options &= ~FCO_VERB; + else + tmpcon->options |= FCO_VERB; + + ns_printf(pio,"ftp verbose mode %s\n", + (tmpcon->options & FCO_VERB) ? "on":"off"); + + return 0; +} + + +/* FUNCTION: ftpc_process_open () + * + * This function opens a new session to the specified FTP server. + * + * INPUT: (1) Pointer to generic IO structure where request originated. + * (2) IP address (IPv4 or IPv6 address) + * (3) domain (AF_INET or AF_INET6) + * (4) username + * (5) password + * + * OUTPUT: -1, if fc_connect () returns 0; otherwise, 0. + */ + +int +ftpc_process_open(void * pio, u_char * srvp, u_long domain, char * user, char * passwd) +{ + /* make the connection; this will add a connection to the list + * starting from "ftp_clients" + */ + if (fc_connect (srvp, user, passwd, pio, domain) == NULL) + return -1; + else + return 0; +} + + +/* FUNCTION: ftpc_process_hash () + * + * This function sets the hash print flag for the FTP session. + * + * INPUT: Pointer to generic IO structure where request originated. + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * 0, otherwise. + */ + +int +ftpc_process_hash(void * pio) +{ + struct ftpc * tmpcon; + + FC_MENULOG(); + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf(pio,"Open FTP session first\n"); + return -1; + } + + if (tmpcon->options & FCO_HASH) + tmpcon->options &= ~FCO_HASH; + else + tmpcon->options |= FCO_HASH; + + ns_printf(pio,"FTP hash mark printing turned %s\n", + tmpcon->options & FCO_HASH?"on":"off"); + + return 0; +} + + +/* FUNCTION: ftpc_process_move () + * + * This function gets (or puts) a file from (or to) the FTP server. + * + * INPUT: (1) Pointer to generic IO structure where request originated. + * (2) Direction of transfer (e.g., FTPC_GET_TRANSFER, etc.) + * (3) source filename + * (4) destination filename + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * or, the return code from fc_get () or fc_put (). + */ + +int +ftpc_process_move(void * pio, int direction, char * sfile, char * dfile) +{ + struct ftpc * tmpcon; + + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf (pio,"Open FTP session first\n"); + return -1; + } + + if (direction == FTPC_GET_TRANSFER) + return (fc_get (tmpcon, sfile, dfile)); + else + return (fc_put (tmpcon, sfile, dfile)); +} + + +/* FUNCTION: ftpc_process_pwd () + * + * This function sends a request to obtain the current working directory. + * + * INPUT: Pointer to generic IO structure where request originated. + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * or, the return code from fc_pwd (). + */ + +int +ftpc_process_pwd (void * pio) +{ + struct ftpc * tmpcon; + + FC_MENULOG(); + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf(pio,"Open FTP session first\n"); + return -1; + } + + return (fc_pwd (ftp_get_con(pio))); +} + + +/* FUNCTION: ftpc_process_list () + * + * This function sends a request to obtain a listing of the current working + * directory. + * + * INPUT: Pointer to generic IO structure where request originated. + * + * OUTPUT: -1, if an FTP session doesn't exist for the originating console; + * or, the return code from fc_dir (). + */ + +int +ftpc_process_list (void * pio) +{ + struct ftpc * tmpcon; + + FC_MENULOG(); + if ((tmpcon = ftp_get_con (pio)) == NULL) + { + ns_printf(pio,"ftp command connection not open\n"); + return 1; + } + + return (fc_dir (tmpcon)); +} + + +/* FUNCTION: ftpc_process_print_state () + * + * This function prints state information associated with the current FTP + * session. + * + * INPUT: Pointer to generic IO structure where request originated. + * + * OUTPUT: 0. + */ + +int +ftpc_process_print_state (void * pio) +{ + struct ftpc * tmpcon ; + + if ((tmpcon = ftp_get_con(pio)) == NULL) + { + ns_printf(pio,"FTP client not open\n"); + } +/* + * Altera Niche Stack Nios port modification + * conditionally call fc_state; it may not be available + */ +#ifdef NET_STATS + else + { + fc_state(tmpcon); + } +#endif + +#ifdef FC_LOG + if (log_flag==TRUE) + { +#ifdef FC_LOGFILE + if (ftplog) + { + ns_printf(pio,"Logging to file is enabled\n"); + } + else +#endif /*FC_LOGFILE */ + ns_printf(pio,"Logging to STDIO is enabled\n"); + } + else + ns_printf(pio,"Logging is disabled\n"); + +#endif /* FC_LOG */ + + return 0; +} + +#endif /* FTP_CLIENT */ diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpclnt.h b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpclnt.h new file mode 100644 index 0000000..3cd4353 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpclnt.h @@ -0,0 +1,244 @@ +/* + * FILENAME: FTPCLNT.H + * + * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTP + * + * ROUTINES: + * + * PORTABLE: yes + */ + +/* ftpclnt.h Definitions for generic FTP client. + * 1/12/97 - Created. John Bartas + */ +#ifndef FTPCLNT_H +#define FTPCLNT_H + +/* Define the options enabled for FTP Client */ +#define FC_USECALLBACK 1 /* Call callbacks when FTPClient changes state */ +#define FC_LOG 1 /* Log FTP output to stdio/file */ + +#ifdef NOTDEF /* List of options disabled */ +#endif /* NOTDEF */ + +#ifdef SUPERLOOP +#define SignalFtpClient() /* define to nothing */ +#endif + +/* Define the structure used for each FTP connection */ +typedef struct ftpc +{ + struct ftpc * next; /* list link */ + int logstate; /* loggin (FCL_) state */ + int cmdstate; /* command (FCC_) state */ + int mode; /* FTPTYPE_ASCII or FTPTYPE_IMAGE */ + int newmode; /* mode to set if TYPE cmd succeeds */ + int in_use; /* reentry flag */ + int domain; /* AF_INET or AF_INET6 */ + ip_addr fhost; /* host, if connected (in net endian) */ +#ifdef IP_V6 + ip6_addr ip6_fhost; /* V6 host, if connected */ +#endif /* IP_V4 */ + unsigned options; /* hash, pasv, etc */ + unshort dport; /* data port */ + SOCKTYPE cmd_sock; /* command socket descriptor */ + SOCKTYPE data_sock; /* data socket descriptor */ + char username[FTPMAXUSERNAME]; /* name of connection user for login */ + char password[FTPMAXUSERPASS]; /* password for login */ + char ffilename[FTPMAXPATH+FTPMAXFILE]; /* name for foriegn file */ + char cmdbuf[CMDBUFSIZE]; /* command buffer */ + char databuf[FILEBUFSIZE]; /* buffer for FTP data */ + VFILE * fp; /* file in progress */ + unsigned datact; /* unprocessed data in databuf */ + unsigned offset; /* offset to data in databuf */ + ulong datadone; /* data already moved in current transfer */ + ulong filesize; /* file size of send/receive file */ + ulong last_cmd; /* time of last cmdstate change */ + ulong last_data; /* time of last data transfer activity */ + void * pio; /* To support Generic I/O for client */ +} ftpc; + +extern ftpc * ftp_clients; /* support multiple client links */ + +extern unsigned marksize; /* units for hash marking */ + +/* bits for ftpc options field: */ +#define FCO_HASH 0x0001 /* hash mark printing */ +#define FCO_PASV 0x0002 /* in passive mode */ +#define FCO_VERB 0x0004 /* verbose mode */ + +/* ftp client loggin states; If any change is done, also update fc_str[]. */ +#define FCL_CONNECTING 1 /* started connect */ +#define FCL_CONNECTED 2 /* connected but no "220 ready" msg */ +#define FCL_READY 3 /* ready, but not logged in */ +#define FCL_SENTUSER 4 /* sent user, waiting reply */ +#define FCL_SENTPASS 5 /* user OK, sent password */ +#define FCL_LOGGEDIN 6 /* cmd port open, no activity */ +#define FCL_PENDING 7 /* command in progress (see FCC_* codes) */ +#define FCL_CLOSING 8 /* closing command connection */ + +/* ftp client command states; grouped by command type + If any change is done, also update fc_str[]. */ +#define FCC_RECVPORT 10 /* sent port command, awaiting reply */ +#define FCC_RECVOK 11 /* sent RETR command, awaiting reply */ +#define FCC_RECVCONN 12 /* connecting for file receive */ +#define FCC_RECEIVING 13 /* file receive in progress */ +#define FCC_RECVDONE 14 /* done with RETR, awaiting final msg */ + +#define FCC_SENDPORT 20 /* sent port command, awaiting reply */ +#define FCC_SENDOK 21 /* sent STOR command, awaiting reply */ +#define FCC_SENDCONN 22 /* connecting for file send */ +#define FCC_SENDING 23 /* data file send in progress */ +#define FCC_SENDDONE 24 /* done with STOR, awaiting final msg */ + +#define FCC_NLSTPORT 30 /* sent port for NLST command */ +#define FCC_NLSTOK 31 /* sent NLST for NLST command */ +#define FCC_NLSTCONN 32 /* waiting for connect on data port */ +#define FCC_NLSTING 33 /* waiting for connect on data port */ +#define FCC_NLSTDONE 34 /* done with NLST, awaiting final msg */ + + +/* the non-data port commands: */ + +#define FCC_CWD 70 /* sent cwd command, awaiting reply */ +#define FCC_PWD 80 /* sent pwd command, awaiting reply */ +#define FCC_TYPE 90 /* sent TYPE command, awaiting reply */ +#define FCC_PASV 100 /* sent PASV, awaiting reply */ +#define FCC_QUIT 110 /* sent QUIT, awaiting reply (before closing) */ + +/* Map ftp memory alloc/free routines */ +#define FTPC_ALLOC(size) (ftpc*)npalloc(size) +#define FTPC_FREE(buf) npfree(buf) + + +/* ftp client extern entry points. The commands (all but fc_check) + * initiate the transactions and return without blocking. The system + * or caller must regularly call fc_check() to drive the transaction. + * Completion is detected by checking fc_logstate. + */ +ftpc * fc_connect(void * fhost, char * user, char * passwd,void * pio, int domain); +int fc_put(ftpc * fc, char * fname, char * lname); +int fc_get(ftpc * fc, char * fname, char * lname); +int fc_chdir(ftpc * ftpconn, char * dirparm); +int fc_pwd(ftpc * ftpconn); +int fc_dir(ftpc * ftpconn); +int fc_settype(ftpc * ftpconn, int type); +int fc_state(ftpc * ftpconn); +int fc_pasv(ftpc * ftpconn); +int fc_quit(ftpc * ftpconn); + +int fc_check(void); /* ftp client "task" entry point */ + +/* log_printf is used in ftpclnt.c and ftpcprn.c */ +#ifdef FC_LOG +#include "in_utils.h" /* for GEN_IO */ +extern GEN_IO ftplog; /* ftplog is "ptr to IO device" */ +#define log_printf ns_printf /* Use genericIO to send log to stdio/file */ +extern int log_flag; /* to dynamically enable/disable logging */ +#define FC_LOGFILE 1 /* log to file */ + +#else +#define log_printf ; /* Do nothing */ +#endif /* FC_LOG */ + +/* The user application can set a callback via fc_callback to receive + * information when the logstate or cmdstate changes. Sometimes, the + * callback might just be interested in the states, if it is using + * only one FTP connection. In that case, it need not know about + * ftpc. Hence the first argument is a "void instead of "ftpc If the + * callback needs information about ftp connection, it can cast fc to + * "ftpc *" + */ +#ifdef FC_USECALLBACK +extern void (*fc_callback)(void * fc, int logstate, int cmdstate); +#endif + +/* types of messages sent to FTP client task from the console task, + * Telnet server task, or timer tick task. These messages are + * deposited into the 'ftpcq' queue, and provide configuration + * parameters, initiate (or terminate) FTP transfer requests, and + * provide periodic timeout notification. + */ +#define FTPC_CNTRL_TRANSFER_MODE 0x0 /* ascii or binary */ +#define FTPC_CNTRL_CD 0x1 +#define FTPC_CNTRL_QUIT_FTP_SESS 0x2 +#define FTPC_CNTRL_VERBOSE 0x3 +#define FTPC_CNTRL_PASV 0x4 +#define FTPC_CNTRL_START_SESS 0x5 +#define FTPC_CNTRL_HASH_PRINT 0x6 +#define FTPC_CNTRL_MOVE_FILE 0x7 /* get or put */ +#define FTPC_CNTRL_PWD 0x8 +#define FTPC_CNTRL_LIST 0x9 +#define FPTC_CNTRL_PRINT_STATE 0xA +#define FTPC_CNTRL_LOG 0xB +#define FTPC_CNTRL_PERIODIC_TIMER 0xC + +#define FTPC_NUM_MSGS 0xD + +/* type of FTP transfer requested from client: GET or PUT */ +#define FTPC_GET_TRANSFER 0x1 +#define FTPC_PUT_TRANSFER 0x2 + +/* base structure for all messages sent to FTP client task */ +struct ftpctask_msg +{ + struct ftpctask_msg * next; + u_long type; + u_long pio; + u_char parms [1]; +}; + +/* statistics on errors encountered by the FTP client task */ +struct ftpc_err +{ + u_long alloc_fail; + u_long empty_q; + u_long not_implemented; + u_long bad_msgtype; +}; + +/* statistics on the types of messages received by the FTP client task */ +struct ftpc_msg_stats +{ + u_long transfer_mode; + u_long cd; + u_long quit_sess; + u_long verbose; + u_long start_sess; + u_long hash_print; + u_long move_file; + u_long pwd; + u_long list; + u_long print_state; + u_long periodic_timer; +}; + +/* FTP client task message queue (contains messages from other tasks) */ +extern struct queue ftpcq; +/* data structure to keep track of number of various types of messages + * received by the FTP client task. + */ +extern struct ftpc_msg_stats ftpc_msg_stats; +/* data structure to keep track of errors encountered by the FTP client + * task during its operation. + */ +extern struct ftpc_err ftpc_err; + +void ftpc_process_rcvd_msgs (void); +int ftpc_process_asc_mode(void * pio); +int ftpc_process_bin_mode(void * pio); +int ftpc_process_chdir(void * pio, char * dirstr); +int ftpc_process_quit_sess (void * pio); +int ftpc_process_verbose(void * pio); +int ftpc_process_open(void * pio, u_char * srvp, u_long domain, char * user, char * passwd); +int ftpc_process_hash (void * pio); +int ftpc_process_move (void * pio, int direction, char * sfile, char * dfile); +int ftpc_process_pwd (void * pio); +int ftpc_process_list (void * pio); +int ftpc_process_print_state (void * pio); + +#endif /* FTPCLNT_H */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpcport.c b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpcport.c new file mode 100644 index 0000000..1d069f0 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpcport.c @@ -0,0 +1,205 @@ +/* + * FILENAME: ftpcport.c + * + * Copyright 2002 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTP Client + * + * ROUTINES: ftpc_nvset(), prep_ftpc(), tk_ftpclnt() + * + * PORTABLE: NO + */ + +#include "ftpport.h" /* TCP/IP, sockets, system info */ + +#ifdef FTP_CLIENT + +#include "ftpsrv.h" +#include "ftpclnt.h" + +#ifndef SUPERLOOP +#ifndef OSPORT_H +#error Need to define OSPORT_H +#endif +#include OSPORT_H +#endif /* SUPERLOOP */ + +#ifdef INCLUDE_NVPARMS +#include "nvparms.h" +#endif /* INCLUDE_NVPARMS */ + +#ifdef IN_MENUS +#include "menu.h" +#endif /* IN_MENUS */ + +#ifdef IN_MENUS +extern struct menu_op ftpmenu[]; +#endif /* IN_MENUS */ + +#ifdef INCLUDE_NVPARMS +/* Please see nvparms.h and nvparms.c regarding the usage of + * the following datatypes and functions. + */ + +int ftpc_nvset(NV_FILE * fp); + +struct ftpc_nvparam ftpc_nvparms; + +struct nvparm_info ftpc_nvformats[] = +{ + {"ftpc reply timout: %u\n" , NVINT, NVBND_NOOP, \ + &ftpc_nvparms.fc_replytmo , NULL, }, + {"ftpc activity timout: %u\n", NVINT, NVBND_NOOP, \ + &ftpc_nvparms.fc_activity_tmo, NULL, }, +}; + +#define NUMFTPC_FORMATS \ + (sizeof(ftpc_nvformats)/sizeof(struct nvparm_info)) + +#endif /* INCLUDE_NVPARMS */ + +#ifdef INCLUDE_NVPARMS + +/* FUNCTION: ftpc_nvset() + * + * PARAM1: NV_FILE * fp + * + * RETURNS: Silent return of 0 for OK + */ +int ftpc_nvset(NV_FILE * fp) +{ +int i = 0; + + nv_fprintf(fp, ftpc_nvformats[i++].pattern, ftpc_nvparms.fc_replytmo); + nv_fprintf(fp, ftpc_nvformats[i++].pattern, ftpc_nvparms.fc_activity_tmo); + return 0; +} + +struct nvparm_format ftpc_format = +{ + NUMFTPC_FORMATS, + &ftpc_nvformats[0], + ftpc_nvset, + NULL +}; + +#endif /* INCLUDE_NVPARMS */ + + +/* FUNCTION: prep_ftpc() + * + * PARAMS: NONE + * + * RETURNS: Error Code or 0 for OK + */ +int prep_ftpc(void) +{ +int e = 0; +#ifdef IN_MENUS + /* install the FTP Client commands */ + e = install_menu(&ftpmenu[0]); +#endif /* IN_MENUS */ + +#ifdef INCLUDE_NVPARMS + e = install_nvformat(&ftpc_format, nv_formats); + if(e) + { + dprintf("unable to install FTPClient NVPARMS reconfigure nv_formats[]\n"); + dtrap(); + } +#endif /* INCLUDE_NVPARMS */ + return e; +} + + +#ifndef SUPERLOOP + +#ifdef FTP_CLIENT +TK_OBJECT(to_ftpclnt); +TK_ENTRY(tk_ftpclnt); +long ftpclnt_wakes = 0; +#endif + +/* + * Altera Niche Stack Nios port modification: + * Use task priority and stack size values from ipport.h + */ +#ifdef FTP_CLIENT +struct inet_taskinfo ftpctask = { + &to_ftpclnt, + "FTP client", + tk_ftpclnt, + TK_FTPCLNT_TPRIO, + TK_FTPCLNT_SSIZE, +}; +#endif + +/* The FTP client task waits for the FTP semaphore to be signaled. + * The semaphore is signaled by other tasks such as console task, Telnet + * server task, and timer task after they have deposited a message into + * the FTP client task's message queue. These messages provide + * configuration parameters, initiate (or terminate) FTP transfer requests, + * and provide periodic timeout notification. The latter is currently + * where the bulk of the work (wrt transfers) is done. + */ + +/* FUNCTION: tk_ftpclnt() + * + * PARAM1: n/a + * + * RETURNS: n/a + */ + +#ifdef FTP_CLIENT + +TK_ENTRY(tk_ftpclnt) +{ + while (!iniche_net_ready) + TK_SLEEP(1); + +#ifndef OS_PREEMPTIVE + for (;;) + { + int work; + + work = fc_check(); /* Let client spin, get level of load */ + switch(work) /* base task action on work level */ + { + case 2: + tk_yield(); /* quick give up of CPU in case it didn't block */ + break; + case 1: + TK_SLEEP(1); /* pass a time tick before checking again */ + break; + case 0: + TK_BLOCK(); /* all done, go back to sleep */ + break; + default: + dtrap(); /* bad return value */ + break; + } + ftpclnt_wakes++; /* count wakeups */ + if (net_system_exit) + break; + } +#else + for (;;) + { + wait_app_sem (FTPC_SEMID); + ftpclnt_wakes++; /* count wakeups */ + ftpc_process_rcvd_msgs (); /* process messages received from other tasks */ + if (net_system_exit) + break; + } +#endif + + TK_RETURN_OK(); +} + +#endif /* FTP_CLIENT */ + +#endif /* SUPERLOOP */ + +#endif /* FTP_CLIENT */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpcprn.c b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpcprn.c new file mode 100644 index 0000000..7109294 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpcprn.c @@ -0,0 +1,137 @@ +/* + * FILENAME: ftpcprn.c + * + * Copyright 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTP + * + * ROUTINES: fc_printf(), + * + * PORTABLE: yes + */ + +/* The FTP client's message handler for this port. This is off by + * itself without it's prototype included to please the incredibly + * fussy Borland compiler again.... + */ +#include "ftpport.h" /* TCP/IP, sockets, system info */ + +#ifdef FTP_CLIENT + +#include "ftpsrv.h" +#include "ftpclnt.h" + +struct ftpc; +extern struct ftpc * ftp_clients; /* support multiple client links */ +extern char * prompt; + + +/* The member in_use of a FTP connection is turned ON when fc_printf() is + * being done. FTP Client, unlike FTP Server has different entry points. + * For example, + * - When the user enters FTP commands from the command line, the FTP client + * code gets executed. + * - fc_check() is called periodically to process FTP client connections. + * Consider the following scenario. + * 1. The user executes PUT command, and the FTP client code + * initiating the PUT uses fc_printf() immediately after sending the + * PORT command using fc->cmdbuf. It would then check whether the command + * was properly sent or not. + * 2. Now before this check can be done, fc_printf() calls tk_yield(), which + * would call fc_check(). fc_check() would execute and do network I/O for + * this connection and update the fc->cmdbuf based on the response for + * PORT command. + * 3. Now after fc_printf() is done, the check for PORT command would fail + * because the fc->cmdbuf is modified. + * + * On a multitasking system, FTP client would be more susceptible to + * these kind of problems. Hence a provision is provided wherein fc_check() + * doesn't execute when fc_printf() is being done. +*/ + + + +/* FUNCTION: fc_printf() + * + * fc_printf() - per-port function to handle messages from the FTP + * client library. The messages may be sent to a console if your + * system has one, logged, or just punted. For DOS demo .exe, we + * print to screen and restore the user prompt. + * + * PARAM1: struct ftpc * fc + * PARAM2: char * format + * PARAM3: long p1 + * PARAM4: long p2 + * PARAM5: long p3 + * PARAM6: long p4 + * PARAM7: long p5 + * + * RETURNS: + */ + +#ifdef PRINTF_STDARG +/* different fc_printf() functions depending on VA support */ + +void +fc_printf(struct ftpc * fc, char * format, ...) +{ + va_list a; + char linebuf[FTPMAXPATH]; + +#else /* the non-STDARG version */ + +void +fc_printf(struct ftpc * fc, char * format, + long p1, long p2, long p3, long p4, long p5) +{ +#endif /* PRINTF_STDARG */ + + char * cp; + void * pio=NULL; + + /* make sure caller passed our sole supported fc. note: fc may be NULL + * during fc_connect() call - this is OK. + */ + if (fc != NULL ) + { + pio=(void *)fc->pio; + /* set re-entry flag. So that fc_check() doesn't process this + * connection. If fc_check()->...->fc_printf() is called, then + * in_use is already set, and the increment/decrement + * below is harmless. + */ + fc->in_use++; + } + + +#ifdef PRINTF_STDARG + va_start(a,format); + vsprintf(linebuf,format,a); + va_end(a); + ns_printf(pio,linebuf); +#else /* the non-STDARG version */ + ns_printf(pio,format, p1, p2, p3, p4, p5); +#endif /* PRINTF_STDARG */ + +#ifdef FC_LOG + /* If logging is enabled, log it. Don't log to stdio. + */ + if ((log_flag == TRUE) && (ftplog!=NULL) ) +#ifdef PRINTF_STDARG + log_printf(ftplog,linebuf); +#else /* the non-STDARG version */ + log_printf(ftplog,format, p1, p2, p3, p4, p5); +#endif /* PRINTF_STDARG */ +#endif + + /* see if we should regenerate prompt */ + cp = (format + (strlen(format)-1)); + if (*cp == '\n' || *cp == '\r') /* look for newline */ + ns_printf(pio,prompt); + + if(fc) + fc->in_use--; /* clear re-entry flag */ +} + +#endif /* FTP_CLIENT */ diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpmenu.c b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpmenu.c new file mode 100644 index 0000000..df8a25d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpmenu.c @@ -0,0 +1,971 @@ +/* + * FILENAME: ftpmenu.c + * + * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTPCLIENT + * + * ROUTINES: ftp_get_con(), ftp_open(), ftp_get(), ftp_put(), + * ROUTINES: ftp_move(), ftp_asc_mode(), ftp_bin_mode(), ftp_hash(), + * ROUTINES: ftp_pwd(), ftp_chdir(), ftp_verbose(), ftp_quit(), + * ROUTINES: ftp_list(), ftp_state(), ftp_pasv(), fc_file_out(), ftp_log(), + * + * PORTABLE: yes + */ + +/* ftpmenu.c DOS demo menu hooks for FTP client. This is the + * non-portable portion of the FTP client for the DOS demo package. + * 1/12/97 - Created. John Bartas + * 1/4/99 - Edited menu text -MPG- + */ + +#include "ftpport.h" /* TCP/IP, sockets, system info */ + +#ifdef FTP_CLIENT + +#include "ftpsrv.h" +#include "ftpclnt.h" + +#include "menu.h" + +/* The FTP client's per-port message handler */ +extern void fc_printf(ftpc *, char *, ...); /* per-port response printer */ + +int ftp_open (void * pio); +int ftp_move (void * pio, int direction); +int ftp_get (void * pio); +int ftp_put (void * pio); +int ftp_asc_mode(void * pio); +int ftp_bin_mode(void * pio); +int ftp_hash (void * pio); +int ftp_pwd (void * pio); +int ftp_list (void * pio); +int ftp_chdir (void * pio); +int ftp_verbose (void * pio); +int ftp_state (void * pio); +int ftp_pasv (void * pio); +int ftp_quit (void * pio); +int ftp_log (void * pio); + +/* + * Altera Niche Stack Nios port modification: + * Add braces to remove build warning + */ +struct menu_op ftpmenu[] = { + { "ftpc", stooges, "FTP client menu" }, + { "ascii", ftp_asc_mode,"use ASCII transfer mode" }, + { "binary",ftp_bin_mode,"use Binary transfer mode" }, + { "cd", ftp_chdir, "change server's directory" }, + { "fquit", ftp_quit, "quit FTP session" }, + { "fverb", ftp_verbose, "toggle verbose mode" }, + { "fpasv", ftp_pasv, "set server to passive mode" }, + { "ftp", ftp_open, "open an FTP connection" }, + { "hash", ftp_hash, "toggle hash mark printing" }, + { "get", ftp_get, "GET a file" }, + { "put", ftp_put, "PUT a file" }, + { "pwd", ftp_pwd, "print working directory" }, + { "ls", ftp_list, "list files in server directory" }, +#ifdef NET_STATS + { "fstate",ftp_state, "display FTP client state" }, +#endif +#ifdef FC_LOG + { "flog", ftp_log, "enable/disable logging" }, +#endif + { NULL }, +}; + +#ifdef FC_LOG +#define FC_MENULOG() { \ + if ((log_flag==TRUE) && (ftplog!=NULL)) \ + log_printf(ftplog,"%s%s\n", \ + prompt,((GEN_IO)pio)->inbuf); \ + } +#else +#define FC_MENULOG() ; +#endif /* FC_LOG */ + +static char * ousage = "usage: ftp host username [password]\n"; +extern char * prompt; /* system menu prompt */ + +/* functions that are used to send messages to the FTP client task */ +int ftpc_send_msg1 (u_long type, u_long pio); + +int ftpc_send_msg2 (u_long type, u_long pio, u_char * argp, u_long arglen); + +int ftpc_send_msg4 (u_long type, + u_long pio, + u_char * arg1p, + u_long arg1len, + u_char * arg2p, + u_long arg2len, + u_char * arg3p, + u_long arg3len); + +int ftpc_send_msg5 (u_long type, + u_long pio, + u_char * arg1p, /* address */ + u_long arg1len, + u_char * arg2p, /* domain */ + u_long arg2len, + u_char * arg3p, /* username */ + u_long arg3len, + u_char * arg4p, /* password */ + u_long arg4len); + + +/* FUNCTION: ftp_get_con() + * + * ftp_get_con() - Get the FTP connection for the particular pio + * + * PARAM1: void * pio + * + * RETURNS: Return NULL if a corresponding connection is not found. + */ + +struct ftpc * +ftp_get_con(void * pio) +{ + struct ftpc * tmpcon = NULL ; + + tmpcon = ftp_clients ; + while ( tmpcon ) + { + if (tmpcon->pio == pio ) + { + return tmpcon; + } + else + tmpcon=tmpcon->next ; + } + + /* We couldn't find a connection which uses pio */ + + return NULL ; +} + + +/* FUNCTION: ftp_open() + * + * ftp_open() - Menu system function to open a new connection for FTP + * commands. If a connection is already open, this function returns an + * error to its caller. get host, user, password info from menu system's + * command buffer. + * + * In multitasking environments, this function sends a message (with the + * various parameters from the user's request) to the FTP client task. + * In SUPERLOOP mode, it just directly invokes the function that uses + * the parameters provided to initiate a connection. + * + * PARAM1: void * pio + * + * RETURNS: -1 if an error occured; 0, if it initiated the opening of + * a session. + */ + +int +ftp_open(void * pio) +{ + char * hostname=NULL; + char * user; + char * passwd; + char * msg; + u_long domain; /* AF_INET or AF_INET6 */ + u_char server[16]; /* dual mode IP address */ + u_long x; + + GEN_IO io= (GEN_IO) pio ; + + FC_MENULOG(); + /* extract args from command buffer */ + if ( io != NULL ) + hostname = nextarg(io->inbuf); + if (*hostname == 0) + { + ns_printf(pio,ousage); + return -1; + } + user = nextarg(hostname); + *(user-1) = 0; /* null terminate hostname */ + if (*user == 0) + { + ns_printf(pio,ousage); + return -1; + } + passwd = nextarg(user); + if (*passwd != 0) /* if passwrod was specd... */ + *(passwd-1) = 0; /* ...null terminate user */ + + + +#ifdef IP_V6 + /* Code for both dual-mode and IP_V6 only: + * If there are colons in the host name, then assume + * it's IPv6, else set domain for IP_V4 + */ + if(strchr(hostname, ':')) + domain = AF_INET6; + else + domain = AF_INET; + + if(inet_pton(domain, hostname, &server) !=0) + msg = pton_error; + else + msg = NULL; +#else /* IP_V4 only */ + { + unsigned int my_bits; /* tmp, for subnet bits */ + msg = parse_ipad((ip_addr*)&server, &my_bits, hostname); + domain = AF_INET; + } +#endif /* IP_V4 */ + + if (msg) + { + ns_printf(pio,"FTP host address error: %s\n", msg); + return -1; + } + + /* Supports only one client connection for each PIO */ + if ( ftp_get_con(pio) != NULL ) + { + ns_printf(pio,"ftp session already open\n"); + return -1; + } + + x = strlen (passwd) + 1; + +#ifdef OS_PREEMPTIVE + ftpc_send_msg5 (FTPC_CNTRL_START_SESS, + (u_long) pio, + server, + sizeof (server), + (u_char *) &domain, + sizeof (domain), + (u_char *) user, + (strlen (user) + 1), + (u_char *) passwd, + (strlen (passwd) + 1)); +#else + ftpc_process_open (pio, server, domain, user, passwd); +#endif + + return 0; +} + + +/* FUNCTION: ftp_get() + * + * PARAM1: void * pio + * + * RETURNS: + */ + +int +ftp_get(void * pio) +{ + FC_MENULOG(); + return ftp_move(pio,1); +} + + +/* FUNCTION: ftp_put() + * + * PARAM1: void * pio + * + * RETURNS: + */ + +int +ftp_put(void * pio) +{ + FC_MENULOG(); + return ftp_move(pio,0); +} + + +/* FUNCTION: ftp_move() + * + * ftp_move() - menu routine to start a file mvoe operation. Passed + * flag tells us put(0) or get(1). + * + * In multitasking environments, this function sends a message (with the + * various parameters from the user's request) to the FTP client task. + * In SUPERLOOP mode, it just directly invokes the function that uses + * the parameters provided to start the move. + * + * PARAM1: void * pio + * PARAM2: int direction + * + * RETURNS: -1 if an error occured; 0, if it initiated the move request. + */ + +int +ftp_move(void * pio, int direction) +{ + char * sfile=NULL; /* name of source file to put/get */ + char * dfile; /* optional name */ + GEN_IO io= (GEN_IO) pio ; + unsigned long int transfer_type; + + if ( ftp_get_con(pio) == NULL ) + { + ns_printf(pio,"Open FTP session first\n"); + return -1; + } + + /* extract args from command buffer */ + if ( io != NULL ) + sfile = nextarg(io->inbuf); /* name of source file */ + if (!sfile || !*sfile) + { + ns_printf(pio,"usage: ftp put|get filename [destname]\n"); + return -1; + } + dfile = nextarg(sfile); + if (dfile && *dfile) /* optional dest name given? */ + *(dfile-1) = 0; /* null terminate source file name */ + else + dfile = sfile; /* use foreign name for both */ + + if (direction) transfer_type = FTPC_GET_TRANSFER; + else transfer_type = FTPC_PUT_TRANSFER; + +#ifdef OS_PREEMPTIVE + ftpc_send_msg4 (FTPC_CNTRL_MOVE_FILE, + (u_long) pio, + (u_char *) &transfer_type, + sizeof (transfer_type), + (u_char *) sfile, + (strlen (sfile) + 1), + (u_char *) dfile, + (strlen (dfile) + 1)); +#else + ftpc_process_move (pio, transfer_type, sfile, dfile); +#endif + + return 0; +} + + +/* FUNCTION: ftp_asc_mode() + * + * In multitasking environments, this function sends a message (with the + * filetype configuration (ASCII) from the user's request) to the FTP + * client task. In SUPERLOOP mode, it just directly invokes the function + * that sets up the type of the transfer. + * + * PARAM1: void * pio + * + * RETURNS: Return code from ftpc_send_msg2 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_asc_mode () for SUPERLOOP + * environments. + */ + +int +ftp_asc_mode(void * pio) +{ +#ifdef OS_PREEMPTIVE + unsigned long int transfer_mode = FTPTYPE_ASCII; + + return (ftpc_send_msg2 (FTPC_CNTRL_TRANSFER_MODE, (u_long) pio, + (u_char *) &transfer_mode, sizeof (transfer_mode))); +#else + return (ftpc_process_asc_mode (pio)); +#endif +} + + +/* FUNCTION: ftp_bin_mode() + * + * In multitasking environments, this function sends a message (with the + * filetype configuration (image) from the user's request) to the FTP + * client task. In SUPERLOOP mode, it just directly invokes the function + * that sets up the type of the transfer. + * + * PARAM1: void * pio + * + * RETURNS: Return code from ftpc_send_msg2 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_asc_mode () for SUPERLOOP + * environments. + */ + +int +ftp_bin_mode(void * pio) +{ +#ifdef OS_PREEMPTIVE + unsigned long int transfer_mode = FTPTYPE_IMAGE; + + return (ftpc_send_msg2 (FTPC_CNTRL_TRANSFER_MODE, (u_long) pio, + (u_char *) &transfer_mode, sizeof (transfer_mode))); +#else + return (ftpc_process_bin_mode (pio)); +#endif +} + + +/* FUNCTION: ftp_hash() + * + * In multitasking environments, this function sends a message (requesting + * that hashes be printed to display the progress of an ongoing file transfer) + * to the FTP client task. In SUPERLOOP mode, it just directly invokes the + * function that provides the same request to the FTP client. + * + * PARAM1: void * pio + * + * RETURNS: Return code from ftpc_send_msg1 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_hash () for SUPERLOOP + * environments. + */ + +int +ftp_hash(void * pio) +{ +#ifdef OS_PREEMPTIVE + return (ftpc_send_msg1 (FTPC_CNTRL_HASH_PRINT, (u_long) pio)); +#else + return (ftpc_process_hash (pio)); +#endif +} + + +/* FUNCTION: ftp_pwd() + * + * In multitasking environments, this function sends a message (requesting + * the name of the current working directory at the server where the client + * is logged in) to the FTP client task. In SUPERLOOP mode, it just directly + * invokes the function that provides the same request to the FTP client. + * + * PARAM1: void * pio + * + * RETURNS: Return code from ftpc_send_msg1 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_pwd () for SUPERLOOP + * environments. + */ + +int +ftp_pwd(void * pio) +{ +#ifdef OS_PREEMPTIVE + return (ftpc_send_msg1 (FTPC_CNTRL_PWD, (u_long) pio)); +#else + return (ftpc_process_pwd (pio)); +#endif +} + + +/* FUNCTION: ftp_chdir() + * + * In multitasking environments, this function sends a message (requesting + * a change of the current working directory at the server where the client + * is logged in) to the FTP client task. In SUPERLOOP mode, it just directly + * invokes the function that provides the same request to the FTP client. + * + * PARAM1: void * pio + * + * RETURNS: -1 if a path to 'cd' to is not provided; otherwise, the return + * code from ftpc_send_msg2 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_chdir () for SUPERLOOP + * environments. + */ + +int +ftp_chdir(void * pio) +{ + char * cparm=NULL; + GEN_IO io= (GEN_IO) pio ; + + FC_MENULOG(); + if ( io != NULL ) + cparm = nextarg(io->inbuf); + if (!cparm || !*cparm) + { + ns_printf(pio,"please specify path arg\n"); + return -1; + } + +#ifdef OS_PREEMPTIVE + return (ftpc_send_msg2 (FTPC_CNTRL_CD, (u_long) pio, (u_char *) cparm, strlen (cparm) + 1)); +#else + return (ftpc_process_chdir (pio, cparm)); +#endif +} + + +/* FUNCTION: ftp_verbose() + * + * In multitasking environments, this function sends a message (requesting + * that the client be verbose when displaying the state of an ongoing + * transaction) to the FTP client task. In SUPERLOOP mode, it just directly + * invokes the function that provides the same request to the FTP client. + * + * PARAM1: void * pio + * + * RETURNS: Return code from ftpc_send_msg1 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_verbose () for SUPERLOOP + * environments. + */ + +int +ftp_verbose(void * pio) +{ +#ifdef OS_PREEMPTIVE + return (ftpc_send_msg1 (FTPC_CNTRL_VERBOSE, (u_long) pio)); +#else + return (ftpc_process_verbose (pio)); +#endif +} + + +/* FUNCTION: ftp_quit() + * + * In multitasking environments, this function sends a message (requesting + * the termination of an ongoing FTP session) to the FTP client task. In + * SUPERLOOP mode, it just directly invokes the function that provides the + * same request to the FTP client. + * + * PARAM1: void * pio + * + * RETURNS: Return code from ftpc_send_msg1 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_quit_sess () for SUPERLOOP + * environments. + */ + +int +ftp_quit(void * pio) +{ +#ifdef OS_PREEMPTIVE + return (ftpc_send_msg1 (FTPC_CNTRL_QUIT_FTP_SESS, (u_long) pio)); +#else + return (ftpc_process_quit_sess (pio)); +#endif +} + + +/* FUNCTION: ftp_list() + * + * In multitasking environments, this function sends a message (requesting + * a listing of the files in the current working directory at the server + * where the client is logged in) to the FTP client task. In SUPERLOOP + * mode, it just directly invokes the function that provides the same + * request to the FTP client. + * + * PARAM1: void * pio + * + * RETURNS: Return code from ftpc_send_msg1 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_list () for SUPERLOOP + * environments. + */ + +int +ftp_list(void * pio) +{ +#ifdef OS_PREEMPTIVE + return (ftpc_send_msg1 (FTPC_CNTRL_LIST, (u_long) pio)); +#else + return (ftpc_process_list (pio)); +#endif +} + +#ifdef NET_STATS + + +/* FUNCTION: ftp_state() + * + * In multitasking environments, this function sends a message (requesting + * a display of the latest status of the currently open FTP session (if any)) + * to the FTP client task. In SUPERLOOP mode, it just directly invokes the + * function that provides the same request to the FTP client. + * + * PARAM1: void * pio + * + * RETURNS: Return code from ftpc_send_msg1 () for non-SUPERLOOP environments, + * or the return code from ftpc_process_print_state () for SUPERLOOP + * environments. + */ + +int +ftp_state(void * pio) +{ +#ifdef OS_PREEMPTIVE + return (ftpc_send_msg1 (FPTC_CNTRL_PRINT_STATE, (u_long) pio)); +#else + return (ftpc_process_print_state (pio)); +#endif +} +#endif /* NET_STATS */ + + + +/* FUNCTION: ftp_pasv() + * + * PARAM1: void * pio + * + * RETURNS: + */ + +int +ftp_pasv(void * pio) +{ + int e; + struct ftpc * tmpcon ; + + FC_MENULOG(); + if ( (tmpcon=ftp_get_con(pio)) == NULL ) + { + ns_printf(pio,"FTP client not open\n"); + return 0; + } + + e = fc_pasv(tmpcon); + return e; +} + +#ifdef FC_LOG +/* Use of ftp_log needs some explanation. + * Each call to ftp_log toggles logging. That is, + * If logging is enabled, it is disabled. + * If logging is disabled, it is enabled. + * If logging is disabled, and ftp_log is called, then + * If no arguments are passed, logging to stdio is enabled. + * Else the argument is treated as filename and logging to file is enabled. + * If logging is enabled, and ftp_log is called, then the argument are not used. + * + * If FC_LOGFILE is disabled, then "logging to FILE" feature is disabled. + * + * EXAMPLE + * The flog command from menu prompt will invoke ftp_log(). + * Assume that logging is disabled and FC_LOGFILE is enabled. + * + * flog - enables logging to stdio + * flog - disables logging + * flog ftp.log - enables logging to file ftp.log + * flog - disables logging + * + */ +#ifdef FC_LOGFILE +char fc_buf[FTPMAXFILE]; + + +/* FUNCTION: fc_file_out() + * + * PARAM1: long s + * PARAM2: char *buf + * PARAM3: int len + * + * RETURNS: + */ + +int fc_file_out(long s, char * buf, int len) +{ + VFILE *fp = (VFILE *)s; + + vfwrite(buf,len,1,fp); + return len; +} + +struct GenericIO fc_file_io = { fc_buf, fc_file_out, 0, NULL } ; +#endif /*FC_LOGFILE */ + + + +/* FUNCTION: ftp_log() + * + * PARAM1: void * pio + * + * RETURNS: + */ + +int +ftp_log(void * pio) +{ + + FC_MENULOG(); + if (log_flag==TRUE) + { + /* Logging is enabled. Disable it */ + log_flag=FALSE; +#ifdef FC_LOGFILE + if (ftplog) + { + ns_printf(pio, "Logging to file disabled\n"); + vfclose((VFILE *)fc_file_io.id); + } + else +#endif /*FC_LOGFILE */ + ns_printf(pio, "Logging to STDIO disabled\n"); + } + else + { + /* Logging is disabled. Enable it. If an argument is passed, + * then it is name of logfile. Hence enable logging to file. If + * no argument is passed, then enable logging to stdio. + */ +#ifdef FC_LOGFILE + char * filename=NULL; + GEN_IO io= (GEN_IO) pio ; + VFILE * fp; +#endif /*FC_LOGFILE */ + + log_flag=TRUE; + ftplog =NULL; /* By default log to stdio */ + +#ifdef FC_LOGFILE + /* extract args from command buffer */ + if ( io != NULL ) + { + filename = nextarg(io->inbuf); + if(*filename != 0) /* user passed file name */ + { + fp=vfopen(filename, "w"); + if (fp==NULL) + { + ns_printf(pio, "Can't open file %s.", filename); + } + else + { + fc_file_io.id = (long)fp; + ftplog = &fc_file_io; + } + } + } + + if (ftplog) + ns_printf(pio, "Logging to file %s enabled\n", filename); + else +#endif /*FC_LOGFILE */ + ns_printf(pio, "Logging to STDIO enabled\n"); + } + + return 0; +} +#endif /* FC_LOG */ + + + +#ifdef OS_PREEMPTIVE +/* utility functions to send messages with zero or more parameters to the FTP client task */ + +/* FUNCTION: ftpc_send_msg1 () + * + * This function sends a zero- or one-parameter message to the FTP client task. + * The list of messages that use this function include: + * + * FTPC_CNTRL_QUIT_FTP_SESS + * FTPC_CNTRL_VERBOSE + * FTPC_CNTRL_HASH_PRINT + * FTPC_CNTRL_PWD + * FTPC_CNTRL_LIST + * FPTC_CNTRL_PRINT_STATE + * FTPC_CNTRL_PERIODIC_TIMER (zero parameters; 'pio' arg is ignored) + * + * INPUT: (1) Type of message to be sent (FTPC_CNTRL_QUIT_FTP_SESS, etc.) + * (2) Pointer to generic IO structure from where request originated + * + * OUTPUT: -1, if storage for the message could not be allocated; 0, otherwise. + */ + +int ftpc_send_msg1 (u_long type, u_long pio) +{ + struct ftpctask_msg * msgp; + + msgp = (struct ftpctask_msg *) FTPC_ALLOC (sizeof (struct ftpctask_msg)); + if (!msgp) + { + ++ftpc_err.alloc_fail; + return -1; + } + + msgp->type = type; + msgp->pio = pio; + + /* send message to FTP client task */ + LOCK_NET_RESOURCE (FTPCQ_RESID); + putq(&ftpcq, (q_elt)msgp); + UNLOCK_NET_RESOURCE (FTPCQ_RESID); + + post_app_sem (FTPC_SEMID); + + return 0; +} + + +/* FUNCTION: ftpc_send_msg2 () + * + * This function sends a two-parameter message to the FTP client task. + * The list of messages that use this function include: + * + * FTPC_CNTRL_TRANSFER_MODE + * FTPC_CNTRL_CD + * + * INPUT: (1) Type of message to be sent (FTPC_CNTRL_TRANSFER_MODE, etc.) + * (2) Pointer to generic IO structure from where request originated + * (3) Pointer to second parameter (in the message for the FTP client task) + * (4) Length of second parameter (starting at 'argp') + * + * OUTPUT: -1, if storage for the message could not be allocated; 0, otherwise. + */ + +int ftpc_send_msg2 (u_long type, u_long pio, u_char * argp, u_long arglen) +{ + struct ftpctask_msg * msgp; + + msgp = (struct ftpctask_msg *) FTPC_ALLOC (sizeof (struct ftpctask_msg) + arglen); + if (!msgp) + { + ++ftpc_err.alloc_fail; + return -1; + } + + msgp->type = type; + msgp->pio = pio; + memcpy (msgp->parms, argp, arglen); + + /* send message to FTP client task */ + LOCK_NET_RESOURCE (FTPCQ_RESID); + putq(&ftpcq, (q_elt)msgp); + UNLOCK_NET_RESOURCE (FTPCQ_RESID); + + post_app_sem (FTPC_SEMID); + + return 0; +} + + +/* FUNCTION: ftpc_send_msg4 () + * + * This function sends a four-parameter message to the FTP client task. + * The list of messages that use this function include: + * + * FTPC_CNTRL_MOVE_FILE + * + * INPUT: (1) Type of message to be sent (FTPC_CNTRL_MOVE_FILE) + * (2) Pointer to generic IO structure from where request originated + * (3) Pointer to second parameter (in the message for the FTP client task) + * (4) Length of second parameter (starting at 'arg1p') + * (5) Pointer to third parameter (in the message for the FTP client task) + * (6) Length of third parameter (starting at 'arg2p') + * (7) Pointer to fourth parameter (in the message for the FTP client task) + * (8) Length of fourth parameter (starting at 'arg3p') + * + * OUTPUT: -1, if storage for the message could not be allocated; 0, otherwise. + */ + +int ftpc_send_msg4 (u_long type, + u_long pio, + u_char * arg1p, + u_long arg1len, + u_char * arg2p, + u_long arg2len, + u_char * arg3p, + u_long arg3len) +{ + struct ftpctask_msg * msgp; + unsigned char * startp; + + msgp = (struct ftpctask_msg *) FTPC_ALLOC (sizeof (struct ftpctask_msg) + arg1len + arg2len + arg3len); + if (!msgp) + { + ++ftpc_err.alloc_fail; + return -1; + } + + msgp->type = type; + msgp->pio = pio; + startp = &(msgp->parms[0]); + memcpy (startp, arg1p, arg1len); + memcpy (startp + arg1len, arg2p, arg2len); + memcpy (startp + arg1len + arg2len, arg3p, arg3len); + + /* send message to FTP client task */ + LOCK_NET_RESOURCE (FTPCQ_RESID); + putq(&ftpcq, (q_elt)msgp); + UNLOCK_NET_RESOURCE (FTPCQ_RESID); + + post_app_sem (FTPC_SEMID); + + return 0; +} + + +/* FUNCTION: ftpc_send_msg5 () + * + * This function is used to send a five-parameter message to the FTP client task. + * + * FTPC_CNTRL_START_SESS + * + * INPUT: (1) Type of message to be sent (FTPC_CNTRL_MOVE_FILE) + * (2) Pointer to generic IO structure from where request originated + * (3) Pointer to second parameter (in the message for the FTP client task) + * (4) Length of second parameter (starting at 'arg1p') + * (5) Pointer to third parameter (in the message for the FTP client task) + * (6) Length of third parameter (starting at 'arg2p') + * (7) Pointer to fourth parameter (in the message for the FTP client task) + * (8) Length of fourth parameter (starting at 'arg3p') + * (9) Pointer to fifth parameter (in the message for the FTP client task) + * (A) Length of fifth parameter (starting at 'arg4p') + * + * OUTPUT: -1, if storage for the message could not be allocated; 0, otherwise. + */ + +int ftpc_send_msg5 (u_long type, + u_long pio, + u_char * arg1p, /* address */ + u_long arg1len, + u_char * arg2p, /* domain */ + u_long arg2len, + u_char * arg3p, /* username */ + u_long arg3len, + u_char * arg4p, /* password */ + u_long arg4len) +{ + struct ftpctask_msg * msgp; + unsigned char * startp; + + msgp = (struct ftpctask_msg *) FTPC_ALLOC (sizeof (struct ftpctask_msg) + arg1len + arg2len + arg3len + arg4len); + if (!msgp) + { + ++ftpc_err.alloc_fail; + return -1; + } + + msgp->type = type; + msgp->pio = pio; + startp = &(msgp->parms[0]); + memcpy (startp, arg1p, arg1len); + memcpy (startp + arg1len, arg2p, arg2len); + memcpy (startp + arg1len + arg2len, arg3p, arg3len); + memcpy (startp + arg1len + arg2len + arg3len, arg4p, arg4len); + + /* send message to FTP client task */ + LOCK_NET_RESOURCE (FTPCQ_RESID); + putq(&ftpcq, (q_elt)msgp); + UNLOCK_NET_RESOURCE (FTPCQ_RESID); + + post_app_sem (FTPC_SEMID); + + return 0; +} +#endif /* OS_PREEMPTIVE */ + + +/* FUNCTION: ftpc_periodic_timer () + * + * This function is invoked from timer task (tk_nettick), and is responsible for + * moving the file transfer to completion. + * + * INPUT: None. + * OUTPUT: None. + */ + +void ftpc_periodic_timer (void) +{ +#ifdef OS_PREEMPTIVE + /* the second ('pio') parameter is irrelevant */ + ftpc_send_msg1(FTPC_CNTRL_PERIODIC_TIMER, 0); +#else + fc_check(); +#endif +} + +#endif /* FTP_CLIENT */ diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpport.h b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpport.h new file mode 100644 index 0000000..039e955 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpport.h @@ -0,0 +1,128 @@ +/* + * FILENAME: FTPPORT.H + * + * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTP + * + * ROUTINES: + * + * PORTABLE: yes + */ + +/* ftpport.h FTP server's per-port definitions. + * 1/12/97 - Created as part of cleanup. John Bartas + */ + +#ifndef _FTPPORT_H_ +#define _FTPPORT_H_ 1 + +#include "ipport.h" +#include "libport.h" +#include "tcpapp.h" +#include "userpass.h" + +/* Implementation defines: */ +#define FTPMAXPATH 168 /* max path length, excluding file name */ +#define FTPMAXFILE 16 /* max file name length w/o path */ +#define CMDBUFSIZE 256 +/* #define CMDBUFSIZE 1024 // Texas Imperial Sw's WFTD sends a BIG welcome str */ + + +#ifndef FILEBUFSIZE /* Allow override from ipport.h */ +#define FILEBUFSIZE (6*1024) +#endif /* FILEBUFSIZE */ + + +#ifdef MAX_USERLENGTH +#define FTPMAXUSERNAME MAX_USERLENGTH +#define FTPMAXUSERPASS MAX_USERLENGTH +#else +#define FTPMAXUSERNAME 32 +#define FTPMAXUSERPASS 24 +#endif + +/* default port for FTP data transfers. This can default to 20 (as + * some interpret the RFC as recommending) or default to 0 to let the + * sockets layer pick a port randomly. It could even point to a user + * provided routine which determines a port number alogrithmically. + */ +#define FTP_DATAPORT 20 + + +/* set up file system options for target system */ + +#ifdef UNIX_VFS +#define FTP_SLASH '/' /* use UNIX style slash */ +#else +#if ((!defined(AMD_NET186)) && (!defined(ACE_360)) && (!defined(ARM_PID))) +#define DRIVE_LETTERS 1 /* track drive as well as directory */ +#endif +#define DEFAULT_DRIVE "c:" +#define FTP_SLASH '\\' /* use DOS style slash */ +#endif + +/* define clock tick info for DOS */ +#define FTPTPS TPS /* number of ftps_loop calls per second */ +#define ftpticks cticks + + +#ifdef MINI_TCP /* mini-sockets */ +/* Set the type of indentifier sockets will have */ +#define SO_GET_FPORT(so) (((M_SOCK)so)->fport) +#define SO_GET_LPORT(so) (((M_SOCK)so)->lport) +#else /* not MINI_TCP, use BSDish sockets */ +unshort SO_GET_FPORT(WP_SOCKTYPE so); +unshort SO_GET_LPORT(WP_SOCKTYPE so); +#endif + + +/* Added sys_ routines for FTP support */ +SOCKTYPE t_tcplisten(u_short * lport, int doamin); +SOCKTYPE t_tcpopen(ip_addr host, u_short lport, u_short fport); + + +/* define number of read-sends to do per ftp_check(). For best + * performance, this times the FILEBUFSIZE should be about equal + * to anicipated TCP window. + */ +#ifndef MAXSENDLOOPS /* allow tuning from ipport.h */ +#ifdef TCP_ZEROCOPY +#define MAXSENDLOOPS 12 /* MAX number of loops */ +#else +#define MAXSENDLOOPS 1 /* MAX number of loops */ +#endif /* not TCP_ZEROCOPY */ +#endif /* no MAXSENDLOOPS */ + +/* Configurable limit on max number of ftp sessions. Setting this value to 0 or + * -1 results in no limitation on number of sessions. The default value is 32. + */ +#ifndef MAX_FTPS_SESS /* allow tuning from ipport.h */ +#define MAX_FTPS_SESS 32 +#endif /* MAX_FTPS_SESS */ + +/* map ftp's timer tick count to system's */ +#define ftp_ticks cticks + +/* map FTP server's alloc and free to local mem library */ +#define FTPSALLOC(size) npalloc(size) +#define FTPSFREE(ptr) npfree(ptr) + +/* FTP Client related non-volatile parameters. Please see nvparms.h + * and nvparms.c regarding the usage of the following structure. + */ +#ifdef INCLUDE_NVPARMS +#ifdef FTP_CLIENT +struct ftpc_nvparam +{ + int fc_replytmo ; /* secs of inactivity (for a cmd) for timeout*/ + int fc_activity_tmo; /* ftp client's inactivity timeout (secs) */ +}; + +extern struct ftpc_nvparam ftpc_nvparms; +#endif /* FTP_CLIENT */ +#endif /* INCLUDE_NVPARMS */ + +#endif /* _FTPPORT_H_ */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsport.c b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsport.c new file mode 100644 index 0000000..abfc932 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsport.c @@ -0,0 +1,535 @@ +/* + * FILENAME: ftpsport.c + * + * Copyright 2000-2008 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTPSERVER + * + * ROUTINES: ftps_init(), ftps_check(), fs_lookupuser(), + * ROUTINES: ftps_cleanup(), + * + * PORTABLE: no + */ + +/* Additional Copyrights: */ + +/* ftpsport.c + * Portions Copyright 1996 by NetPort Software. All rights reserved. + * The Port-dependant portion of the FTP Server code. 11/24/96 - + * Created by John Bartas + */ + +#include "ftpport.h" /* TCP/IP, sockets, system info */ +#include "ftpsrv.h" + +#ifndef SUPERLOOP +#ifndef OSPORT_H +#error Need to define OSPORT_H +#endif +#include OSPORT_H +#endif /* SUPERLOOP */ + +struct sockaddr_in ftpssin; + +#ifdef IP_V4 +SOCKTYPE ftps_sock = SYS_SOCKETNULL; +#endif /* IP_V4 */ + +#ifdef IP_V6 +SOCKTYPE ftps_sock6 = SYS_SOCKETNULL; +#endif /* IP_V6 */ + + +#ifdef MINI_TCP +#include "msring.h" +#ifndef FTPS_NEWQLEN +#define FTPS_NEWQLEN 4 /* max # buffered new connections */ +#endif /* ndef FTPS_NEWQLEN */ +struct msring ftps_msring; +static M_SOCK ftps_msring_buf[FTPS_NEWQLEN + 1]; +#endif /* MINI_TCP */ + + +#if (defined(FTP_CLIENT) && defined(INCLUDE_NVPARMS)) +#include "nvparms.h" +extern int fc_replytmo ; /* secs of inactivity (for a cmd) for timeout*/ +extern int fc_activity_tmo; /* ftp client's inactivity timeout (secs) */ +#endif + +#ifdef FTP_SERVER +extern int ftps_init(void); +extern void ftps_cleanup(void); +extern void ftps_check(void); +#endif + + + +/* FUNCTION: ftps_init() + * + * ftps_init() - this is called by the ftp server demo package once + * at startup time. It initializes the vfs and opens a tcp socket to + * listen sfor web connections + * + * If FTP_CLIENT and INCLUDE_NVPARMS are both enabled, then we need to + * change a couple of FTP_CLIENT parameters to that in the NV file. + * + * PARAM1: + * + * RETURNS: Returns 0 if OK, non-zero if error. + */ + +int +ftps_init() +{ + unshort port; + int opens = 0; + + /* add default users for this port */ + /* anonymous makes you enter a password, we just don't care what it is */ + add_user("anonymous", "*", NULL); + add_user("guest", "guest", NULL); + + port = FTP_PORT; + +#ifdef IP_V4 + ftps_sock = t_tcplisten(&port, AF_INET); + if (ftps_sock == SYS_SOCKETNULL) + dprintf("FTP server: unable to start listen\n"); + else + opens++; +#endif /* IP_V4 */ + +#ifdef IP_V6 + ftps_sock6 = t_tcplisten(&port, AF_INET6); + if (ftps_sock6 == SYS_SOCKETNULL) + dprintf("FTP server: unable to start IPv6 listen\n"); + else + opens++; +#endif /* IP_V6 */ + + if (opens == 0) + return -1; + +#ifdef MINI_TCP + msring_init(&ftps_msring, ftps_msring_buf, + sizeof(ftps_msring_buf) / sizeof(ftps_msring_buf[0])); +#endif /* MINI_TCP */ + +#if (defined(FTP_CLIENT) && defined(INCLUDE_NVPARMS)) + /* So the following code is included only when an NVFS exists. */ + + if (ftpc_nvparms.fc_replytmo > 0) + fc_replytmo = ftpc_nvparms.fc_replytmo ; + + if (ftpc_nvparms.fc_activity_tmo > 0) + fc_activity_tmo = ftpc_nvparms.fc_activity_tmo ; + +#endif /* FTP_CLIENT & INCLUDE_NVPARMS */ + + return 0; +} + +#ifndef MINI_TCP + +/* Accept a new FTP command connection + * + * Returns 0 if OK, or ENP error code + */ + +int +ftp_accept(int domain, SOCKTYPE ftps_sock, int clientlen) +{ + SOCKTYPE socktmp; + struct sockaddr client; + int err; + ftpsvr * ftps; + + socktmp = t_accept(ftps_sock, &client, &clientlen); + if (socktmp != SYS_SOCKETNULL) + { + ftps = ftps_connection(socktmp); + if (ftps == NULL) + return ENP_NOMEM; /* most likely problem */ + ftps->domain = domain; + } + else + { + err = t_errno(ftps_sock); + if (err != EWOULDBLOCK) + { + return err; + } + } + return 0; +} +#endif /* ndef MINI_TCP */ + + +/* FUNCTION: ftps_check() + * + * ftp server task loop. For the PC DOS demo, this is called once + * every main task loop. + * + * PARAM1: + * + * RETURNS: + */ + +static int in_ftps_check = 0; /* reentry guard */ + +void +ftps_check() +{ +#ifdef MINI_TCP + SOCKTYPE socktmp; +#endif + + in_ftps_check++; + if (in_ftps_check != 1) + { + in_ftps_check--; + return; + } + +#ifdef MINI_TCP + + while (msring_del(&ftps_msring, &socktmp) == 0) + { + ftpsvr *e; + + e = ftps_connection(socktmp); + if (e == (ftpsvr *)NULL) + { + dprintf("ftp connection error\n"); + continue; + } + m_ioctl(socktmp, SO_NONBLOCK, NULL); /* make socket non-blocking */ + } + +#ifndef SUPERLOOP + { + struct sockaddr_in client; + int block = TRUE; /* flag to block FTP server task */ + ftpsvr * ftp; + + /* loop through ftp structs to see if it's OK to block task */ + for (ftp = ftplist; ftp; ftp = ftp->next) + { + /* The ftp data sending and receiving states can hang if we + * block the thread. If any session is in this state then + * clear the block flag to avoid this. + */ + if ((ftp->state == FTPS_SENDING) || + (ftp->state == FTPS_RECEIVING)) + { + block = FALSE; /* don't block server task */ + break; /* no need to check any more sessions */ + } + } + if (block) /* flag should now be set */ + TK_BLOCK(); /* sleep until a callback wakes us */ + } +#endif /* SUPERLOOP */ + /* nothing to do in the MINI_TCP & SUPERLOOP case since connects + * are callback driven and the superloop will poll us anyway. + */ +#elif defined(BLOCKING_APPS) /* use blocking select to drive server app */ + { + fd_set ftp_fdrecv; + fd_set ftp_fdsend; + ftpsvr *ftp; + int events; /* return from select() */ +#ifndef USE_FDS + int recvs = 0; /* number of entries in recv FD_SET array */ + int sends = 0; +#endif +#ifdef FTP_IDLECONN_TMO + extern int ftps_iotmo; /* idle time in BLOCKING_APPS mode */ +#endif /* FTP_IDLECONN_TMO */ + +#ifdef USE_FDS + FD_ZERO(&ftp_fdrecv); + FD_ZERO(&ftp_fdsend); +#else + MEMSET(&ftp_fdrecv, 0, sizeof(fd_set)); + MEMSET(&ftp_fdsend, 0, sizeof(fd_set)); +#endif /* USE_FDS */ + + /* use the recv array to detect new connections */ + +#ifdef IP_V4 + if (ftps_sock != SYS_SOCKETNULL) + { + FD_SET(ftps_sock, &ftp_fdrecv); +#ifndef USE_FDS + recvs++; +#endif + } +#endif +#ifdef IP_V6 + if (ftps_sock6 != SYS_SOCKETNULL) + { + FD_SET(ftps_sock6, &ftp_fdrecv); +#ifndef USE_FDS + recvs++; +#endif + } +#endif + + /* If no listening sockets, don't bother */ +#ifdef USE_FDS + if (FD_COUNT(&ftp_fdrecv) == 0) + return; +#else + if (recvs == 0) + return; +#endif /* USE_FDS */ + + /* loop through ftp structs building read/write arrays for select */ + for (ftp = ftplist; ftp; ftp = ftp->next) + { + /* add ftp server's open sockets to the FD lists based on + * their state. The server thread will block until one of + * these has activity. + */ +#ifdef USE_FDS + /* error checking is done in FD_SET */ +#else + if ((recvs > FD_SETSIZE) || (sends > FD_SETSIZE)) + { + dtrap(); /* port needs bigger FD_SETSIZE */ + break; /* no point in looping any more */ + } +#endif /* USE_FDS */ + + FD_SET(ftp->sock, &ftp_fdrecv); +#ifndef USE_FDS + recvs++; +#endif + if (ftp->datasock && (ftp->datasock != SYS_SOCKETNULL)) + { + /* always add the data socket to the receive FD_SET */ + FD_SET(ftp->datasock, &ftp_fdrecv); +#ifndef USE_FDS + recvs++; +#endif + /* only add the send socket if we are actively sending */ + if (ftp->state == FTPS_SENDING) + { + FD_SET(ftp->datasock, &ftp_fdsend); +#ifndef USE_FDS + sends++; +#endif + } + } + } /* end of for(ftplist) loop */ + + /* block until one of the sockets has activity */ +#ifndef FTP_IDLECONN_TMO + events = t_select(&ftp_fdrecv, &ftp_fdsend, (fd_set *)NULL, -1); +#else /* do not block idle time, enable inactivity timeout */ + events = t_select(&ftp_fdrecv, &ftp_fdsend, (fd_set *)NULL, + (unsigned long)ftps_iotmo * FTPTPS); +#endif /* FTP_IDLECONN_TMO */ + +#ifdef IP_V4 + if (FD_ISSET(ftps_sock, &ftp_fdrecv)) /* got a connect to server listen? */ + { + ftp_accept(AF_INET, ftps_sock, sizeof(struct sockaddr_in)); + events--; + } +#endif /* IP_V4 */ + +#ifdef IP_V6 + if (FD_ISSET(ftps_sock6, &ftp_fdrecv)) /* got a connect v6 listen? */ + { + ftp_accept(AF_INET6, ftps_sock6, sizeof(struct sockaddr_in6)); + events--; + } +#endif /* IP_V6 */ + + if (events <= 0) /* connect was only socket */ + { + in_ftps_check--; + return; + } + } +#else /* not BLOCKING_APPS, poll non-blocking sockets */ + +#ifdef IP_V4 + if (ftps_sock != SYS_SOCKETNULL) + ftp_accept(AF_INET, ftps_sock, sizeof(struct sockaddr_in)); +#endif /* IP_V4 */ + +#ifdef IP_V6 + if (ftps_sock6 != SYS_SOCKETNULL) + ftp_accept(AF_INET6, ftps_sock6, sizeof(struct sockaddr_in6)); +#endif /* IP_V6 */ + +#endif /* BLOCKING_APPS */ + + /* work on existing conections - data or command */ + ftps_loop(); + + in_ftps_check--; + return; +} + + + + +/* FUNCTION: fs_lookupuser() + * + * fs_lookupuser() lookup a user based on the name. Fill in user + * struct in ftp, including password. If no password required, fill + * in null string. Filled in data is in unencrypted form. This + * particular port is for the user database in ..\misclib\userpass.c + * + * PARAM1: ftpsvr * ftp + * PARAM2: char * username + * + * RETURNS: Returns 0 if user found, else -1 if user invalid. + */ + +int +fs_lookupuser(ftpsvr * ftp, char * username) +{ + int i; + + for (i = 0; i < NUM_NETUSERS; i++) + { + if (users[i].username[0] == 0) + continue; + if (strcmp(users[i].username, username) == 0) + break; + } + + if (i >= NUM_NETUSERS) /* username not found? */ + return -1; + + /* extract username from command */ + strncpy(ftp->user.username, username, FTPMAXUSERNAME); + strncpy(ftp->user.password, users[i].password, FTPMAXUSERPASS); + strcpy(ftp->user.home, "c:\\"); /* default for DOS port */ + return 0; +} + +void delftp(ftpsvr * ftp); + + +/* FUNCTION: ftps_cleanup() + * + * Close down all the connections to FTP Server. Then close the + * socket used for FTP Server listen + * + * PARAM1: void + * + * RETURNS: + */ + +void +ftps_cleanup(void) +{ + ftpsvr * ftp; + ftpsvr * ftpnext; + + ftpnext = ftplist; /* will be set to ftp at top of loop */ + + /* loop throught connection list */ + while (ftpnext) + { + ftp = ftpnext; + ftpnext = ftp->next; + delftp(ftp); /* kill the connection */ + } + +#ifdef IP_V4 + if ( ftps_sock != INVALID_SOCKET ) + { + sys_closesocket(ftps_sock); + ftps_sock = INVALID_SOCKET ; + } +#endif + +#ifdef IP_V6 + if ( ftps_sock6 != INVALID_SOCKET ) + { + sys_closesocket(ftps_sock6); + ftps_sock6 = INVALID_SOCKET ; + } +#endif +} + + +#ifndef SUPERLOOP + +#ifdef FTP_SERVER + +TK_OBJECT(to_ftpsrv); +TK_ENTRY(tk_ftpsrv); +long ftpsrv_wakes = 0; + +/* + * Altera Niche Stack Nios port modification: + * Use task priority and stack size values from ipport.h + */ +struct inet_taskinfo ftpstask = { + &to_ftpsrv, + "FTP server", + tk_ftpsrv, + TK_FTPSRVR_TPRIO, + TK_FTPSRVR_SSIZE, +}; + + +/* The application thread works on a "controlled polling" basis: + * it wakes up periodically and polls for work. If there is outstanding + * work, the next wake is accellerated to give better performance under + * heavy loads. + * + * The FTP task could aternativly be set up to use blocking sockets, + * in which case the loops below would only call the "xxx_check()" + * routines - suspending would be handled by the TCP code. + */ + +/* FUNCTION: tk_ftpsrv() + * + * PARAM1: n/a + * + * RETURNS: n/a + */ + +TK_ENTRY(tk_ftpsrv) +{ + int e; + + while (!iniche_net_ready) + TK_SLEEP(1); + + e = ftps_init(); + if (e) + TK_RETURN_ERROR(); + exit_hook(ftps_cleanup); + + for (;;) + { + ftps_check(); /* may block on select */ +#ifndef BLOCKING_APPS + tk_yield(); /* give up CPU if it didn't block */ +#else +#ifdef MINI_TCP + tk_yield(); /* give up CPU, MINI_TCP doesn't select() */ +#endif /* MINI_TCP */ +#endif /* BLOCKING_APPS */ + ftpsrv_wakes++; /* count wakeups */ + if (net_system_exit) + break; + } + TK_RETURN_OK(); +} + +#endif /* FTP_SERVER */ + +#endif /* SUPERLOOP */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.c b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.c new file mode 100644 index 0000000..969b47d --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.c @@ -0,0 +1,2061 @@ +/* + * FILENAME: ftpsrv.c + * + * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTPSERVER + * + * ROUTINES: ftps_connection(), ftpputs(), ftp_getcmd(), + * ROUTINES: ftp_flushcmd(), ftps_loop(), newftp(), delftp(), ftps_user(), + * ROUTINES: ftps_password(), ftp_cmdpath(), ftp_make_filename() + * ROUTINES: ftp_leave_passive_state(), ftps_do_pasv(), ftps_cmd(), + * + * PORTABLE: yes + */ + + +#include "ftpport.h" /* TCP/IP, sockets, system info */ +#include "ftpsrv.h" /* FTP server includes */ + +static u_long max_ftps_conn = MAX_FTPS_SESS; + +u_long ftps_connects = 0; /* TCP connections tocmd port */ +u_long ftps_sessions = 0; /* user & password OK */ +u_long ftps_badauth = 0; /* user or password badK */ +u_long ftps_txfiles = 0; /* total data files sent */ +u_long ftps_rxfiles = 0; /* total data files received */ +u_long ftps_txbytes = 0; /* total data bytes received */ +u_long ftps_rxbytes = 0; /* total data bytes sent */ +u_long ftps_dirs = 0; /* total directory operations done */ + +/* ftp server internal routines: */ +static int ftp_getcmd(ftpsvr * ftp); +static void ftp_flushcmd(ftpsvr * ftp); + +ftpsvr * newftp(void); +void delftp(ftpsvr * ftp); +int ftps_user(ftpsvr * ftp); +int ftps_password(ftpsvr * ftp); +int ftps_cmd(ftpsvr * ftp); +int ftp_sendfile(ftpsvr * ftp); +int ftp_getfile(ftpsvr * ftp); +void ftp_xfercleanup(ftpsvr * ftp); + +/* common FTP server reply tokens */ +char * ftp_cmdok = "200 Command OK\r\n"; +char * ftp_ready = "220 Service ready\r\n"; +char * ftp_needpass= "331 User name ok, need password\r\n"; +char * ftp_loggedin= "230 User logged in\r\n"; +char * ftp_fileok = "150 File status okay; about to open data connection\r\n"; +char * ftp_closing = "226 Closing data connection, file transfer successful\r\n"; +char * ftp_badcmd = "500 Unsupported command\r\n"; +char * ftp_noaccess= "550 Access denied\r\n"; + +ftpsvr * ftplist = NULL; /* master list of FTP connections */ + +int notfatal = 0; /* unfatal error handling */ + +/* ftp server timeouts, left as globals for app overrides: */ +int ftps_iotmo = 120; /* Idle timeout during IO activity */ +int ftps_lotmo = 60; /* Idle timeout during logins */ + +#ifdef FTP_IDLECONN_TMO +int ftps_conntmo = 0; /* connection idle timeout, 0==no timeout */ +#endif + + +/* if x is an upper case letter, this evaluates to x, + * if x is a lower case letter, this evaluates to the upper case. + */ +#define upper_case(x) ((x) & ~0x20) + +u_short listcmds = 0; /* number of LIST or DIR commands */ + +#ifndef SUPERLOOP +extern TK_OBJECT(to_ftpsrv); +#endif + + +/* FUNCTION: ftps_connection() + * + * ftps_connection() - Called whenever we have accepted a connection + * on the FTP server listener socket. The socket passed will stay + * open until we close it. + * + * PARAM1: WP_SOCKTYPE sock + * + * RETURNS: Returns ftpsvr pointer if OK, else NULL + */ + +ftpsvr * +ftps_connection(SOCKTYPE sock) +{ + ftpsvr * ftp; + int e; + + ftps_connects++; /* count connections */ + + /* check if we have exceeded the maximum number of connections */ + if ((max_ftps_conn > 0) && (ftps_connects > max_ftps_conn)) + { + ftps_connects--; + t_socketclose(sock); + return NULL; + } + + /* create new FTP connection */ + if ((ftp = newftp()) == (ftpsvr *)NULL) + { + ftps_connects--; + t_socketclose(sock); + return NULL; + } + + /* set the default data port we will connect to for data transfers + * to be the same as the port that the client connected with just + * in case we connect to a client that doesn't send PORT commands. + * see section 3.2 ESTABLISHING DATA CONNECTIONS in RFC 959 for a + * description of this, keeping in mind that what we are doing + * here is setting the default "user-process data port". + * + * note that t_getpeername() can in theory fail, but its not clear + * what we could do at this point to recover if it did and it only + * makes a difference if we connect to clients that don't send + * PORT commands anyway, so just use whatever port that we get back + */ + ftp->dataport = SO_GET_FPORT(sock); + + ftp->sock = sock; /* remember client socket */ + ftp->state = FTPS_CONNECTING; + e = t_send(ftp->sock, ftp_ready, strlen(ftp_ready), 0); + if (e == -1) /* did connection die already? */ + { + dtrap(); + delftp(ftp); + return NULL; + } + + return ftp; +} + + + +/* FUNCTION: ftpputs() + * + * ftpputs() - put a string to an ftp command socket. + * + * PARAM1: ftpsvr * ftp + * PARAM2: char * text + * + * RETURNS: Retuns 0 if OK -1 if error. ftpsvr is deleted on error. + */ + +int +ftpputs(ftpsvr * ftp, char * text) +{ + int bytes_to_send; + int bytes_sent; + int rc; + + bytes_to_send = strlen(text); + for (bytes_sent = 0; bytes_to_send > 0; ) + { + rc = t_send(ftp->sock, text + bytes_sent, bytes_to_send, 0); + if (rc < 0) + { + rc = t_errno(ftp->sock); + dtrap(); /* show errors to programmer */ + ftp->state = FTPS_CLOSING; + return -1; + } + bytes_to_send -= rc; + bytes_sent += rc; + if (bytes_to_send > 0) + tk_yield(); + } + /* bytes_to_send should end up 0 */ + if (bytes_to_send < 0) + { + dtrap(); + } + return 0; +} + +#define FTP_HASCMD 1 +#define FTP_NOCMD 2 +#define FTP_ERROR 3 + + + +/* FUNCTION: ftp_getcmd() + * + * ftp_getcmd() - Get a command from the ftp command stream. Trys to + * read more data from a ftp client sock until a command is buffered. + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: FTP_HASCMD if a command is ready at ftp->cmdbuf, else + * FTP_NOCMD if a command is not ready, or FTP_ERROR if there's a + * serious data problem. If FTP_HASCMD is returned and the caller + * processes the command, he should call ftp_flushcmd() so the + * command doen't get processed again. + */ + +static int +ftp_getcmd(ftpsvr * ftp) +{ + int readval; + int e; + char * cp; + + /* if we filled up the input buffer on the last pass and there was + no CRLF terminating a command in any of it */ + if (ftp->cmdbuflen >= (CMDBUFSIZE - 1)) + { + /* the input is bogus so discard it */ + ftp->cmdbuflen = 0; + } + + /* read as much data as will fit into the command buffer, leaving + * room for the NULL that we are going to insert following the + * first CRLF, below + */ + + readval = t_recv(ftp->sock, (ftp->cmdbuf + ftp->cmdbuflen), + (CMDBUFSIZE - ftp->cmdbuflen - 1), 0); + + if (readval == 0) + ftp->state = FTPS_CLOSING; + + if (readval < 0) /* error on socket? */ + { + e = t_errno(ftp->sock); + if (e != EWOULDBLOCK) + { + /* let programmer see errors */ + dprintf("ftpsvr cmd socket error %d\n", e); + delftp(ftp); /* thats the end of this connection... */ + return FTP_ERROR; /* error return */ + } + else /* no command ready */ + return FTP_NOCMD; + } + ftp->cmdbuflen += readval; /* add read data to hp */ + + if (ftp->cmdbuflen == 0) /* nothing in buffer? */ + return FTP_NOCMD; + + ftp->lasttime = ftpticks; /* this is activity; rest timeout */ + + cp = strstr(ftp->cmdbuf, "\r\n"); /* look for trailing CRLF */ + if (cp) /* look for trailing CRLF */ + { + char * src; + char * dst; + + /* point to first byte following the CRLF */ + cp += 2; + /* if there's not already a null there */ + if (*cp) + { + /* move all the characters following the CRLF up one so we got + room to insert a null to terminate the command after the CRLF */ + /* note we do this here because some of the later code paths + treat the command like an ASCIIZ string */ + dst = ftp->cmdbuf + ftp->cmdbuflen; + src = dst - 1; + while (src >= cp) + *dst-- = *src--; + /* increment the number of characters in the command buffer to + account for the NULL */ + ftp->cmdbuflen++; + /* NULL terminate the command */ + *cp = 0; + } + + /* now, flip the characters at the beginning of the buffer that + * could be an FTP command from lower to upper case since + * the protocol's supposed to be case insensitive * + * + * we look at at most the first 4 bytes since no commands + * are more than 4 bytes long + */ + + for (dst = ftp->cmdbuf; dst < (ftp->cmdbuf + 4); ++dst) + { + /* upper case, leave as is */ + if ((*dst >= 'A') && (*dst <= 'Z')) + continue; + /* lower case gets flipped to upper */ + if ((*dst >= 'a') && (*dst <= 'z')) + { + *dst = (char) (*dst + (char) ('A' - 'a')); + continue; + } + /* anthing else means we got to end of command so break */ + break; + } + return FTP_HASCMD; /* Got command */ + } + else + return FTP_NOCMD; /* NO command */ +} + + + +/* FUNCTION: ftp_flushcmd() + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: + */ + +static void +ftp_flushcmd(ftpsvr * ftp) +{ + char * cp; + int old_cmd_len; + int rest_of_cmds_len; + + /* find command terminating CRLF */ +ff_again: + cp = strstr(ftp->cmdbuf, "\r\n"); + if (!cp) + { + /* might be clobbered CR at end of path (see CWD code) */ + if ( (unsigned)strlen(ftp->cmdbuf) < ftp->cmdbuflen) + { + ftp->cmdbuf[strlen(ftp->cmdbuf)] = '\r'; /* put back CR */ + goto ff_again; + } + dtrap(); /* prog error */ + return; + } + + /* cp now points to a CRLF followed by the NULL we inserted in + * ftp_getcmd(), so if theres data in the buffer following the + * NULL, then its the beginning of the next command + */ + /* point to where next comamnd will be if its there */ + cp += 3; + /* compute the length of the old command */ + old_cmd_len = cp - ftp->cmdbuf - 1; + + /* compute the length of the rest of the commands in the buffer */ + /* that's the number of bytes that had been read into the buffer, + * less the length of the old command less 1 for the NULL that + * we inserted to null terminate the old command + */ + rest_of_cmds_len = ftp->cmdbuflen - old_cmd_len - 1; + + /* this will happen if we didn't insert a null after the command + * because there was one there already, which will be the case + * when the old command is the only data that's been read so far, + * in which case the length of the rest of the commands is 0 + */ + + if (rest_of_cmds_len < 0) + rest_of_cmds_len = 0; + + /* if there are any other commands left in the buffer */ + if (rest_of_cmds_len) + { + /* move them to the front of the buffer */ + MEMCPY(ftp->cmdbuf,cp,rest_of_cmds_len); + } + + /* zero the data following rest of the commands for the length of + * the old command or else you risk finding command termination + * sequences when none have been received + */ + /* if there are no other commands, this zeroes the old command + from the buffer */ + MEMSET(ftp->cmdbuf + rest_of_cmds_len,0,old_cmd_len + 1); + + ftp->cmdbuflen = rest_of_cmds_len; +} + + + + +/* FUNCTION: ftps_loop() + * + * PARAM1: + * + * RETURNS: + */ + +void +ftps_loop() +{ + ftpsvr * ftp; + ftpsvr * ftpnext; + int cmdready; + int e; /* error holder */ + +#ifndef MINI_TCP + struct sockaddr client; /* for BSDish accept() call */ + int clientsize; + SOCKTYPE data_sock; /* socket for passive accept */ +#endif + + ftpnext = ftplist; /* will be set to ftp at top of loop */ + + /* loop throught connection list */ + while (ftpnext) + { + ftp = ftpnext; + ftpnext = ftp->next; /* remember next in case ftp is deleted */ + if (ftp->inuse) /* if we are blocked in guts, quit */ + continue; + ftp->inuse++; /* set reentry flag */ + e = 0; /* clear error holder */ + /* see if a command is ready */ + cmdready = ftp_getcmd(ftp); + if (cmdready == FTP_ERROR) + continue; + + switch (ftp->state) + { + case FTPS_CONNECTING: + case FTPS_NEEDPASS: + /* check for shorter session timeout in these states */ + if (ftp->lasttime + ((unsigned long)ftps_lotmo * FTPTPS) < ftpticks) + { + e = -1; /* set flag to force deletion of ftps */ + break; + } + if (cmdready != FTP_HASCMD) + break; + if (ftp->state == FTPS_CONNECTING) + e = ftps_user(ftp); + else + e = ftps_password(ftp); + break; + case FTPS_LOGGEDIN: + /* connection timeouts like this are really obnoxious and should + * be disabled usless there is some compling reason your target + * should do otherwise (like dialup charges). + */ +#ifdef FTP_IDLECONN_TMO + /* see if session has been idle for too long */ + if((ftps_conntmo > 0) && + (ftp->lasttime + ((unsigned long)ftps_conntmo * FTPTPS) < ftpticks)) + { + dprintf("ftpsrv: timout of idle FTP session\n"); + delftp(ftp); + break; + } +#endif /* FTP_IDLECONN_TMO */ + + if (cmdready == FTP_HASCMD) + e = ftps_cmd(ftp); + /* if we are in passive mode and the client hasn't connected yet */ + if (ftp->passive_state == FTPS_PASSIVE_MODE) + { + /* check to see if the client connected */ +#ifndef MINI_TCP + + /* Accept for either V4 or V6 + */ + data_sock = SYS_SOCKETNULL; +#ifdef IP_V6 + if (LONG2SO(ftp->datasock)->so_domain == AF_INET6) + { + struct sockaddr_in6 cli6; + char ipv6WrkBuffer[60]; + + clientsize = sizeof(struct sockaddr_in6); + data_sock = t_accept(ftp->datasock, &cli6, &clientsize); + } +#endif /* IP_V6 */ + +#ifdef IP_V4 + if (LONG2SO(ftp->datasock)->so_domain == AF_INET) + { + clientsize = sizeof(struct sockaddr_in); + data_sock = t_accept(ftp->datasock, &client, &clientsize); + } +#endif /* IP_V4 */ + + /* if client didn't connect, break to continue */ + if (data_sock == SYS_SOCKETNULL) + break; + /* client connected, so close listening socket so we wont take + * any more connections to it. + */ + t_socketclose(ftp->datasock); + + /* the data socket we care about is now the actual connection + * to the client. + */ + ftp->datasock = data_sock; + +#else /* mini sockets */ + /* mini-sockets sets data_sock in a callback. If client + * didn't connect yet, break to continue. + */ + if(ftp->datasock->state & SS_ISCONNECTED == 0) + break; +#endif + /* change our passive state so that we know we are connected + to the client on the data socket */ + ftp->passive_state |= FTPS_PASSIVE_CONNECTED; + /* if we have already received our data transfer command */ + if (ftp->passive_cmd) + { + /* then do the command */ + IN_PROFILER(PF_FTP, PF_ENTRY); + switch (ftp->passive_cmd) + { + case 0x4c495354: /* "LIST" */ + case 0x4e4c5354: /* "NLST" */ + if (fs_dodir(ftp, ftp->passive_cmd)) + ftpputs(ftp, "451 exec error\r\n"); + break; + case 0x52455452: /* "RETR" */ + ftp_sendfile(ftp); + break; + case 0x53544f52: /* "STOR" */ + ftp_getfile(ftp); + break; + /* there is a serious logic error someplace */ + default : + dprintf("invalid passive_cmd\n"); + dtrap(); + } + IN_PROFILER(PF_FTP, PF_EXIT); + } + } + break; + case FTPS_RECEIVING: /* task suspended while doing IO */ + case FTPS_SENDING: + /* check for shorter session timeout in these states */ + if (ftp->lasttime + ((unsigned long)ftps_iotmo * FTPTPS) < ftpticks) + { + e = -1; /* set flag to force deletion of ftps */ + break; + } + IN_PROFILER(PF_FTP, PF_ENTRY); + if (ftp->state == FTPS_SENDING) + e = ftp_sendfile(ftp); + else /* must be receiving */ + e = ftp_getfile(ftp); + IN_PROFILER(PF_FTP, PF_EXIT); + +#ifndef SUPERLOOP + /* If not superloop and there is still more data to move, + * then make sure ftp server will wake up to finish the + * send/receive later. The the transfer finished, the ftps + * state will have returned to LOGGEDIN. + */ + if(ftp->state != FTPS_LOGGEDIN) + TK_WAKE(&to_ftpsrv); /* make sure we come back later */ +#endif + break; + case FTPS_CLOSING: + break; + default: /* bad state? */ + dtrap(); + break; + } + /* if fatal error or connection closed */ + /* if (e == 452) + { + ftp->state = FTPS_LOGGEDIN; + ftp_flushcmd(ftp); + ftp->inuse--; + } */ + if (e || (ftp->state == FTPS_CLOSING)) + delftp(ftp); + else + ftp->inuse--; /* set reentry flag */ + } +} + + + +/* FUNCTION: newftp() + * + * newftp() - create a new ftpsvr structure. Put in master queue. + * + * PARAM1: + * + * RETURNS: + */ + +ftpsvr * +newftp() +{ + ftpsvr * ftp; + + ftp = (ftpsvr *)FTPSALLOC(sizeof(ftpsvr)); + if (!ftp) + return NULL; + ftp->next = ftplist; + ftp->lasttime = ftpticks; + ftplist = ftp; + + /* make sure we have a valid domain */ +#if defined(IP_V4) || defined(MINI_IP) + ftp->domain = AF_INET; /* default to IPv4 */ +#else + ftp->domain = AF_INET6; +#endif + return(ftp); +} + + + +/* FUNCTION: delftp() + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: + */ + +void +delftp(ftpsvr *ftp) +{ + ftpsvr *list; + ftpsvr *last; + + last = NULL; + for (list = ftplist; list; list = list->next) + { + if (list == ftp) + { + /* found server to kill, unlink: */ + if (last) + last->next = list->next; + else + ftplist = list->next; + + if (ftp->sock) + { + t_socketclose(ftp->sock); + ftp->sock = 0; + } + if (ftp->datasock) + { + t_socketclose(ftp->datasock); + ftp->datasock = 0; + } + +#ifdef TCP_ZEROCOPY + /* don't orphan any packets we may have stored in ftpsq */ + while (ftp->ftpsq.q_len > 0) + tcp_pktfree ((PACKET)getq(&ftp->ftpsq) ); +#endif /* TCP_ZEROCOPY or not */ + + FTPSFREE(ftp); + ftps_connects--; /* decrement connection count */ + break; + } + last = list; + } +} + + + +/* the ftps_ server command handler routines. These are called when a + * command is received in the ftp->cmdbuf. Which one is called + * depends in the session state. These all process a command, maybe + * change the state, (or kill the session) and flush the command. All + * return 0 if OK (which may mean pending work) or negative error + * code if a fatal error was detected. + */ + + + +/* FUNCTION: ftps_user() + * + * ftps_user() - called when we get a command in the initial state + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: + */ + +int +ftps_user(ftpsvr * ftp) +{ + char * cp; + int e; + + /* make sure client's telling me about a user */ + if (MEMCMP(ftp->cmdbuf, "USER", 4) != 0) + { + ftpputs(ftp, ftp_badcmd); + return -1; /* signal main loop to kill session */ + } + cp = strstr(ftp->cmdbuf, "\r\n"); + if (!cp) + { + dtrap(); + return -1; /* signal main loop to kill session */ + } + *cp = 0; /* NULL terminate user name */ + + /* search user list */ + e = fs_lookupuser(ftp, &ftp->cmdbuf[5]); + *cp = '\r'; /* put back buffer char we clobbered */ + if (e) + { + ftp->state = FTPS_CONNECTING; + ftpputs(ftp, "530 Invalid user\r\n"); + ftp_flushcmd(ftp); + return 0; /* user not valid */ + } + + ftp->cwd[0] = FTP_SLASH; + ftp->cwd[1] = 0; +#ifdef DRIVE_LETTERS + strcpy(ftp->drive, DEFAULT_DRIVE); +#endif /* DRIVE_LETTERS */ + ftp->type = FTPTYPE_ASCII; /* RFC says make text the defaul type */ + + + if (ftp->user.password[0] == '\0') /* no password required? */ + { + ftpputs(ftp, ftp_loggedin); + ftp->state = FTPS_LOGGEDIN; + ftps_sessions++; + } + else /* require a password */ + { + ftpputs(ftp, ftp_needpass); /* message to client */ + ftp->state = FTPS_NEEDPASS; /* set proper state */ + } + ftp_flushcmd(ftp); + return 0; +} + + + +/* FUNCTION: ftps_password() + * + * ftps_password() - called when we get a command in the + * FTPS_NEEDPASS state. + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: Returns 0 if OK (which may mean pending work) + * or negative error code if a fatal error was detected. + */ + +int +ftps_password(ftpsvr * ftp) +{ + char * password; + char * cp; + + if (MEMCMP(ftp->cmdbuf, "PASS", 4) != 0) + { + ftpputs(ftp, ftp_badcmd); + return -1; /* signal main loop to kill session */ + } + password = &ftp->cmdbuf[5]; + cp = strstr(password, "\r\n"); /* find end of command */ + if (!cp) /* require whole command to be in buffer */ + return -1; /* signal main loop to kill session */ + + *cp = 0; /* NULL terminate */ + /* password '*' means we accept any password, so don't even compare */ + if (ftp->user.password[0] != '*') + { + if (strcmp(password, ftp->user.password) != 0) + { + ftp->state = FTPS_CONNECTING; + ftpputs(ftp, "530 Invalid password\r\n"); + + if (ftp->logtries++ > 2) + return -1; /* too many failed logins, kill session */ + else + { + ftp_flushcmd(ftp); + return 0; /* wait for another user/pass try */ + } + } + } + ftpputs(ftp, ftp_loggedin); /* login OK, set up session */ + ftp->state = FTPS_LOGGEDIN; + ftps_sessions++; + ftp_flushcmd(ftp); + return 0; +} + + + +/* FUNCTION: ftp_cmdpath() + * + * ftp_getpath() - extract path from an FTP command in C string form. + * The returned pointer is to the ftp->cmdbuf area. + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: Returns NULL on any error after sending complain + * string to client. + */ + +char * +ftp_cmdpath(ftpsvr * ftp) +{ + char * cp; + + cp = strchr(&ftp->cmdbuf[4], '\r'); + if (!cp) + { + ftpputs(ftp, "501 garbled path\r\n"); + return NULL; + } + *cp = 0; /* null terminate path in buffer */ + cp = &ftp->cmdbuf[4]; + while (*cp == ' ') cp++; /* bump past spaces */ + if (strlen(cp) > FTPMAXPATH) + { + ftpputs(ftp, "553 path too long\r\n"); + return NULL; + } + return cp; +} + + + +/* FUNCTION: ftp_make_filename() + * + * create a complete file name and path from the file specification + * in the command buffer and the cwd associated with the current ftp + * session. allow_empty_filespec specifies whether a file + * specification is required (as is the case with RETR and STOR) or + * whether it is optional (as is the case with NLST and LIST). + * + * PARAM1: ftpsvr *ftp + * PARAM2: int allow_empty_filespec + * + * RETURNS: TRUE if success, FALSE if some error occurred + */ + +int ftp_make_filename(ftpsvr *ftp,int allow_empty_filespec) +{ + char *cp; + char *cp1; + int relative_path; + + cp = ftp_cmdpath(ftp); + if(!cp) return FALSE; /* ftp_cmdpath() already sent error */ + + /* if there is no file spec in the command buffer and one is + required, xmit error response and fail function */ + if(!(*cp) && !allow_empty_filespec) + { + ftpputs(ftp, "501 bad path\r\n"); + return FALSE; + } + + /* if the file spec is too long, xmit error response and fail */ + if(strlen(cp) > FTPMAXPATH) + { + ftpputs(ftp, "552 Path/name too long\r\n"); + return FALSE; + } + lslash(cp); + + /* assume the path specified is not a relative path */ + relative_path = FALSE; + + /* working pointer to file name */ + cp1 = ftp->filename; + +/* if this target system deals with DOS drive letters */ +#ifdef DRIVE_LETTERS + /* if the client specified path contains a colon in the right place */ + if (*cp && (*(cp + 1) == ':')) + { + /* copy the drive: to the beginning of the filename */ + *cp1++ = (char) upper_case(*cp); + *cp1++ = ':'; + + /* if the specified drive is the same as the current drive + and the client specified path does not start at the root */ + if ((upper_case(*cp) == upper_case(ftp->drive[0])) && + (*(cp + 2) != FTP_SLASH)) + { + /* then its a relative path */ + relative_path = TRUE; + } + + /* bump past drive and colon in client path */ + cp += 2; + } + /* client path does not contain a drive spec */ + else + { + /* so use the current drive */ + *cp1++ = ftp->drive[0]; + *cp1++ = ':'; + /* if client path does not start at the root */ + if (*cp != FTP_SLASH) + { + /* its a relative path */ + relative_path = TRUE; + } + } +#else /* DRIVE_LETTERS */ + /* target system is fortunate enough to not have to deal + with DOS drive letters */ + + /* if client path does not start at root */ + if (*cp != FTP_SLASH) + { + /* else its a relative path */ + relative_path = TRUE; + } +#endif /* DRIVE_LETTERS */ + + /* if the client specified path is not relative */ + if (!relative_path) + { + /* in this case, cp now points to past any drive info in + the path provided by the client and cp1 now points to past + any drive info in the constructed file name */ + /* if the path provided by the client isn't absolute, append + a slash to the constructed file name. note this can happen + if the client specified a drive other than the default */ + if (*cp != FTP_SLASH) + *cp1++ = FTP_SLASH; + /* append client path to our constructed file name */ + strcpy(cp1,cp); + } + /* the client specified path was relative */ + else + { + /* copy current working directory to file name (following + any drive letter stuff that might have been added above) */ + strcpy(cp1, ftp->cwd); + cp1 = &ftp->filename[strlen(ftp->filename)-1]; /* point to end */ + + /* if ftp->cwd is not terminated with a slash and the file spec + is not empty, append a slash */ + if ((*cp1 != FTP_SLASH) && *cp) + { + ++cp1; /* increment ptr past last character to NULL */ + *cp1++ = FTP_SLASH; + *cp1 = 0; + } + + /* make sure the concatenation of the specified file name to + the current working directory wont be too big for the + file name field */ + if ((strlen(ftp->filename) + strlen(cp)) >= sizeof(ftp->filename)) + { + ftpputs(ftp,"501 file name too long\r\n"); + return FALSE; + } + + /* concatenate the file spec from the command line to the + current working directory */ + strcat(ftp->filename, cp); + } + + return TRUE; /* function succeeded */ +} + + +/* FUNCTION: ftp_leave_passive_state() + * + * this function is called to make the session leave passive state + * + * PARAM1: ftpsvr *ftp + * + * RETURNS: + */ + +void ftp_leave_passive_state(ftpsvr * ftp) +{ + /* there's a little confusion about whether this field is 0 or + * -1 when the socket is unactive, so check for both + */ + if ((ftp->datasock != SYS_SOCKETNULL) && (ftp->datasock != 0)) + t_socketclose(ftp->datasock); + ftp->datasock = 0; + /* we aren't in passive mode anymore */ + ftp->passive_state = 0; + /* no data transfer command received while in passive state */ + ftp->passive_cmd = 0; + ftp->server_dataport = 0; +} + + + +/* FUNCTION: ftps_do_pasv() + * + * handle IPv4 PASV command + * + * Called when the client requests a transfer in "passive" mode. + * + * PARAM1: ftpsvr *ftp + * + * RETURNS: + */ + +#ifdef IP_V4 +void ftps_do_pasv(ftpsvr * ftp) +{ + /* do_pasv() may re-enter if the client sends us a PASV while we + * are transfering a file. This is an error on the client's part. + * Its not clear that this can happen given the way the + * main state machine works, but check for it just in case + */ + if (ftp->passive_state & FTPS_PASSIVE_CONNECTED) + { + ftpputs(ftp,"425 Data transfer already in progress\r\n"); + return; + } + + /* This will happen if the client had sent us a PASV and then sent + * us another one without an intervening data transfer command. + */ + if (ftp->passive_state & FTPS_PASSIVE_MODE) + { + ftp_leave_passive_state(ftp); + } + + /* call sockets routine to do passive open */ + ftps_v4pasv(ftp); + + /* we are now in passive mode, but the client hasn't connected yet */ + ftp->passive_state = FTPS_PASSIVE_MODE; + + /* we haven't received a data transfer command from the client yet */ + ftp->passive_cmd = 0; +} +#endif /* IP_V4 */ + + + +/* FUNCTION: ftps_cmd() + * + * called when we get a command in the FTPS_LOGGEDIN state + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: Returns 0 if OK, else ftp error. + */ + +int +ftps_cmd(ftpsvr * ftp) +{ + int i; /* scratch for command processing */ + char * cp; + char * cp1; + u_long lparm; /* scratch, for parameter extraction */ + u_short sparm; /* "" */ + u_long ftpcmd; /* 4 char command as number for fast switching */ + int relative_path; + + ftpcmd = 0L; + /* copy 4 bytes of ftp cmd text into local long value, replacing + unprintable chars with blanks */ + for (i = 0; i < 4; i++) + { + if (ftp->cmdbuf[i] >= ' ') + ftpcmd = (ftpcmd << 8) | ftp->cmdbuf[i]; + else /* space over unprintable characters */ + ftpcmd = (ftpcmd << 8) | ' '; + } + + /* switch on command */ + switch (ftpcmd) + { + case 0x53595354: /* "SYST" */ + /* see what Netscape does with this */ + ftpputs(ftp, "215 UNIX system type\r\n"); + break; + case 0x54595045: /* "TYPE" */ + if ((ftp->cmdbuf[5] == 'A') || (ftp->cmdbuf[5] == 'a')) + ftp->type = FTPTYPE_ASCII; + else /* we default all other types to binary */ + ftp->type = FTPTYPE_IMAGE; + ftpputs(ftp, ftp_cmdok); + break; + case 0x50574420: /* "PWD " */ + sprintf(ftp->filebuf, "257 \"%s\"\r\n", uslash(ftp->cwd)); + lslash(ftp->cwd); + ftpputs(ftp, ftp->filebuf); + break; + case 0x58505744: /* "XPWD" */ + sprintf(ftp->filebuf, "257 \"%s%s\"\r\n", DRIVE_PTR(ftp), ftp->cwd); + ftpputs(ftp, ftp->filebuf); + break; + case 0x55534552: /* "USER" */ + return(ftps_user(ftp)); + case 0x504f5254: /* PORT */ + cp = &ftp->cmdbuf[5]; /* point to IP address text */ + lparm = 0L; + for (i = 3; i >= 0; i--) /* extract 4 digit IP address */ + { + lparm |= (((u_long)atoi(cp)) << (i*8)); + cp = strchr(cp, ','); /* bump through number to comma */ + if (!cp) /* must be comma delimited */ + { + ftpputs(ftp,"501 invalid PORT command\r\n"); + break; + } + cp++; /* point to next digit */ + } + /* the C break key word really needs a parameter so constructs + * like this aren't necessary, anyway, if this is true, its + * because we broke out of the above for on an error and we + */ + if (!cp) + break; + sparm = (u_short)atoi(cp) << 8; + while (*cp >= '0')cp++; /* bump through number */ + if (*cp != ',') /* must be comma delimited */ + { + ftpputs(ftp,"501 invalid PORT command\r\n"); + break; + } + cp++; /* point to next digit */ + sparm |= atoi(cp); + + /* this will happen if the client sends us a PORT while we are + * transfering a file. this is an error on the client's part, + */ + /* actually, its not clear that this can happen given the way the + main state machine works, but check for it just in case */ + if (ftp->passive_state & FTPS_PASSIVE_CONNECTED) + { + ftpputs(ftp,"425 Data transfer already in progress\r\n"); + break; + } + /* this will happen if the client had sent us a PASV and then + * sent us a PORT without an intervening data transfer command. + */ + if (ftp->passive_state & FTPS_PASSIVE_MODE) + { + ftp_leave_passive_state(ftp); + } + + ftp->host = lparm; + ftp->dataport = sparm; + ftpputs(ftp, ftp_cmdok); + break; + case 0x51554954: /* QUIT" */ + /* if we don't have a file transfer going, kill sess now */ + if ((ftp->state != FTPS_SENDING) && (ftp->state != FTPS_RECEIVING)) + { + ftpputs(ftp, "221 Bye\r\n"); /* session terminating */ + ftp->state = FTPS_CLOSING; + /* delftp(ftp); */ + return -1; /* signal main loop to kill session */ + } + else + return 0; /* return without flushing QUIT */ + case 0x43574420: /* "CWD " */ + /* note the intent here is to end up with the client supplied + * drive string (as in "c:") in the drive field, and the client + * supplied current working directory, without any drive spec, + * in the cwd field. to this end we construct the fully + * qualified path, including the drive in the filename field + * which will + */ + cp = ftp_cmdpath(ftp); + if (!cp) break; + lslash(cp); /* convert slashes to local */ + + /* assume the path specified is not a relative path */ + relative_path = FALSE; + + /* point to beginning of file name */ + cp1 = ftp->filename; + + /* if this target system deals with DOS drive letters */ +#ifdef DRIVE_LETTERS + /* if the client specified path contains a colon in the right place */ + if (*cp && (*(cp + 1) == ':')) + { + /* copy the drive: to the beginning of the filename */ + *cp1++ = (char) upper_case(*cp); + *cp1++ = ':'; + + /* if the specified drive is the same as the current drive + and the client specified path does not start at the root */ + if ((upper_case(*cp) == upper_case(ftp->drive[0])) && + (*(cp + 2) != FTP_SLASH)) + { + /* then its a relative path */ + relative_path = TRUE; + } + + /* bump past drive and colon in client path */ + cp += 2; + } + /* client path does not contain a drive spec */ + else + { + /* so use the current drive */ + *cp1++ = ftp->drive[0]; + *cp1++ = ':'; + /* if client path does not start at the root */ + if (*cp != FTP_SLASH) + { + /* its a relative path */ + relative_path = TRUE; + } + } +#else /* DRIVE_LETTERS */ + /* target system is fortunate enough to not have to deal + with DOS drive letters */ + /* if client path does not start at root */ + if (*cp != FTP_SLASH) + { + /* else its a relative path */ + relative_path = TRUE; + } +#endif /* DRIVE_LETTERS */ + + /* if the client specified path is not relative */ + if (!relative_path) + { + /* in this case, cp now points to past any drive info in the + * path provided by the client and cp1 now points to past + * + * if the path provided by the client isn't absolute, append + * a slash to the constructed file name. note this can + * happen + */ + if (*cp != FTP_SLASH) + *cp1++ = FTP_SLASH; + strcpy(cp1,cp); + } + /* the client specified path was relative */ + else + { + /* copy current working directory to file name (following + any drive letter stuff that might have been added above) */ + strcpy(cp1, ftp->cwd); /* copy cwd for change */ + cp1 = ftp->filename + strlen(ftp->filename); /* start at end */ + while (*cp) + { + if (*cp == '.' && *(cp+1) == '.') /* double dot? */ + { /* back up 1 level */ + if (strlen(ftp->cwd) < 2) /* make sure we have room */ + { + ftpputs(ftp, "550 Bad path\r\n"); + ftp_flushcmd(ftp); + return 0; /* not a fatal error */ + } + /* null out last directory level */ + while (*cp1 != FTP_SLASH && cp1 > ftp->filename) + *cp1-- = 0; +#ifdef DRIVE_LETTERS + if (cp1 > (ftp->filename + 2)) +#else /* DRIVE_LETTERS */ + if(cp1 > ftp->filename) /* if not at root... */ +#endif /* DRIVE_LETTERS */ + *cp1 = 0; /* null over trailing slash */ + cp += 2; /* bump past double dot */ + } + else if(*cp == FTP_SLASH) /* embedded slash */ + cp++; /* just skip past it */ + else /* got a dir name, append to new path */ + { + if(*(cp1-1) != FTP_SLASH) /* if not at top... */ + *cp1++ = FTP_SLASH; /* add the slash to new path */ + while(*cp && *cp != FTP_SLASH) /* copy directory name */ + { + *cp1++ = *cp++; + if(cp1 >= &ftp->filename[FTPMAXPATH+2]) /* check length */ + { + ftpputs(ftp, "550 Path too long\r\n"); + ftp_flushcmd(ftp); + return 0; /* not a fatal error */ + } + } + } + } /* end of 'while(*cp)' loop */ +#ifdef DRIVE_LETTERS + if(cp1 == ftp->filename + 2) /* if at root... */ +#else /* DRIVE_LETTERS */ + if(cp1 == ftp->filename) /* if at root... */ +#endif /* DRIVE_LETTERS */ + cp1++; /* bump past slash */ + *cp1 = 0; /* null terminate new path */ + } + + /* new drive and/or directory is now in ftp->filename */ + /* verify path exists */ + if (!fs_dir(ftp)) + { + sprintf(ftp->filebuf, "550 Unable to find %s\r\n",ftp->filename); + ftpputs(ftp, ftp->filebuf); + break; + } + +#ifdef DRIVE_LETTERS + + /* store the drive into the filename in the drive field */ + ftp->drive[0] = ftp->filename[0]; + ftp->drive[1] = ':'; + ftp->drive[2] = 0; + /* store the file name sans drive info in the cwd field */ + strcpy(ftp->cwd,ftp->filename + 2); + +#else /* DRIVE_LETTERS */ + + /* store the file name in the cwd field */ + strcpy(ftp->cwd, ftp->filename); + +#endif /* DRIVE_LETTERS */ + + sprintf(ftp->filebuf, + "200 directory changed to %s%s\r\n", DRIVE_PTR(ftp), ftp->cwd); + ftpputs(ftp, ftp->filebuf); /* send reply to client */ + break; + case 0x4c495354: /* "LIST" */ + case 0x4e4c5354: /* "NLST" */ + listcmds++; + /* attempt to create a complete path from the current working + directory and the file spec in the command buffer. */ + if (!ftp_make_filename(ftp,TRUE)) + break; + + /* if we are in passive mode but the client hasn't connected to + data socket yet, just store the command so it will get executed + when the client connects */ + if (ftp->passive_state == FTPS_PASSIVE_MODE) + { + ftp->passive_cmd = ftpcmd; + break; + } + + + /* generate the listing, if the function fails, + send an error message back to the client */ + if (fs_dodir(ftp, ftpcmd)) + ftpputs(ftp, "451 exec error\r\n"); + break; + +#ifdef IP_V4 + case 0x50415356: /* "PASV" */ + ftps_do_pasv(ftp); + break; +#endif /* IP_V4 */ + +#ifdef IP_V6 + case 0x45505356: /* "EPSV" - IPv6 extended PASV */ + ftps_epsv(ftp); + break; + case 0x45505254: /* "EPRT" - IPv6 extended PORT */ + ftps_eprt(ftp); + break; +#endif /* IP_V6 */ + + /* some commands we know about and just don't do: */ + case 0x4d414342: /* "MACB" - ??? Netscape 3.0 for Win95 sends this */ + case 0x53495a45: /* "SIZE" - Netscape again. */ + case 0x4f505453: /* "OPTS" - IE 5.50 */ + ftpputs(ftp, ftp_badcmd); + break; + case 0x52455452: /* "RETR" */ + case 0x53544f52: /* "STOR" */ + /* attempt to create a complete path from the current working + directory and the file spec in the command buffer. */ + if (!ftp_make_filename(ftp,FALSE)) + break; + + /* ftp->filename now has drive:path/name of file to try for */ + + /* check for user permission */ + if(fs_permit(ftp) == FALSE) + { + ftpputs(ftp, ftp_noaccess); + ftp_xfercleanup(ftp); + break; + } + + /* verify that the name of the file we are trying to put or + get does not exist as a directory */ + if(fs_dir(ftp)) + { + ftpputs(ftp, "501 bad path\r\n"); + ftp_xfercleanup(ftp); + break; + } + + /* if we are in passive mode but the client hasn't connected to + data socket yet, just store the command so it will get executed + when the client connects */ + if (ftp->passive_state == FTPS_PASSIVE_MODE) + { + ftp->passive_cmd = ftpcmd; + break; + } + + IN_PROFILER(PF_FTP, PF_ENTRY); + if(ftpcmd == 0x52455452) /* RETR */ + ftp_sendfile(ftp); + else /* must be STOR */ + ftp_getfile(ftp); + IN_PROFILER(PF_FTP, PF_EXIT); + + break; + case 0x44454c45: /* "DELE" */ + /* attempt to create a complete path from the current working + directory and the file spec in the command buffer. */ + if (!ftp_make_filename(ftp,FALSE)) + { + sprintf(ftp->filebuf, "550 Unable to parse filename %s\r\n", \ + ftp->filename); + + ftpputs(ftp, ftp->filebuf); + break; + } + + lslash(ftp->filename); + + /* ftp->filename now has drive:path/name of file to try for */ + + /* check if the file that the client wants to delete exists */ + if (ftp->type == FTPTYPE_ASCII) + ftp->filep = vfopen(ftp->filename, "r"); /* ANSI translated mode */ + else + ftp->filep = vfopen(ftp->filename, "rb"); /* ANSI binary mode */ + + if (ftp->filep == NULL) + { + /* if we appended VFS path to our constructed file name dont say so */ + if (*(ftp->filename) == FTP_SLASH) + cp = ftp->filename + 1; + else + cp = ftp->filename; + + sprintf(ftp->filebuf, "550 No such file %s\r\n", cp); + ftpputs(ftp, ftp->filebuf); + break; + } + else + { + vfclose(ftp->filep); + } + + /* check for user permission */ + if(fs_permit(ftp) == FALSE) + { + ftpputs(ftp, ftp_noaccess); + break; + } + + if (vunlink(ftp->filename) != 0) + { + /* if we appended VFS path to our constructed file name dont say so */ + if (*(ftp->filename) == FTP_SLASH) + cp = ftp->filename + 1; + else + cp = ftp->filename; + + sprintf(ftp->filebuf, "550 Unable to delete file %s\r\n", cp); + ftpputs(ftp, ftp->filebuf); + break; + } + else + { + ftpputs(ftp, "250 DELE command successful\r\n"); + break; + } + case 0x4e4f4f50: /* "NOOP" */ + ftpputs(ftp, ftp_cmdok); + break; + default: + sprintf(ftp->filebuf, "500 Unknown cmd %s", ftp->cmdbuf); + ftpputs(ftp, ftp->filebuf); + } + ftp_flushcmd(ftp); + return 0; +} + + +/* FUNCTION: ftp_xfercleanup() + * + * Called after a file transfer to clean up session structure and + * handle replys. + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: void + */ + +void +ftp_xfercleanup(ftpsvr * ftp) +{ + /* close any open file */ + if(ftp->filep) + { + vfclose(ftp->filep); + ftp->filep = NULL; + } + /* close any open socket */ + if (ftp->datasock != SYS_SOCKETNULL) + { + t_socketclose(ftp->datasock); + ftp->datasock = SYS_SOCKETNULL; + } + ftp->state = FTPS_LOGGEDIN; + +#ifdef TCP_ZEROCOPY + /* don't orphan any packets we may have stored in ftpsq */ + while (ftp->ftpsq.q_len > 0) + tcp_pktfree ((PACKET)getq(&ftp->ftpsq) ); +#endif /* TCP_ZEROCOPY or not */ + + /* we aren't in passive mode anymore */ + ftp_leave_passive_state(ftp); +} + + + +#ifdef TCP_ZEROCOPY /* use InterNiche Zero-copy TCP socket extensions */ +extern PACKET tcp_pktalloc(int); +extern void tcp_pktfree(PACKET); +int ftps_rxupcall(struct socket * so, PACKET pkt, int code); +#endif /* TCP_ZEROCOPY */ + + +/* FUNCTION: ftp_sendfile() + * + * Send a file. Filename, Port, type, and IP address are all + * set in ftp structure. Returns 0 if OK, else ftp error. + * + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: Returns 0 if OK, else ftp error. + */ + +int +ftp_sendfile(ftpsvr * ftp) +{ + int e; + int reterr = 0; + u_long put_timer; /* timer for max time to loop in this routine */ + +#ifndef TCP_ZEROCOPY + int bytes = 0; +#endif + + /* See if this is start of send */ + if (ftp->state != FTPS_SENDING) + { + lslash(ftp->filename); + if (ftp->type == FTPTYPE_ASCII) + ftp->filep = vfopen(ftp->filename, "r"); + else + ftp->filep = vfopen(ftp->filename, "rb"); + if (!ftp->filep) + { + ftpputs(ftp, "451 aborted, can't open file\r\n"); + + /* if we are already connected to the client because we were + * in passive mode, close the connection to client and exit + */ + if (ftp->passive_state & FTPS_PASSIVE_MODE) + ftp_leave_passive_state(ftp); + return 451; + } + ftpputs(ftp, "150 Here it comes...\r\n"); + /* if we are not already connected from a previous PASV */ + if (!(ftp->passive_state & FTPS_PASSIVE_CONNECTED)) + { + /* connect to client */ + ftp->datasock = FTP_TCPOPEN(ftp); + if (ftp->datasock == SYS_SOCKETNULL) + { + ftpputs(ftp, "425 Can't open data connection\r\n"); + reterr = 425; + goto ftsnd_exit; + } + } + +#ifdef TCP_ZEROCOPY + ftp->iosize = tcp_mss(LONG2SO(ftp->datasock)); +#endif /* TCP_ZEROCOPY */ + + ftp->state = FTPS_SENDING; + ftp->filebuflen = 0; + } + + /* + * loop below while sending, quit when we reach MAX number of + * ftpticks we're allowed. The ftps_loop() routine will call us + * again later + */ + put_timer = (ftpticks + FTPTPS); /* set timeout tick */ + +#ifdef TCP_ZEROCOPY + /* different loops for ZEROCOPY and plain sockets */ + for (;;) + { + PACKET pkt; + if (ftp->pkt == NULL) /* need to read more file data */ + { + pkt = tcp_pktalloc(ftp->iosize); + if (!pkt) /* if no buffer, try again later */ + return 0; + e = vfread(pkt->nb_prot, 1, ftp->iosize, ftp->filep); + if (e < 0) + { + ftpputs(ftp, "451 aborted, file read error\r\n"); + reterr = 451; + break; + } + pkt->nb_plen = (unsigned)e; + } + else /* retry old packet saved in session structure */ + { + pkt = ftp->pkt; + } + + if (pkt->nb_plen) + { + e = tcp_xout(ftp->datasock, pkt); + if (e == ENP_RESOURCE) /* blocked */ + { + ftp->pkt = pkt; /* save pkt for later */ + tk_yield(); /* spin system */ + return 0; /* wait for socket to clear */ + } + else if(e < 0) + { + ftpputs(ftp, "426 aborted, data send error\r\n"); + reterr = 426; + if (pkt) + { + tcp_pktfree(pkt); + } + break; + } + else /* sent without error */ + { + /* tcp layer will free pkt when data is acked, just + clear to ftps pointer for now */ + ftp->pkt = NULL; + } + ftp->lasttime = ftpticks; /* reset timeout */ + /* + * force return to let other FTP sessions run if we have had CPU + * continuously for a longish while + */ + if (ftpticks > put_timer) + return 0; + } + else /* end of file & all bytes sent */ + { + tcp_pktfree(pkt); + ftp->pkt = NULL; + break; /* fall to send termination logic */ + } + } +#else /* not TCP_ZEROCOPY */ + for (;;) + { + if (ftp->filebuflen == 0) /* need to read more file data */ + { + /* if its an ASCII type transfer */ + if (ftp->type == FTPTYPE_ASCII) + { + /* then we need to insert a CR before any LF that is not + * already preceeded by an LF. + * Since the last character we read before filling up the + * file transfer buffer could be a lonely LF and in that + * case we'd have no room to insert the CR before it and + * it would be a righteous pain to keep track of this one + * boundary condition in the state machine, we will + * terminate the loop when there is still 1 byte left + */ + while (ftp->filebuflen < FILEBUFSIZE - 1) + { + int next_char; + int prev_char = 0; + + /* read next character from file */ + next_char = vgetc(ftp->filep); + /* break on end of file */ + if (next_char < 0) + break; + /* if we read an LF */ + if (next_char == '\n') + { + /* and the previous char wasn't a CR */ + if (prev_char != '\r') + { + /* insert a CR ahead of the LF */ + ftp->filebuf[ftp->filebuflen] = '\r'; + ftp->filebuflen++; + } + } + ftp->filebuf[ftp->filebuflen] = (char) next_char; + ftp->filebuflen++; + /* if we just read a LF, break. why? you ask. well + * what happens if the last byte we read before + * filling up the transfer buffer is a CR. when we + * come back in here again and read the LF, that LF + * looks like a lonely LF, so we'd end up inserting + * another CR, which wouldn't be right. so to protect + * against that and allow us to avoid storing the last + * character read in the ftpsrv structure in order to + * support this archaic feature, we just terminate the + * read when we get to the end of a line on the + * assumption that theres not going to be too many + * people moving text + */ + if (next_char == '\n') + break; + prev_char = next_char; + } + } + else /* its a binary transfer so just read the data */ + { + e = vfread(ftp->filebuf, 1, FILEBUFSIZE, ftp->filep); + if (e < 0) + { + ftpputs(ftp, "451 aborted, file read error\r\n"); + reterr = 451; + break; + } + ftp->filebuflen = (unsigned)e; + } + } + bytes = (int)ftp->filebuflen; + if (bytes) + { + e = t_send(ftp->datasock, ftp->filebuf, bytes, 0); + if (e < 0) + { + /* See what kind of error it is. If we're out of sockbuf + * space or buffers then + * return 0 to try again later. If its anything else then + * it's serious and we should abort with an error + */ + e = t_errno(ftp->datasock); + if((e == EWOULDBLOCK) || (e == ENOBUFS)) + { + return 0; /* out of socket space, try layer */ + } + ftpputs(ftp, "426 aborted, data send error\r\n"); + reterr = 426; + break; + } + else /* no send error */ + { +#ifdef NPDEBUG /* sanity test socket return values */ + if (e > FILEBUFSIZE) + { dtrap(); /* serious logic problem here */ + return 0; + } +#endif /* NPDEBUG */ + ftp->filebuflen -= e; +#ifdef NPDEBUG + if ((int)ftp->filebuflen < 0) + { dtrap(); + return 0; + } +#endif + if (e != bytes) /* partial send on NBIO socket */ + { + if (e != 0) /* sent some data, but not all - move buffer */ + { + MEMMOVE(ftp->filebuf, ftp->filebuf+e, ftp->filebuflen); + } + return 0; /* try again later */ + } + } + + ftp->lasttime = ftpticks; /* reset timeout */ + + /* + * force return to let other FTP sessions run if we have had CPU + * continuously for a longish while + */ + if (ftpticks > put_timer) + { + return 0; + } + } + else /* end of file & all bytes sent */ + break; /* fall to send termination logic */ + } +#endif /* TCP_ZEROCOPY */ + +ftsnd_exit: + + /* get here if EOF or fatal error */ + +#ifdef NPDEBUG + if (reterr == 0 && ftp->filebuflen != 0) /* buffer should be empty */ + { dtrap(); } +#endif + + /* first reply to user if xfer was OK */ + if (!reterr) + ftpputs(ftp, "226 Transfer OK, Closing connection\r\n"); + + ftp_xfercleanup(ftp); + return reterr; +} + + +/* FUNCTION: ftp_getfile() + * + * Get a file from client. We open a connection to the client + * and he will send it to us. Filename, Port, type, and IP + * address are all set in ftp structure. + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: Returns 0 if OK, else ftp error. + */ + +int +ftp_getfile(ftpsvr * ftp) +{ + int bytes; + int e; + int reterr = 0; + u_long get_timer; /* ctick to force a return */ + + /* See if this is start of receive operation */ + if (ftp->state != FTPS_RECEIVING) + { + lslash(ftp->filename); + + if (ftp->type == FTPTYPE_ASCII) + ftp->filep = vfopen(ftp->filename, "w"); + else + ftp->filep = vfopen(ftp->filename, "wb"); + if (!ftp->filep) + { + ftpputs(ftp, "451 aborted, can't open file\r\n"); + + /* if we are already connected to the client because we were + * in passive mode, close the connection to client and exit + */ + if (ftp->passive_state & FTPS_PASSIVE_MODE) + ftp_leave_passive_state(ftp); + + return 550; + } + /* if we are not already connected from a previous PASV */ + if (!(ftp->passive_state & FTPS_PASSIVE_CONNECTED)) + { + ftp->datasock = FTP_TCPOPEN(ftp); + if (ftp->datasock == SYS_SOCKETNULL) + { + ftpputs(ftp, "425 Can't open data connection\r\n"); + reterr = 425; + goto ftget_exit; + } + } + ftpputs(ftp, "150 Connecting for STOR\r\n"); + ftp->state = FTPS_RECEIVING; +#ifdef TCP_ZEROCOPY + ftp->rxcode = 0; + t_setsockopt(ftp->datasock, 0, SO_CALLBACK, (void*)ftps_rxupcall, 0); +#endif /* TCP_ZEROCOPY */ + } + + get_timer = ftpticks + FTPTPS; /* set tick to timeout this loop */ + +#ifdef TCP_ZEROCOPY + /* different data transfer loops for zerocopy option */ + for (;;) + { + PACKET pkt; + + /* handle any packets the upcall has queued for us */ + while (ftp->ftpsq.q_len > 0) + { + LOCK_NET_RESOURCE(NET_RESID); /* syncronize ftpsq with upcall */ + pkt = (PACKET)getq(&(ftp->ftpsq)); + UNLOCK_NET_RESOURCE(NET_RESID); + if (ftp->rxcode && ftp->rxcode != ESHUTDOWN) /* network error? */ + { + tcp_pktfree(pkt); + continue; + } + bytes = pkt->nb_plen; + e = vfwrite(pkt->nb_prot, 1, bytes, ftp->filep); + tcp_pktfree(pkt); + + if (e == 0) /* memory allocation failed, not enough space to write a file on the server */ + { + ftpputs(ftp, "452 Insufficient storage space, file write error\r\n"); + reterr = 0; /* not a fatal error to abort */ + notfatal = 1; + goto ftget_exit; + } + if (e != bytes) + { + dtrap(); + ftpputs(ftp, "450 File unavailable, file write error\r\n"); + reterr = 0; /* not a fatal error to abort */ + notfatal = 1; + goto ftget_exit; + } + /* force return to let other FTP sessions run if we have had CPU + * continuously for a while. + */ + if (ftpticks > get_timer) + break; + +#if !defined(CHRONOS) && !defined(SUPERLOOP) + /* the yield here not only lets other tasks run, but if we have + * incoming data in the rcvdq it gives pktdemux a chance to get it + * into our queue via the upcall. This is not an Issue on Chronos + * since it runs the Net task at a higher priority, and it's + * dangerous on superloops. + */ + tk_yield(); /* let other tasks run */ +#endif /* neither CHRONOS nor SUPERLOOP */ + + } + if (ftp->rxcode) /* network error? */ + { + if (ftp->rxcode == ESHUTDOWN) /* file receive done */ + reterr = 0; /* no error */ + else + { + reterr = 426; + ftpputs(ftp, "426 aborted, data recv error\r\n"); + } + break; /* break out of for loop */ + } + return 0; /* done for now, let other things run */ + } +#else /* not TCP_ZEROCOPY */ + for (;;) + { + bytes = t_recv(ftp->datasock, ftp->filebuf, 1024, 0); + if (bytes > 0) + { + e = vfwrite(ftp->filebuf, 1, bytes, ftp->filep); + if (e == 0) /* memory allocation failed, not enough space to write a file on the server */ + { + ftpputs(ftp, "452 Insufficient storage space, file write error\r\n"); + reterr = 0; /* not a fatal error to abort */ + notfatal = 1; + break; + } + if (e != bytes) + { + dtrap(); + ftpputs(ftp, "450 File unavailable, file write error\r\n"); + reterr = 0; /* not a fatal error to abort */ + notfatal = 1; + break; + } + ftp->lasttime = ftpticks; /* reset timeout */ + } + if (bytes < 0) /* error, no data (EWOULDBLOCK) or finished */ + { + e = t_errno(ftp->datasock); + if (e == EWOULDBLOCK) + return 0; /* no work right now, let other things run */ + else /* probably socket cloesed due to end of file */ + { + bytes = 0; + break; /* break our of read loop to exit code */ + } + } + else if(bytes == 0) /* another form of broken? */ + { + /* bytes = -1; */ + ftp->state = FTPS_CLOSING; + break; + } + /* + * force return to let other FTP sessions run if we have had CPU + * continuously for a longish while. + */ + if (ftpticks > get_timer) + return 0; + } /* end of forever loop */ + + if (bytes < 0) + { + ftpputs(ftp, "426 aborted, data recv error\r\n"); + reterr = 426; + } +#endif /* TCP_ZEROCOPY or not */ + +ftget_exit: + + /* first reply to user if xfer was OK */ + if (!reterr && !notfatal) + ftpputs(ftp, "226 Transfer OK, Closing connection\r\n"); + + ftp_xfercleanup(ftp); + return reterr; +} + + +#ifdef TCP_ZEROCOPY + +/* FUNCTION: ftps_rxupcall() + * + * Upcall handler for TCP_ZEROCOPY data processing. This is passed + * packets directly from the sockets layer for fast, copyless processing + * + * PARAM1: struct socket * so + * PARAM2: PACKET pkt + * PARAM3: int code + * + * RETURNS: 0 if packet accepted, -1 if not. + */ + +int +ftps_rxupcall(struct socket * so, PACKET pkt, int code) +{ + ftpsvr * ftps; + + for (ftps = ftplist; ftps; ftps = ftps->next) + if ((long)ftps->datasock == SO2LONG(so)) + break; + + if (!ftps) /* can't find socket? */ + { + /* if no pkt and code is set, this may be a reset (or + * other cleanup) of a stale socket for which we have + * already cleared out the ftps. In this case just return, + * else dtrap & return error code. + */ + if (pkt || (code == 0)) + { + dtrap(); /* If pkt or no code, tel programmer */ + return -1; /* return error code */ + } + return 0; /* not an error */ + } + ftps->rxcode = code; /* save code */ + + if (pkt) /* save pkt, if any */ + putq( &(ftps->ftpsq), pkt ); + +#ifndef SUPERLOOP + /* If the queue is filling, spin server task */ + if(ftps->ftpsq.q_len > 10) + { + TK_WAKE(&to_ftpsrv); /* make sure it's awake */ + tk_yield(); /* let FTP server task spin */ + } +#endif /* SUPERLOOP */ + + ftps->lasttime = ftpticks; /* reset timeout */ + + return 0; +} +#endif /* TCP_ZEROCOPY or not */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.h b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.h new file mode 100644 index 0000000..d2a5d61 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsrv.h @@ -0,0 +1,159 @@ +/* + * FILENAME: FTPSRV.H + * + * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTP + * + * ROUTINES: + * + * PORTABLE: yes + */ + +/* ftpsrv.h FTP server for WebPort HTTP server. + * 1/12/97 - Created. John Bartas + */ +#ifndef FTPSVR_H +#define FTPSVR_H 1 + + +#ifdef VFS_FILES /* from inet\ipport.h */ +#include "vfsfiles.h" +#else /* map "vf" vcalls to native file system */ +#ifndef vfopen /* allow override in ftpport.h */ +#define vfopen(file, mode) fopen(file, mode) +#define vfread(buf, ct, size, fp) fread(buf, ct, size, fp) +#define vfwrite(buf, ct, size, fp) fwrite(buf, ct, size, fp) +#define vgetc(fp) fgetc(fp) +#define vfclose(fp) fclose(fp) +#define vunlink(fp) remove(fp) +#define VFILE FILE +#endif /* vfsopen */ +#endif /* VFS_FILES */ + +#define FTP_PORT 21 /* standard FTP command port */ + +struct userstruct { + char username[FTPMAXUSERNAME]; + char password[FTPMAXUSERPASS]; + char home[FTPMAXPATH+2]; /* user's "home" directory */ + void * group; /* for use by port */ +}; +typedef struct userstruct userinfo; + +#ifndef ip_addr +#define ip_addr u_long +#endif + +struct ftpsvrs { + struct ftpsvrs * next; /* list link */ + int inuse; /* re-entry semaphore */ + SOCKTYPE sock; /* client command socket */ + SOCKTYPE datasock;/* client data socket */ + int state; /* one of FTPS_ defines below */ + u_long lasttime; /* ftptick when last action occured */ + userinfo user; + int logtries; /* retry count of logins */ + int type; /* ASCII or BINARY */ + VFILE * filep; /* pointer to open file during IO */ +#ifdef IP_V6 + ip6_addr ip6_host; /* host if domain == AF_INET6 */ +#endif /* IP_V6 */ + ip_addr host; /* FTP client */ + u_short dataport; /* client data TCP port */ + char * lastreply; /* last reply string sent, for debugging */ + unsigned int passive_state; /* state info for PASV command */ + u_long passive_cmd; /* file XFER command in passive state */ + u_short server_dataport; /* data port we listen on in passive mode */ +#ifdef DRIVE_LETTERS + char drive[4]; /* usually "c:\0" */ +#endif /* DRIVE_LETTERS */ + char cwd[FTPMAXPATH+1]; /* current directory, e.g. "/" or "/tmp/foo/" */ + char filename[FTPMAXPATH+FTPMAXFILE]; + char cmdbuf[CMDBUFSIZE]; /* buffer for comamnds from client */ + unsigned cmdbuflen; /* number of bytes currently receieved in cmdbuf */ + char filebuf[FILEBUFSIZE]; /* file buffer for data socket & file IO */ + unsigned filebuflen; /* amount of data actually in filebuf */ +#ifdef TCP_ZEROCOPY + PACKET pkt; /* packet currently queued for send */ + queue ftpsq; /* queue of received PACKETs */ + int rxcode; /* last receive code */ + int iosize; /* optimal IO size (TCP MSS) */ +#endif /* TCP_ZEROCOPY */ + int wFlag; /* flags for write blocked, et. al. */ + int domain; /* AF_INET or AF_INET6 */ +}; +typedef struct ftpsvrs ftpsvr; + +extern ftpsvr * ftplist; /* master list of FTP connections */ + +extern u_long ftps_connects; +extern u_long ftps_txfiles; +extern u_long ftps_rxfiles; +extern u_long ftps_txbytes; +extern u_long ftps_rxbytes; +extern u_long ftps_dirs; + + +/* ftpsvr.states: */ +#define FTPS_CONNECTING 1 /* connected, no USER info yet */ +#define FTPS_NEEDPASS 2 /* user OK, need password */ +#define FTPS_LOGGEDIN 3 /* ready to rock */ +#define FTPS_SENDING 4 /* sending a data file in progress */ +#define FTPS_RECEIVING 5 /* receiveing a data file in progress */ +#define FTPS_CLOSING 9 /* closing */ + +#define FTPTYPE_ASCII 1 +#define FTPTYPE_IMAGE 2 + +/* ftpsvr.passive_state bits */ +#define FTPS_PASSIVE_MODE 0x01 /* session is in passive mode */ +#define FTPS_PASSIVE_CONNECTED 0x02 /* client has connected to data port */ + +/* FTP server internal commands */ +char * ftp_cmdpath(ftpsvr * ftp); /* extract path from cmd text */ +char * uslash(char * path); /* make path into UNIX slashes */ + +/* required OS dependant routines */ +int fs_dodir(ftpsvr * ftp, u_long ftpcmd); +void lslash(char * path); /* make path into local slashes */ +int fs_dir(ftpsvr * ftp); /* verify drive:/path exists */ +int fs_permit(ftpsvr * ftp); /* verify user permission */ +int fs_lookupuser(ftpsvr * ftp, char * username); + +/* macro to insert optional drive letter in sprintfs */ +#ifdef DRIVE_LETTERS +#define DRIVE_PTR(ftp) ftp->drive +#else /* drive not supported, insert pointer to null */ +#define DRIVE_PTR(ftp) "" +#endif + +/* prototype server exported routines */ +ftpsvr * ftps_connection(SOCKTYPE); /* new connection */ +void ftp_leave_passive_state(ftpsvr * ftp); +void ftps_loop(void); /* periodic loop (tick) */ +int ftps_v4pasv(ftpsvr * ftp); +int ftps_v6pasv(ftpsvr * ftp); +void ftps_eprt(ftpsvr * ftp); +void ftps_epsv(ftpsvr * ftp); + +/* define the macro/routine FTP_TCPOPEN() based on version ifdefs */ + +#ifdef IP_V4 /* begin version mess */ +#ifndef IP_V6 /* IP_V4 only */ +SOCKTYPE ftp4open(ftpsvr * ftp); +#define FTP_TCPOPEN(ftp) ftp4open(ftp) +#else /* IP_V4 and IP_V6 */ +SOCKTYPE FTP_TCPOPEN(ftpsvr * ftp); /* dual mode uses routine */ +#endif /* IP_V4 */ +#else /* IP_V6 only */ +SOCKTYPE ftp6open(ftpsvr * ftp); +#define FTP_TCPOPEN(ftp) ftp6open(ftp) +#endif /* IP_V6 only */ + +#endif /* FTPSVR_H */ + +/* end of file ftpsrv.h */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpssock.c b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpssock.c new file mode 100644 index 0000000..f8e05ff --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpssock.c @@ -0,0 +1,759 @@ +/* + * FILENAME: ftpssock.c + * + * Copyright 2000 - 2002 By InterNiche Technologies Inc. All rights reserved + * + * Sockets specific code for FTP. FTP Implementations on APIs + * other than sockets need to replace these. + * + * MODULE: FTP + * + * ROUTINES: ftp_cmdcb(), ftp_datacb(), t_tcplisten(), + * ROUTINES: FTP_TCPOPEN(), ftp4open(), ftp6open(), SO_GET_FPORT(), + * ROUTINES: SO_GET_LPORT(), ftps_v4pasv(), ftps_eprt(), ftps_epsv(), + * + * PORTABLE: yes + */ + +/* Additional Copyrights: */ + +/* ftpssock.c + * Portions Copyright 1996 by NetPort Software. All rights reserved. + * The Sockets-dependant portion of the FTP Server code. + * 11/24/96 - Created by John Bartas + */ + +#include "ftpport.h" /* TCP/IP, sockets, system info */ +#include "ftpsrv.h" + +#ifdef IP_V6 +#include "socket6.h" +#endif + + +#ifdef MINI_TCP + +#include "msring.h" +extern struct msring ftps_msring; + +#ifndef SUPERLOOP +extern TK_OBJECT(to_ftpsrv); +#endif + + +/* ftp_cmcb() - ftp command connection callback */ +int +ftp_cmdcb(int code, M_SOCK so, void * data) +{ + int e = 0; + + switch(code) + { + case M_OPENOK: /* new socket is connected */ + msring_add(&ftps_msring, so); + break; + case M_CLOSED: /* TCP lost socket connection */ + break; /* let stale conn timer catch these */ + case M_RXDATA: /* received data packet, let recv() handle it */ + case M_TXDATA: /* ready to send more, http_loop will do it */ + e = -1; /* return nonzero code to indicate we don't want it */ + break; + default: + dtrap(); /* not a legal case */ + return 0; + } + +#ifdef SUPERLOOP + ftps_loop(); /* give loop a spin */ +#else /* multitasking */ + TK_WAKE(&to_ftpsrv); /* wake webserver task */ +#endif + + USE_VOID(data); + return e; + +} + +/* ftp_datacb() - ftp data socket connection callback */ + +int +ftp_datacb(int code, M_SOCK so, void * data) +{ + int e = 0; + + switch(code) + { + case M_OPENOK: /* new socket is connected */ + /* if this FTP was listening for a data connection, + * switch its listening socket for the data socket + * and close the listening socket + */ + if (so->app_data) + { + ftpsvr * ftp; + M_SOCK old_so; + + ftp = (ftpsvr *)(so->app_data); + old_so = ftp->datasock; + ftp->datasock = so; + if (old_so != SYS_SOCKETNULL) + { + UNLOCK_NET_RESOURCE(NET_RESID); + m_close(old_so); + LOCK_NET_RESOURCE(NET_RESID); + } + } + UNLOCK_NET_RESOURCE(NET_RESID); + m_ioctl(so, SO_NONBLOCK, NULL); /* make socket non-blocking */ + LOCK_NET_RESOURCE(NET_RESID); + break; + case M_RXDATA: + e = -1; /* return nonzero code to indicate we don't want it */ + break; + case M_TXDATA: + case M_CLOSED: /* lost ftp data socket connection */ + break; + default: + dtrap(); /* not a legal case */ + return 0; + } + +#ifdef SUPERLOOP + ftps_loop(); /* give loop a spin */ +#else /* multitasking */ + TK_WAKE(&to_ftpsrv); /* wake webserver task */ +#endif + + USE_VOID(data); + return e; +} + + +#endif /* MINI_TCP */ + + +/* FUNCTION: t_tcplisten() + * + * t_tcplisten() implementation for NetPort sockets. Local port + * (lport) is passed in local endian. If lport is 0 (wildcard), then + * selected value is filled in to caller's variable. + * + * PARAM1: u_short * lport + * + * RETURNS: returns a listening socket, or SYS_SOCKETNULL if error. + */ + + +#ifdef MINI_TCP +SOCKTYPE +t_tcplisten(u_short * lport, int domain) +{ + int e; + SOCKTYPE sock; + struct sockaddr_in ftpsin; + + ftpsin.sin_addr.s_addr = INADDR_ANY; + ftpsin.sin_port = htons(*lport); + + if (*lport == FTP_PORT) + sock = m_listen(&ftpsin, ftp_cmdcb, &e); + else + sock = m_listen(&ftpsin, ftp_datacb, &e); + + if (sock == INVALID_SOCKET) + { +listenerr: + dprintf("error %d starting listen on ftp server\n", e); + return SYS_SOCKETNULL; + } + + /* put socket in non-blocking mode */ + e = m_ioctl(sock, SO_NBIO, NULL); + if (e != 0) + { + m_close(sock); + goto listenerr; + } + + /* if wildcard port requested, return assigned port */ + if (*lport == 0) + *lport = htons(sock->lport); + + return sock; +} + +#else /* full-sockets TCP */ + +SOCKTYPE +t_tcplisten(u_short * lport, int domain) +{ + int e; + SOCKTYPE sock; + + sock = t_socket(domain, SOCK_STREAM, 0); + if (sock == SYS_SOCKETNULL) + return sock; + + switch(domain) + { +#ifdef IP_V4 + case AF_INET: + { + struct sockaddr_in ftpsin; + int addrlen = sizeof(ftpsin); + + ftpsin.sin_family = AF_INET; + ftpsin.sin_addr.s_addr = INADDR_ANY; + ftpsin.sin_port = htons(*lport); + e = t_bind(sock, (struct sockaddr*)&ftpsin, addrlen); + if (e != 0) + { + e = t_errno(sock); + dtrap(); + dprintf("error %d binding tcp listen on port %d\n", + e, htons(*lport)); + return SYS_SOCKETNULL; + } + if(*lport == 0) /* was it wildcard port? */ + *lport = htons(ftpsin.sin_port); /* return it to caller */ + } + break; +#endif /* IP_V4 */ +#ifdef IP_V6 + case AF_INET6: + { + struct sockaddr_in6 ftpsin6; + int addrlen = sizeof(ftpsin6); + + IP6CPY(&ftpsin6.sin6_addr, &in6addr_any); + ftpsin6.sin6_port = htons(*lport); + ftpsin6.sin6_family = AF_INET6; + e = t_bind(sock, (struct sockaddr *)&ftpsin6, addrlen); + if (e != 0) + { + e = t_errno(sock); + dtrap(); + dprintf("error %d binding ftp6 listen on port %d\n", + e, htons(*lport)); + return SYS_SOCKETNULL; + } + if (*lport == 0) /* was it wildcard port? */ + *lport = htons(ftpsin6.sin6_port); /* return it to caller */ + } + break; +#endif /* IP_V6 */ + default: + dtrap(); /* bad domain parameter */ + return SYS_SOCKETNULL; + } /* end switch(domain) */ + + /* For FTP, put socket in non-block mode */ + t_setsockopt(sock, SOL_SOCKET, SO_NBIO, NULL, 0); + + e = t_listen(sock, 5); + if (e != 0) + { + e = t_errno(sock); + dprintf("error %d starting listen on ftp server\n", e); + return SYS_SOCKETNULL; + } + + return sock; /* return listen sock to caller */ +} +#endif /* notdef MINI_TCP */ + + + + +/* FUNCTION: ftp4open() + * FUNCTION: ftp6open() + * FUNCTION: FTP_TCPOPEN() (may be macro) + * + * FTP's TCP active open routine(s). Provided for FTP server to + * can open an active TCP connection, such as FTP data. Versions + * are provided for IPv4 and IPv6. The routine is intended to + * be mapped to the macro FTP_TCPOPEN(), which is also provided + * as a dual-mode function below. + * + * PARAM1: ftpsrv * ftp + * + * RETURNS: Returns conencted socket if OK, + * SYS_SOCKETNULL on error + */ + +#ifndef FTP_TCPOPEN /* see if it's defined */ + +/* dual-mode version */ +SOCKTYPE +FTP_TCPOPEN(ftpsvr * ftp) +{ +#ifdef IP_V4 + if(ftp->domain == AF_INET) + return(ftp4open(ftp)); +#endif /* IP_V4 */ +#ifdef IP_V6 + if(ftp->domain == AF_INET6) + return(ftp6open(ftp)); +#endif /* IP_V6 */ + + dtrap(); /* bad domain setting */ + return SYS_SOCKETNULL; +} +#endif /* FTP_TCPOPEN */ + + +#ifdef IP_V4 +SOCKTYPE +ftp4open(ftpsvr * ftp) +{ + int e; /* error holder */ + SOCKTYPE sock; + struct sockaddr_in ftpsin; + + sock = t_socket(AF_INET, SOCK_STREAM, 0); + if (sock == SYS_SOCKETNULL) + return sock; + + /* Change the socket options to allow address re-use. A customer + * requested this to ease implementing an FTP client with multiple + * connections. + */ + if (ftp->server_dataport) + { +#ifndef MINI_TCP + int opt = 1; /* boolean option value holder */ + + e = t_setsockopt(sock, 0, SO_REUSEADDR, &opt, sizeof(opt)); + if (e != 0) + { + e = t_errno(sock); + dtrap(); + dprintf("error %d setting SO_REUSEADDR on port %d\n", + e, ftp->server_dataport); + return SYS_SOCKETNULL; + } + + /* Bind local port to the socket we just created */ + ftpsin.sin_family = AF_INET; + ftpsin.sin_addr.s_addr = INADDR_ANY; + ftpsin.sin_port = htons(ftp->server_dataport); + + e = t_bind(sock, (struct sockaddr*)&ftpsin, sizeof(ftpsin)); + if (e != 0) + { + e = t_errno(sock); + dtrap(); + dprintf("error %d binding tcp listen on port %d\n", + e, ftp->server_dataport); + return SYS_SOCKETNULL; + } +#else + sock->lport = htons(ftp->server_dataport); +#endif /* MINI_TCP */ + } + + ftpsin.sin_addr.s_addr = htonl(ftp->host); + ftpsin.sin_port = htons(ftp->dataport); + +#ifdef MINI_TCP + sock->app_data = NULL; + e = m_connect(sock, &ftpsin, ftp_datacb); +#else + ftpsin.sin_family = AF_INET; + e = t_connect(sock, (struct sockaddr*)&ftpsin, sizeof(ftpsin)); +#endif + if (e != 0) + { + dtrap(); +#ifndef MINI_TCP + t_errno(sock); /* so debugger can see error */ +#endif + return SYS_SOCKETNULL; + } + + /* FTP data socket can be in blocking or non-blocking mode */ +#ifdef MINI_TCP + m_ioctl(sock, SO_NBIO, NULL); +#else + t_setsockopt(sock, 0, SO_NBIO, NULL, 0); +#endif + + return sock; +} +#endif /* IP_V4 */ + +/* FUNCTION: ftp6open() + * + * v6 version of FTP4open() + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: Returns conencted socket if OK, SYS_SOCKETNULL on error + */ + +#ifdef IP_V6 +SOCKTYPE +ftp6open(ftpsvr * ftp) +{ + int e; /* error holder */ + SOCKTYPE sock; + struct sockaddr_in6 ftpsin; + unshort lport; + + lport = ftp->server_dataport; + + sock = t_socket(AF_INET6, SOCK_STREAM, 0); + if (sock == SYS_SOCKETNULL) + return sock; + + /* Change the socket options to allow address re-use. A customer + * requested this to ease implementing an FTP client with multiple + * connections. + */ + if (lport) + { + int opt = 1; + + e = t_setsockopt(sock, 0, SO_REUSEADDR, &opt, sizeof(opt)); + if (e != 0) + { + e = t_errno(sock); + dtrap(); + dprintf("error %d setting SO_REUSEADDR on port %d\n", e, lport); + return SYS_SOCKETNULL; + } + + /* Bind local port to the socket we just created */ + ftpsin.sin6_family = AF_INET6; + IP6CPY(&ftpsin.sin6_addr, &ip6unspecified); + ftpsin.sin6_port = htons(lport); + + e = t_bind(sock, (struct sockaddr*)&ftpsin, sizeof(ftpsin)); + if (e != 0) + { + e = t_errno(sock); + dtrap(); + dprintf("error %d binding tcp listen on port %d\n", e, lport); + return SYS_SOCKETNULL; + } + } + + IP6CPY(&ftpsin.sin6_addr, &ftp->ip6_host); + ftpsin.sin6_port = htons(ftp->dataport); + + ftpsin.sin6_family = AF_INET6; + e = t_connect(sock, (struct sockaddr*)&ftpsin, sizeof(ftpsin)); + if (e != 0) + { + dtrap(); + t_errno(sock); /* so debugger can see error */ + return SYS_SOCKETNULL; + } + + /* FTP data socket can be in blocking or non-blocking mode */ + t_setsockopt(sock, SOL_SOCKET, SO_NBIO, NULL, 0); + + return sock; +} +#endif /* IP_V6 */ + + +#ifndef MINI_TCP + +/* FUNCTION: SO_GET_FPORT() + * + * Return the foreign port of a socket. No error checking is done. It's + * up to the caller to make sure this socket is connected before calling. + * + * PARAM1: the socket + * + * RETURNS: Returns the foreign port of the passed socket. + */ + +unshort +SO_GET_FPORT(SOCKTYPE sock) +{ + struct sockaddr client; + int clientsize; + unshort port; + + clientsize = sizeof(client); + t_getpeername(sock, &client, &clientsize); + +#ifdef IP_V4 +#ifndef IP_V6 /* v4 only case: */ + port = ((struct sockaddr_in *)(&client))->sin_port; +#else /* dual mode */ + if(clientsize == sizeof(struct sockaddr_in)) + port = ((struct sockaddr_in *)(&client))->sin_port; + else + port = ((struct sockaddr_in6 *)(&client))->sin6_port; +#endif /* end dual mode code */ +#else /* no v4, v6 only */ + port = ((struct sockaddr_in6 *)(&client))->sin6_port; +#endif /* v6 only */ + + return (ntohs(port)); +} + +/* FUNCTION: SO_GET_LPORT() + * + * Return the foreign port of a socket. No error checking is done. It's + * up to the caller to make sure this socket is connected before calling. + * + * PARAM1: the socket + * + * RETURNS: Returns the foreign port of the passed socket. + */ + +unshort +SO_GET_LPORT(WP_SOCKTYPE sock) +{ + struct sockaddr_in client; + int clientsize; + unshort port; + + clientsize = sizeof(client); + t_getsockname(sock, (struct sockaddr *) &client, &clientsize); + +#ifdef IP_V4 +#ifndef IP_V6 /* v4 only case: */ + port = ((struct sockaddr_in *)(&client))->sin_port; +#else /* dual mode */ + if(clientsize == sizeof(struct sockaddr_in)) + port = ((struct sockaddr_in *)(&client))->sin_port; + else + port = ((struct sockaddr_in6 *)(&client))->sin6_port; +#endif /* end dual mode code */ +#else /* no v4, v6 only */ + port = ((struct sockaddr_in6 *)(&client))->sin6_port; +#endif /* v6 only */ + + return (ntohs(port)); +} + +#endif /* MINI_TCP */ + + +/* error reporting mechanism for open sessions. "text" should start + * with an FTP code (e.g. "425 " since it will be sent to client + * on the command connection. + */ +extern int ftpputs(ftpsvr * ftp, char * text); + +static char * err = "425 Can't open data connection\r\n"; + +#ifdef IP_V4 +int +ftps_v4pasv(ftpsvr * ftp) +{ + SOCKTYPE sock; + u_short port; + unsigned long addr; + char responseBuf[80]; + + /* create a TCP socket to listen on, it will be the data socket. + * First set port to 0 so sockets will pick one for us + */ + port = 0; + sock = t_tcplisten(&port, AF_INET); /* call API to start listen */ + if (sock == SYS_SOCKETNULL) /* if socket creation failed */ + { + ftpputs(ftp, err); + return EIEIO; + } + + /* get our address and data port so we can tell the client + * what address to connect to. + */ + +#ifdef MINI_TCP + sock->app_data = (void *)ftp; /* ptr back to FTP server state */ + addr = ntohl(ftp->sock->lhost); /* address from connected cmd sock */ + port = ntohs(sock->lport); /* port from listening data sock */ +#else /* BSDish sockets */ +{ + struct sockaddr_in our_addr; + int sa_len = sizeof(our_addr); + + if (t_getsockname(ftp->sock,(struct sockaddr *) &our_addr, &sa_len)) + { + /* tell client pasv failed */ + ftpputs(ftp,err); + return t_errno(sock); + } + + /* extract and convert to local endian our command socket address */ + addr = ntohl(our_addr.sin_addr.s_addr); + + /* get our port on the data socket */ + if (t_getsockname(sock,(struct sockaddr *) &our_addr, &sa_len)) + { + /* close the socket we just opened */ + t_socketclose(sock); + /* tell client pasv failed */ + ftpputs(ftp,err); + return t_errno(sock); + } + + /* extract and convert to local endian our data socket port */ + port = ntohs(our_addr.sin_port); +} +#endif /* MINI_TCP or BSD sockets */ + + /* create our response which tells the client what address and + * port to connect to + */ + sprintf(responseBuf, + "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n", + (int) (addr >> 24), (int) ((addr >> 16) & 0xff), + (int) ((addr >> 8) & 0xff), (int) (addr & 0xff), + (int) (port >> 8),(int) (port & 0xff)); + ftpputs(ftp,responseBuf); + + ftp->server_dataport = port; + ftp->datasock = sock; + + return 0; +} +#endif /* IP_V4 */ + +#ifdef IP_V6 + +void +ftps_eprt(ftpsvr * ftp) +{ + char * cp; /* scratch command buffer pointer */ + char delimit; /* delimiter, from string */ + int domain; /* domain from command */ + unshort port; /* port number form command */ + char addr[16]; /* local address buffer (binary) */ + char responseBuf[80]; + + /* point into command buffer after "EPSV " string */ + cp = &ftp->cmdbuf[5]; + delimit = *cp++; /* read delimiter */ + + if(*cp == '1') + domain = AF_INET; + else if(*cp == '2') + domain = AF_INET6; + else + { + ftpputs(ftp,"501 Unsupported EPRT domain\r\n"); + return; + } + if(domain != ftp->domain) + { + dtrap(); /* in theory this is possible.... */ + ftpputs(ftp,"501 Mismatched EPRT domain\r\n"); + return; + } + + cp = strchr(cp, delimit); /* advance to address */ + if(!cp) + goto eprt_error; + cp++; + if(inet_pton(domain, cp, &addr[0])) + { + /* Send detailed parse error message to console. */ + dprintf("FTP EPRT addr error: %s\n", pton_error); + goto eprt_error; + } + + cp = strchr(cp, delimit); /* advance to port */ + if(!cp) + goto eprt_error; + cp++; + + port = (unshort)atoi(cp); + if(port == 0) + goto eprt_error; + + /* got everything, fill in the ftps and ack the command */ + ftp->dataport = port; + + if(domain == AF_INET6) + IP6CPY(&ftp->ip6_host, (ip6_addr*)(&addr)); + else + ftp->host = *(ip_addr*)(&addr[0]); + + sprintf(responseBuf, "229 EPRT OK on port %u\r\n", port); + ftpputs(ftp,responseBuf); + return; + +eprt_error: + ftpputs(ftp,"501 Bad EPRT command\r\n"); + return; +} + +void +ftps_epsv(ftpsvr * ftp) +{ + SOCKTYPE sock; + u_short port; + char responseBuf[80]; + struct sockaddr_in6 our_addr; /* v6 type socket */ + int sa_len; + + /* Run the same tests as the v4 ftps_do_pasv() */ + if (ftp->passive_state & FTPS_PASSIVE_CONNECTED) + { + ftpputs(ftp,"425 Data transfer already in progress\r\n"); + return; + } + + /* This will happen if the client had sent us a PASV and then sent + * us another one without an intervening data transfer command. + */ + if (ftp->passive_state & FTPS_PASSIVE_MODE) + { + ftp_leave_passive_state(ftp); + } + + /* create a TCP socket to listen on, it will be the data socket. + * First set port to 0 so sockets will pick one for us + */ + port = 0; + sock = t_tcplisten(&port, ftp->domain); /* call API to start listen */ + if (sock == SYS_SOCKETNULL) /* if socket creation failed */ + { + ftpputs(ftp, err); + return; + } + + /* get our address and data port so we can tell the client + * what address to connect to. + */ + sa_len = sizeof(our_addr); + if (t_getsockname(sock, (struct sockaddr *)&our_addr, &sa_len)) + { + /* close the socket we just opened */ + t_socketclose(sock); + /* tell client pasv failed */ + ftpputs(ftp,err); + return; + } + + /* extract and convert to local endian our data socket port */ + port = ntohs(our_addr.sin6_port); + + /* respons to the EPSV command. */ + sprintf(responseBuf, + "229 Entering Extended Passive Mode (|||%d|)\r\n", port ); + ftpputs(ftp,responseBuf); + + /* we are now in passive mode, but the client hasn't connected yet */ + ftp->passive_state = FTPS_PASSIVE_MODE; + + /* we haven't received a data transfer command from the client yet */ + ftp->passive_cmd = 0; + + ftp->server_dataport = port; + ftp->datasock = sock; + + return; +} +#endif /* IP_V6 */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsvfs.c b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsvfs.c new file mode 100644 index 0000000..96a3739 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/ftp/ftpsvfs.c @@ -0,0 +1,233 @@ +/* + * FILENAME: ftpsvfs.c + * + * Copyright 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: FTP + * + * ROUTINES: fs_dodir(), lslash(), fs_dir(), fs_permit(), + * + * PORTABLE: no + */ + +/* Additional Copyrights: */ + +/* ftpsvfs.c + * Portions Copyright 1996 by NetPort Software. All rights reserved. + * FS dependent portions of FTP serer. This version for InteNiche + * VFS. + * 7/21/96 - Taken out of ftpsrv.c - John Bartas + */ + +#include "ftpport.h" /* TCP/IP, sockets, system info */ +#include "ftpsrv.h" + +#include "vfsfiles.h" +#include "in_utils.h" + +int ftpputs(ftpsvr * ftp, char * text); +void ftp_leave_passive_state(ftpsvr * ftp); + + + +/* FUNCTION: fs_dodir() + * + * fs_dodir() - do a "dir" (or "ls" for UNIX weenies) on the current + * ftp directory, write the resulting text out ftps->datasock, which + * is open before this is called. How you do the DIR and buffer is + * local to this function. Any tmp files or buffers should be cleaned + * up before you return. This is the VFS-only version. + * + * PARAM1: ftpsvr * ftp + * PARAM2: u_long ftpcmd + * + * RETURNS: Returns 0 if OK, else -1 if error. + */ + +int +fs_dodir(ftpsvr * ftp, u_long ftpcmd) +{ + char * cp; + int bytes_to_send; + int bytes_sent; + int rc; + int blocked; + struct vfs_file * vfp; + + ftpputs(ftp, "150 Here it comes...\r\n"); + + /* if we are already connected to the client because we are in + passive mode, don't create connection to client */ + if (!(ftp->passive_state & FTPS_PASSIVE_CONNECTED)) + { + /* create a data connection back to the client */ + ftp->datasock = FTP_TCPOPEN(ftp); + if (ftp->datasock == SYS_SOCKETNULL) + { + ftpputs(ftp, "425 Can't open data connection\r\n"); + return 0; /* not actually OK, but we handled error */ + } + } + + /* lock the VFS */ + vfs_lock(); + + /* for each file in the file list */ + for (vfp = vfsfiles; vfp; vfp = vfp->next) + { + /* if client asked for long version of file listing */ + if (ftpcmd == 0x4c495354) /* "LIST" */ + { + /* print month, day, hour and minute, as in : + -rw-r--r-- 1 jharan jharan 11772 Jan 19 13:31 install.log */ + /* since we don't have time stamps in the VFS, we lie about + * the date and time. if the VF_WRITE bit is set, the file + * is read/write so we display the roughly analogous + * Unix file mask corresponding to 666 else 444 + */ + sprintf(ftp->filebuf, + "%s 0 root root %11ld %s %2d %02d:%02d %s", + ((vfp->flags & VF_WRITE) ? "-rw-rw-rw-" : "-r--r--r--"), + vfp->real_size,"Jan",1,1,1,vfp->name); + } + else + /* else just give the client the file name */ + strcpy(ftp->filebuf,vfp->name); + + /* append a newline sequence to the end of the file listing */ + cp = ftp->filebuf + strlen(ftp->filebuf); + *cp++ = '\r'; + *cp++ = '\n'; + *cp = 0; + + /* get number of bytes to transmit */ + bytes_to_send = cp - ftp->filebuf; + + blocked = 0; + /* while there are bytes left to transmit */ + for (bytes_sent = 0; bytes_to_send > 0; ) + { + /* try to send as much as is left to transmit */ + rc = t_send(ftp->datasock,ftp->filebuf + bytes_sent,bytes_to_send,0); + + /* this means some sort of error occurred */ + if (rc < 0) + { + /* get socket error. If it's s (hopefully) transient buffer shortage + * then just wait a bit and try again, up to a limit: + */ + rc = t_errno(ftp->datasock); + if((rc == EWOULDBLOCK) || (rc == ENOBUFS)) + { + if(blocked++ < 100) /* don't loop here forever... */ + { + tk_yield(); /* let system spin a bit */ + continue; + } + } + ftpputs(ftp, "426 aborted, data send error\r\n"); + break; + } + + /* socket could be non-blocking, which means t_send() might have + sent something less than what was requested */ + bytes_to_send -= rc; + bytes_sent += rc; + +#ifndef BLOCKING_APP + /* if the whole thing wasn't sent, it wont get any better + * if you don't yield to receive side + */ + if (bytes_to_send > 0) + tk_yield(); +#endif + } + + /* if this happens, we broke in the loop above because of a + socket error */ + if (bytes_to_send > 0) + break; + } + + /* unlock the VFS */ + vfs_unlock(); + + /* if vfp is now NULL, then we exited the above loop without an + error, so we can report that the transfer went ok */ + if (!vfp) + ftpputs(ftp, "226 Transfer OK, Closing connection\r\n"); + + /* close the data connection and leave passive state if we in it */ + ftp_leave_passive_state(ftp); + + return 0; /* good return */ +} + + + + +/* FUNCTION: lslash() + * + * lslash() - format universal (UNIX) slashes '/' into local type. + * PC-DOS version. + * + * PARAM1: char * path + * + * RETURNS: + */ + +void +lslash(char * path) +{ + char * cp; + + for (cp = path; *cp; cp++) + if (*cp == '\\') /* DOS slash? */ + *cp = '/'; /* convert to normal slash */ +} + +/* fs_dir() - verify drive/directory exists. */ + + + +/* FUNCTION: fs_dir() + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: + */ + +int +fs_dir(ftpsvr * ftp) +{ + /* for the sake of web browsers that start off with a cd /, we + will allow that the directory "/" exists */ + if (!strcmp(ftp->filename,"/")) + return TRUE; + /* otherwise the VFS is flat, so there are no directories */ + return FALSE; /* path/name not found */ +} + + + + +/* FUNCTION: fs_permit() + * + * fs_permit() - check if the logged in user has permision for this + * file operation. Returns TRUE or FALSE. + * + * PARAM1: ftpsvr * ftp + * + * RETURNS: + */ + +int +fs_permit(ftpsvr * ftp) /* verify user permission */ +{ + USE_ARG(ftp); + + return TRUE; +} + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/app_ping.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/app_ping.h new file mode 100644 index 0000000..f62438f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/app_ping.h @@ -0,0 +1,145 @@ +/* + * FILENAME: app_ping.h + * + * Copyright 2000 By InterNiche Technologies Inc. All rights reserved + * + * Header file for app_ping.c + * NOTE - this file may by included even if PING_APP is not defined in the + * system build, since UDP_ECHO and others use some of these values. + * + * MODULE: TCP + * + * PORTABLE: yes + */ + +#ifndef APP_PING_H +#define APP_PING_H 1 + +#include "in_utils.h" + +struct PingInfo +{ + u_long delay; /* delay between successive pings */ + u_long length; /* ping packet length */ + ip_addr ipadd; + u_long nextping; /* cticks value to do next ping */ + long times; /* number of times to ping */ + int out; + int in; + GEN_IO pio; /* To communicate with invocator of ping */ + struct PingInfo * next; /* Next ping packet */ +}; + +typedef struct PingInfo * PING_INFO ; + +extern ip_addr activehost; /* default ping host */ + +#define TIMEFOR1TICK (1000/TPS) /* Time between each tick in millisecs */ + + +int ping_init(void); +PING_INFO ping_new (void); +int ping_delete(PING_INFO p); +int ping_addq(PING_INFO p); +int ping_delq(PING_INFO p); +PING_INFO ping_search(GEN_IO pio); +int ping_start(void * pio); +int ping_send(PING_INFO p); +int ping_end(void * pio); +int ping_setdelay(void * pio); +int ping_setlength(void * pio); /* menu routine to set default ping size*/ +int ping_sethost(void * pio); /* set default host for pings, et.al. */ +int pingUpcall(PACKET p); +void ping_check(void); +PING_INFO ping_demux(ip_addr fhost); +int ping_stats(void * pio); + +#define PING_ALLOC(size) npalloc(size) +#define PING_FREE(ptr) npfree(ptr) + +/* Note that some of the error codes listed below have been + * reused by other functions in this module. + */ +#define PINGERRBASE 200 + +/* List of error codes returned by ping_delq() */ +#define PING_DELQ_BAD_OBJECT (PINGERRBASE+11) +#define PING_DELQ_Q_EMPTY (PINGERRBASE+12) +#define PING_DELQ_OBJ_NOT_FOUND (PINGERRBASE+13) + +/* List of error codes returned by ping_delete() */ +#define PING_DEL_NULL_ARGUMENT (PINGERRBASE+21) + +/* List of error codes returned by ping_start() */ +#define PING_ST_NOIP (PINGERRBASE+31) +#define PING_ST_BAD_ARG2 (PINGERRBASE+32) +#define PING_ST_ALLOC_ERR (PINGERRBASE+33) + +/* List of error codes returned by ping_end() */ +#define PING_END_NO_SESSION (PINGERRBASE+41) + +/* List of error codes returned by ping_setdelay() */ +#define PING_DELAY_BAD_ARG (PINGERRBASE+51) + +/* List of error codes returned by ping_setlength() */ +#define PING_LEN_BAD_ARG (PINGERRBASE+61) + +/* types of messages sent to PING client task from the console task, + * Telnet server task, or timer tick task. These messages provide + * configuration parameters, initiate (or terminate) ping requests, + * and provide periodic timeout notification. + */ +#define PING_CNTRL_START_PING 0x1 +#define PING_CNTRL_END_PING 0x2 +#define PING_CNTRL_SET_PARM 0x3 +#define PING_CNTRL_PERIODIC_TIMER 0x4 +#define PING_CNTRL_LIST_STATS 0x5 +#define PING_DATA_ECHO_REPLY 0x6 + +/* type of parameter sent in PING_CNTRL_SET_PARM message */ +#define PARM_TYPE_HOST 0x1 +#define PARM_TYPE_DELAY 0x2 +#define PARM_TYPE_LENGTH 0x3 + +/* structure of message sent to PING client task. Note that not all + * parameters are used in all of the messages. + */ +struct pingtask_msg +{ + struct pingtask_msg * next; + u_char type; + u_long parm1; + u_long parm2; + u_long parm3; + u_long parm4; + u_long parm5; +}; + +/* Counters used by PING client code to keep track of error conditions + * encountered during processing + */ +struct ping_err +{ + u_long alloc_fail; + u_long bad_msgtype; + u_long bad_parmtype; + u_long empty_q; +}; + +/* counters for the number of messages of various types received by + * the PING client task + */ +struct ping_msg_stats +{ + u_long start_ping; + u_long end_ping; + u_long set_parm; + u_long periodic_timer; + u_long list_stats; + u_long echo_reply; +}; + +extern struct queue pingRcvq; /* contains messages from other tasks */ + +#endif /* APP_PING_H */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/arp.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/arp.h new file mode 100644 index 0000000..8904e42 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/arp.h @@ -0,0 +1,127 @@ +/* + * FILENAME: arp.h + * + * Copyright 2000 By InterNiche Technologies Inc. All rights reserved + * + * ARP related constats and definitions. + * + * MODULE: INET + * + * + * PORTABLE: yes + */ + +/* Additional Copyrights: */ +/* Portions Copyright 1990 by NetPort Software. */ + + +#ifndef _ARP_H +#define _ARP_H 1 + +#define ET_ARP htons(0x0806) /* net endian 0x0806 */ +#define MACADDSIZ 6 /* biggest mac address we use */ + + +/* The ARP table entry structure. It is empty (unused) if t_pro_addr + * == 0L. The first three entrys match those specified by the MIB in + * rfc 1156 for the Address Translation Tables. + */ + +struct arptabent { + unsigned long t_pro_addr; /* protocol address */ + unsigned char t_phy_addr[6]; /* physical addr */ + struct net * net; /* interface for which this entry is valid */ + PACKET pending; /* packets waiting for resolution of this arp */ + u_long createtime; /* time entry was created (cticks) */ + u_long lasttime; /* time entry was last referenced */ + unshort flags; /* mask of the ET flags */ +}; + +#define MAXARPS 8 /* maximum mumber of arp table entries */ +extern struct arptabent arp_table[MAXARPS]; /* the actual table */ + +/* arp function prototypes */ +int etainit (void); /* init arp package */ +int arprcv (PACKET); /* arp received packet upcall */ +void at_entry (ip_addr, char*, int); /* make an entry in the arp table */ +void arpReply (PACKET ); +int et_send (PACKET pkt, struct arptabent * tp); +int send_arp (PACKET pkt, ip_addr dest_ip); +int send_via_arp (PACKET pkt, ip_addr dest_ip); + +struct arptabent * find_oldest_arp(ip_addr dest_ip); +struct arptabent * make_arp_entry(ip_addr dest_ip, NET net); + +#ifdef DYNAMIC_IFACES +int clear_arp_entries(ip_addr dest_ip, NET ifp); +#endif + +/* arp stats - In addition to MIB */ +extern unsigned arpReqsIn; /* requests received */ +extern unsigned arpReqsOut; /* requests sent */ +extern unsigned arpRepsIn; /* replys received */ +extern unsigned arpRepsOut; /* replys sent */ + + +/* Plummer's internals. All constants are already byte-swapped. */ +#define ARETH htons(1) /* ethernet hardware type */ +#define ARREQ htons(1) /* byte swapped request opcode */ +#define ARREP htons(2) /* byte swapped reply opcode */ +#define ARPIP htons(0x0800) /* IP type in net endian */ +#define ARPHW htons(1) /* arp hardware type for ethernet, in net endian */ +#define ARP8023HW htons(6) /* arp hardware type for IEEE 802.3 in net endian */ + +/* have two arp headers because of problems with some hardware insisting + * 32 bit fields must be on 32 bit boundaries. + */ + +#ifdef NO_CC_PACKING +/* the ARP header as it appears on the wire: */ +struct arp_wire { + unshort ar_hd; /* hardware type */ + unshort ar_pro; /* protcol type */ + char ar_hln; /* hardware addr length */ + char ar_pln; /* protocol header length */ + unshort ar_op; /* opcode */ + char data[20]; /* send IP, send eth, target IP, target eth */ +}; + +/* offsets to fields in arp_wire->data[] */ +#define AR_SHA 0 +#define AR_SPA 6 +#define AR_THA 10 +#define AR_TPA 16 +#endif /* NO_CC_PACKING */ + +/* THE ARP header structure, with special macros around it to help + * with declaring it "packed". Also se NO_CC_PACKING #define. + */ + +START_PACKED_STRUCT(arp_hdr) /* macro to optionally pack struct */ + unshort ar_hd; /* hardware type */ + unshort ar_pro; /* protcol type */ + char ar_hln; /* hardware addr length */ + char ar_pln; /* protocol header length */ + unshort ar_op; /* opcode */ + char ar_sha[6]; /* sender hardware address */ + ip_addr ar_spa; /* sender protocol address */ + char ar_tha[6]; /* target hardware address */ + ip_addr ar_tpa; /* target protocol address */ +END_PACKED_STRUCT(arp_hdr) + +/* bits for tp->flags */ +#define ET_ETH2 1 /* this IP address uses Ethernet II */ +#define ET_SNAP 2 /* this IP address uses snap headers */ + + +#ifdef IEEE_802_3 +/* 8 bytes of useless filler, required for IEEE 802.3 support */ +struct snap_hdr +{ + u_char llc_etc[6]; + unshort type; /* the pkt protocol, 0x0800 for IP, etc. */ +}; +#endif /* IEEE_802_3 */ + +#endif /* _ARP_H 1 */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/bsdsock.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/bsdsock.h new file mode 100644 index 0000000..91a259c --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/bsdsock.h @@ -0,0 +1,154 @@ +/* FILENAME: bsdsock.h + * + * Copyright 2000 InterNiche Technologies Inc. All rights reserved. + * + * BSD sockets porting aid + * + * #define BSD_SOCKETS in your ipport.h_h, and #include this in your + * application source to get the BSD-flavored sockets API. + * + * Then you get: + * BSD_SOCKET as a retargetable "socket" type + * BSD_SIZE_T as a retargetable "size" type + * BSD_TIMEVAL_T as a retargetable "struct timeval" type + * bsd_...() retargetable functions and macros for the BSD sockets API + * + * ...so you can write your code using these, and then re-target + * them to various sockets-like platforms (we supply the InterNiche + * target, but these should be straightforward for modern Un*x + * and mostly so for Winsock). + * + * MODULE: misclib + * ROUTINES: bsd_bind(), bsd_close(), bsd_connect(), bsd_errno(), + * bsd_listen(), bsd_recv(), bsd_send(), bsd_sendto(), + * bsd_shutdown(), bsd_socket() + * PORTABLE: yes + * + */ + +#ifndef BSDSOCK_H +#define BSDSOCK_H + +#include "tcpport.h" +#include "socket.h" +#include "sockcall.h" +#include "nptcp.h" + +/* + * BSD_SOCKET - the type of a socket. For InterNiche Release 1.x (x + * <= 7) sockets this is "long", so that is the default. For BSD it + * would be "int". For Winsock it would be "SOCKET". Don't change + * this, override this default with your own macro prior to including + * this file. + */ +#ifndef BSD_SOCKET +#define BSD_SOCKET long +#endif + +/* + * BSD_SIZE_T - the "size" type. For InterNiche Release 1.x (x <= 7) + * this is "int". + */ +#ifndef BSD_SIZE_T +#define BSD_SIZE_T int +#endif + +/* + * BSD_IN_ADDR_T - the "Internet Address" type. Must be able to + * hold a 32-bit IPv4 address. + */ +#ifndef BSD_IN_ADDR_T +#define BSD_IN_ADDR_T unsigned long +#endif + +/* + * BSD_TIMEVAL_T - the "struct timeval" type. bsd_select() needs a + * structure with these fields for its timeout parameter. + */ +#ifndef BSD_TIMEVAL_T +struct timeval +{ + long tv_sec; /* seconds */ + long tv_usec; /* and microseconds */ +}; +#define BSD_TIMEVAL_T struct timeval +#endif + +/* + * ioctl() request definitions + * + * The only ioctl() request presently supported is FIONBIO, so + * rather than define the whole _IOC macro family we just + * define FIONBIO. + */ +#define FIONBIO SO_NONBLOCK + +/* + * Some BSD sockets calls can be mapped to InterNiche sockets calls + * with straightforward macro definitions, so we do. + */ +#define bsd_bind(s, addr, addrlen) t_bind((s), (addr), addrlen) +#define bsd_close(s) t_socketclose((s)) +#define bsd_connect(s, addr, addrlen) t_connect((s), (addr), addrlen) +#define bsd_listen(s, backlog) t_listen((s), (backlog)) +#define bsd_recv(s, buf, len, flags) t_recv((s), (buf), (len), (flags)) +#define bsd_send(s, buf, len, flags) t_send((s), (buf), (len), (flags)) +#define bsd_sendto(s, msg, len, flags, to, tolen) \ + t_sendto((s), (msg), (len), (flags), (to), tolen) +#define bsd_shutdown(s, how) t_shutdown((s), (how)) +/* + * Altera Niche Stack Nios port modification: + * fix build warning + */ +#ifdef ALT_INICHE +#define bsd_socket(dom, type, proto) t_socket((dom), (type), (proto)) +#else +#define bsd_socket(dom, type, proto) t_socket((dom), (type), 0) +#endif +/* + * BSD errno isn't the best choice for a multithreaded environment. + * The InterNiche sockets API provides a per-socket error which can be + * read via t_errno(s). We suppose this could be re-targeted to errno + * for a Unix-like environment (or perhaps better, the SO_ERROR socket + * option), or WSAGetLastError() for a Winsock environment. + */ +#define bsd_errno(s) t_errno((s)) + +/* + * Some other BSD sockets calls require functions to do the mapping + * to InterNiche sockets calls; we provide the prototypes for those + * functions here, and the implementations in misclib/bsdsock.c. + */ +BSD_SOCKET bsd_accept(BSD_SOCKET s, + struct sockaddr * addr, int * addrlen); +int bsd_getpeername(BSD_SOCKET s, + struct sockaddr * addr, int * addrlen); +int bsd_getsockname(BSD_SOCKET s, + struct sockaddr * addr, int * addrlen); +int bsd_getsockopt(BSD_SOCKET s, + int level, + int name, + void * opt, int * optlen); +BSD_IN_ADDR_T bsd_inet_addr(char * cp); +int bsd_inet_aton(char * cp, struct in_addr * pin); +char * bsd_inet_ntoa(struct in_addr in); +int bsd_ioctl(BSD_SOCKET s, unsigned long request, ...); +int bsd_recvfrom(BSD_SOCKET s, + void * buf, + BSD_SIZE_T len, + int flags, + struct sockaddr * from, int * fromlen); +#ifdef SO_SELECT +int bsd_select(int nfds, + fd_set * readfds, + fd_set * writefds, + fd_set * exceptfds, + struct timeval * timeout); +#endif /* SO_SELECT */ +int bsd_setsockopt(BSD_SOCKET s, + int level, + int name, + void * opt, int optlen); + +#endif /* BSDSOCK_H */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/comline.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/comline.h new file mode 100644 index 0000000..3bdcd8b --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/comline.h @@ -0,0 +1,116 @@ +/* + * FILENAME: comline.h + * + * Copyright 2000 By InterNiche Technologies Inc. All rights reserved + * + * Definitions for comm lines to be used under PPP and SLIP. + * + * MODULE: INET + * + * PORTABLE: yes + */ + +/* Additional Copyrights: */ +/* Portions Copyright 1994, 1995 by NetPort Software. */ + + +#ifndef _COMLINE_H_ +#define _COMLINE_H_ + +#include "netbuf.h" + +/* Values for Line State ln_state. */ + +typedef enum { + LN_INITIAL, /* not set up yet */ + LN_DISCONNECTED, /* line not connected (idle) */ + LN_AUTOANS, /* line ready (e.g. mode in autoanswer mode) */ + LN_CONNECTING, /* line is connecting (e.g. modem dialing) */ + LN_CONNECTED, + LN_DISCONNECTING, /* e.g. modem in the process of hanging up */ + LN_BROKEN, /* hardware is missing, misconfigured, or broken */ + LN_RESETTING /* line is being reset - ignore incoming chars */ +} ln_states; + + +/* API structure for PPP and SLIP line IO. One of these structures is + * created for each instance where a line layer, (UART, modem, slip, PPP, + * etc.) interfaces with another line layer. Example: PPP over AT modem + * over RS232 would have two of these, one between PPP and modem and + * another between modem and RS232 UART. + */ + +struct com_line +{ + /* bring/check line up */ + int (*ln_connect)(struct com_line * lineptr); + + /* disconnect the line */ + int (*ln_disconnect)(struct com_line *); + + /* one of the send routines (the next two) may be NULL */ + int (*ln_putc)(struct com_line *, int byte); /* send single char */ + int (*ln_write)(struct com_line *, PACKET pkt); + + /* speed and state of the lower module */ + long ln_speed; /* most recent detected speed */ + ln_states ln_state; + + int (*ln_getc)(struct com_line *, int byte); /* receive single char */ + + /* types for the layers above and below this interface */ + int upper_type; + int lower_type; + + void * upper_unit; /* depends on upper_type, usually M_PPP */ + int lower_unit; /* legacy ID for lower (UART level) drivers */ +}; + +typedef struct com_line * LINEP; + +/* Values for upper_type and lower_type. Note that a modem could + * be both the lower layer to PPP code and upper layer to a + * UART driver. + */ + +#define LN_PPP 1 /* upper layer is PPP */ +#define LN_SLIP 2 /* upper layer is SLIP */ +#define LN_UART 3 /* lower layer is a UART */ +#define LN_ATMODEM 4 /* upper/lower layer is a modem */ +#define LN_PPPOE 5 /* lower layer is PPPOE */ +#define LN_LBXOVER 6 /* lower is loopback crossover (for test) */ +#define LN_PORTSET 7 /* (init) lower will be set by callback */ + + +/* UARTs under this line struct should support this API: */ + +/* logical line operations on UARTs: */ +extern int ln_uinit(LINEP line); /* assigned unit, sets up structs */ +extern int ln_uconnect(LINEP line); /* move to connected state */ +extern int ln_udisconnect(LINEP line); /* move to disconnected state */ +extern int ln_uputc(LINEP line, int byte); /* send a single byte */ + + +/* lowest level UART API */ +extern int uart_init(int unit); /* sets up hardware */ +extern int uart_putc(int unit, u_char); /* send character to comm port */ +extern int uart_getc(int unit); /* read next buffered char from com port */ +extern int uart_ready(int unit); /* returns TRUE if uart is ready to send a char */ +extern void uart_close(int unit); /* undoes uart_init */ +extern int uart_stats(void * pio, int unit); + +/* Struct contaning all configuration global params for Comport */ + +#ifdef USE_COMPORT +struct ComPortCfg +{ + int comport; /* PC comm port to default to */ + int LineProtocol; /* 1=PPP, 2=SLIP */ +}; + +extern struct ComPortCfg comportcfg; +#endif /* USE_COMPORT */ + +#endif /* _COMLINE_H_ */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/crypt_api.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/crypt_api.h new file mode 100644 index 0000000..d5ff81f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/crypt_api.h @@ -0,0 +1,245 @@ +/* + * FILENAME: crypt_api.c + * + * Copyright 1999-2004 by InterNiche Technologies Inc. All rights reserved. + * + * + * ROUTINES: + * ROUTINES: + * + */ +#ifndef _CRYPT_API_H_ +#define _CRYPT_API_H_ + +#define PRINT_BUFFER + +#define AES128_KEY_SIZE 16 +#define AES128_IV_SIZE 16 +#define DES64_KEY_SIZE 8 +#define DES64_IV_SIZE 8 +#define TDES192_KEY_SIZE 24 +#define TDES192_IV_SIZE 8 + + +#define MD5_DIGEST_LENGTH 16 +#define SHA1_DIGEST_LENGTH 20 +#define MAX_IV_SIZE 16 /* Max size of encryption IV */ +#define MAX_BLOCK_SIZE 16 /* Max size of encryption block */ +#define MAX_AUTH_DATA_SIZE 12 /* Bytes (96-bits) */ +#define MAX_DIGEST_SIZE 64 /* SHA-512 digest size in bytes */ +#define MAX_AUTH_KEY_SIZE 64 /* Max size of authentication key */ +#define MAX_ENCR_KEY_SIZE 64 /* Max size of encryption key */ +#define HMAC_MAX_CBLOCK 64 +#define ENTROPY_NEEDED 20 /* require 160 bits = 20 bytes of randomness */ + +/* + * IPSEC Algorithms + */ +/* ESP Transforms from RFC 2407 (IPSEC-DOI) */ +#define ALG_ESP_DES_IV4 1 +#define ALG_ESP_DES 2 +#define ALG_ESP_3DES 3 +#define ALG_ESP_RC5 4 +#define ALG_ESP_IDEA 5 +#define ALG_ESP_CAST 6 +#define ALG_ESP_BLOWFISH 7 +#define ALG_ESP_3IDEA 8 +#define ALG_ESP_DES_IV32 9 +#define ALG_ESP_RC4 10 +#define ALG_ESP_NULL 11 +#define ALG_ESP_AES 12 + +/* Private values used only at the API level. Not used internally */ +#define ALG_ESP_AES_128 201 +#define ALG_ESP_AES_192 202 +#define ALG_ESP_AES_256 203 + +/* ESP Authentication Algorithms */ +#define ALG_ESP_HMAC_NULL 0 /* private value, not defined by spec */ +#define ALG_ESP_HMAC_MD5 1 +#define ALG_ESP_HMAC_SHA 2 +#define ALG_ESP_HMAC_SHA_256 5 +#define ALG_ESP_HMAC_SHA_384 6 +#define ALG_ESP_HMAC_SHA_512 7 + +/* AH Transforms from RFC 2407 (IPSEC-DOI) */ +#define ALG_AH_NULL 0 +#define ALG_AH_MD5 2 +#define ALG_AH_SHA 3 +#define ALG_AH_DES 4 +#define ALG_AH_SHA_256 5 +#define ALG_AH_SHA_384 6 +#define ALG_AH_SHA_512 7 + +/* Compression Algorithms from RFC 2407 (IPSEC-DOI) */ +#define ALG_IPCOMP_OUI 1 +#define ALG_IPCOMP_DEFLATE 2 +#define ALG_IPCOMP_LZS 3 + +typedef struct DigestAlgs_s +{ + int alg; + int digest_len; + int ctx_len; + void (*init)(void *ctx); + void (*update)(void *ctx, unsigned char *data, int len); + void (*final)(unsigned char *digest, void *ctx); +} DigestAlgs; + +typedef struct HmacContext_s +{ + unsigned char ipad[64]; + unsigned char opad[64]; + const DigestAlgs *digest_alg; + void *digest_ctx; +} HmacContext; + +typedef struct KeyedContext_s +{ + int keylen; + DigestAlgs *digest_alg; + void *key; + void *digest_ctx; +} KeyedContext; + +typedef struct EncrAlgs_s +{ + int alg; + int blocksize; /* Algorithm block length (bytes) */ + int (*crypt)(unsigned char *in, unsigned int in_len, unsigned char *out, + unsigned int out_len, unsigned char *key, unsigned char *iv, int enc); +} EncrAlgs; + +EncrAlgs *enc_alg_lookup(int alg); +/* + * Generic HMAC authentication APIs + */ +HmacContext *hmac_init(int alg, unsigned char *key, int keylen); +void hmac_update(HmacContext *hctx, unsigned char *data, int len); +void hmac_final(HmacContext *hctx, unsigned char *digest, int len); +int hmac_digest_len(HmacContext *hctx); + +/* + * Generic Keyed authentication APIs + */ +KeyedContext *keyed_init(int alg, unsigned char *key, int keylen); +void keyed_update(KeyedContext *kctx, unsigned char *data, int len); +void keyed_final(KeyedContext *kctx, unsigned char *digest, int len); +int keyed_digest_len(KeyedContext *kctx); + +int aes_do(unsigned char *in, unsigned int in_len, unsigned char *out, + unsigned int out_len, unsigned char *key, unsigned char *iv, int enc); +int bf_do(unsigned char *in, unsigned int in_len, unsigned char *out, + unsigned int out_len, unsigned char *key, unsigned char *iv, int enc); + +int null_do(unsigned char *in, unsigned int in_len, unsigned char *out, + unsigned int out_len, unsigned char *key, unsigned char *iv, int enc); + +int des_do_ncbc(unsigned char *in, unsigned int in_len, unsigned char *out, + unsigned int out_len, unsigned char *key, unsigned char *iv, int enc); + +int des_do(unsigned char *in, unsigned int in_len, unsigned char *out, + unsigned int out_len, unsigned char *key, unsigned char *iv, int enc); + +int tdes_do(unsigned char *in, unsigned int in_len, unsigned char *out, + unsigned int out_len, unsigned char *key, unsigned char *iv, int enc); + +int hmac_ipsec_do(int alg_id, unsigned char *alg_key, int alg_keylen, void *in, + unsigned int in_offset, unsigned char *digest, unsigned int digest_len); + +int keyed_do_ipsec(int alg_id, unsigned char *alg_key, int alg_keylen, void *in, + unsigned int in_offset, unsigned char *digest, unsigned int digest_len); + +void md4_do(unsigned char *in, unsigned int in_len, unsigned char *digest); +char bits2hex(unsigned int num); +void convert2hex(char *out, char *msg, int size); +int sha1_do(unsigned char *digest, unsigned char *text, unsigned int text_len); +unsigned char *SHA1(const unsigned char *d, unsigned long n, unsigned char *md); +int sha1_do2(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, char *digest); +int sha1_do3(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, + unsigned char *s3, int s3_len, char *digest); +int sha1_do4(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, + unsigned char *s3, int s3_len, unsigned char *s4, int s4_len, char *digest); +int sha1_do5(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, + unsigned char *s3, int s3_len, unsigned char *s4, int s4_len, + unsigned char *s5, int s5_len, char *digest); +int sha1_do6(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, + unsigned char *s3, int s3_len, unsigned char *s4, int s4_len, + unsigned char *s5, int s5_len, unsigned char *s6, int s6_len, char *digest); + +int md5_do(unsigned char *digest, unsigned char *text, unsigned int text_len); +unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md); +int md5_do2(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, char *digest); +int md5_do3(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, + unsigned char *s3, int s3_len, char *digest); +int md5_do4(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, + unsigned char *s3, int s3_len, unsigned char *s4, int s4_len, char *digest); +int md5_do5(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, + unsigned char *s3, int s3_len, unsigned char *s4, int s4_len, + unsigned char *s5, int s5_len, char *digest); +int md5_do6(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, + unsigned char *s3, int s3_len, unsigned char *s4, int s4_len, + unsigned char *s5, int s5_len, unsigned char *s6, int s6_len, char *digest); +int des_do_ecb(unsigned char *in, unsigned char *out, unsigned char *key, int enc); + +int sha256_do(unsigned char *digest, unsigned char *text, unsigned int text_len); +int sha256_do2(unsigned char *s1, int s1_len, unsigned char *s2, int s2_len, char *digest); +int sha384_do(unsigned char *digest, unsigned char *text, unsigned int text_len); +int sha512_do(unsigned char *digest, unsigned char *text, unsigned int text_len); + +int p2k_md5(unsigned char *digest, unsigned char *text, unsigned int text_len); + +#ifdef PRINT_BUFFER +void print_buffer(unsigned char *buf, int len); +#endif + +void *alloc_md5_ctx(void); +void x_md5_init(void *ctx); +void x_md5_update(void *ctx, unsigned char *data, int len); +void x_md5_final(unsigned char *digest, void *ctx); + +void *alloc_sha1_ctx(void); +void x_sha1_init(void *ctx); +void x_sha1_update(void *ctx, unsigned char *data, int len); +void x_sha1_final(unsigned char *digest, void *ctx); + +void *alloc_sha256_ctx(void); +void x_sha256_init(void *ctx); +void x_sha256_update(void *ctx, unsigned char *data, int len); +void x_sha256_final(unsigned char *digest, void *ctx); + +void *alloc_sha384_ctx(void); +void x_sha384_init(void *ctx); +void x_sha384_update(void *ctx, unsigned char *data, int len); +void x_sha384_final(unsigned char *digest, void *ctx); + +void *alloc_sha512_ctx(void); +void x_sha512_init(void *ctx); +void x_sha512_update(void *ctx, unsigned char *data, int len); +void x_sha512_final(unsigned char *digest, void *ctx); + +void hmac_md5(unsigned char* auth_key, int key_len, unsigned char* text, + int text_len, unsigned char* digest); +void hmac_sha(unsigned char *k, int lk, unsigned char *d, int ld, + unsigned char *out, int t); + +int hmac_do(int alg_id, unsigned char *alg_key, int alg_keylen, unsigned char *in, + unsigned int in_len, unsigned char *digest, unsigned int digest_len); + +int hmac_do2(int alg_id, unsigned char *alg_key, int alg_keylen, unsigned char *s1, + unsigned int s1_len, unsigned char *s2, unsigned int s2_len, + unsigned char *digest, unsigned int digest_len); + +int hmac_do3(int alg_id, unsigned char *alg_key, int alg_keylen, unsigned char *s1, + unsigned int s1_len, unsigned char *s2, unsigned int s2_len, + unsigned char *s3, unsigned int s3_len, + unsigned char *digest, unsigned int digest_len); + +int rc4_do(unsigned char *in, unsigned int in_len, unsigned char *out, + unsigned char *key, unsigned key_len); + +int concat_buffer(void *in, unsigned char **out, unsigned int in_offset, unsigned int *out_len); + +void crypt_test(void); + +#endif /* _CRYPT_API_H_ */ diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/crypt_port.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/crypt_port.h new file mode 100644 index 0000000..df9a5c7 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/crypt_port.h @@ -0,0 +1,241 @@ +/* + * FILENAME: crypt_port.h + * + * Copyright 2002-2003 InterNiche Technologies Inc. All rights reserved. + * + * Crypt library configuration. + * + * MODULE: IPSECCRYPTO + * + * PORTABLE: yes + */ +#ifndef _CRYPT_PORT_H_ +#define _CRYPT_PORT_H_ + +/* You enable the defines that you need in your particular application +and undef the rest of the algorithms to reduce code space. */ +/* These are the highest level defines */ + +#define USE_MD5 1 +#define USE_SHA1 1 +#define USE_MD4 1 +#define USE_3DES 1 +#define USE_DES 1 +#define USE_RC4 1 +#define USE_BF 1 +#define USE_AES 1 +#define USE_SHA2 1 + +#define USE_HMAC 1 + +#ifdef NOT_USED +Make sure "NOT_USED" is really undefined + +/* Note SSL must be enables for this because it resides in SSL directory */ +#define USE_SSL_DSA 1 + +#endif + +/* This define is used in CryptoEngine. It might help the performance. But +this is totally platform dependent */ + +#define KICK_CRYPTO_ENGINE 1 + +/* This define compiles in the CryptoEngine demo. When you have IPSEC defined +and USE_SEC_HARDWARE make sure this is undefed because with this macro defined +different IDs are passed to hardware accelerator and therefore IPSEC would not +work properly. In real applications there is no need for INCLUDE_CE_DEMO anyway +and it should be undefed */ + +#define INCLUDE_CE_DEMO 1 + +/* This macro compiles in the hardware Security engine driver and links it +to the application code. For example it should be turned on in MCF5235 and MCF5485 +platforms */ + +/*#define USE_SEC_HARDWARE 1*/ + +/* Note that most of the time +either _HW or _SW macros for algorithms are enabled. But in some cases +depending on product configuration both macros might be enabled */ + +/* AES is isolated pretty good in current applicatiion code and +probably it is safe to either enable software or hardware support (assuming it is +available) for AES */ + +#ifdef USE_AES +#ifdef USE_SEC_HARDWARE +#define USE_AES_HW 1 +#else +#define USE_AES_SW 1 +#endif +#endif + +#ifdef USE_DES + +#ifdef USE_SEC_HARDWARE +#define USE_DES_HW 1 +#endif + +#define USE_DES_3DES 1 + +#endif /* USE_DES */ + +/* In the current code base 3DES is also pretty clean and +perhaps it is safe to define either _HW or _SW for 3DES +algorithm */ +#ifdef USE_3DES +#define USE_DES_3DES 1 + +#ifdef USE_SEC_HARDWARE +#define USE_3DES_HW 1 +#else +#define USE_3DES_SW 1 +#endif + +#endif /* USE_3DES */ + +#ifdef USE_DES_3DES +/* Here you can breakdown what you want to include even further */ +#define USE_DES_CBC_CKSM 1 /* only used in SSL */ +#define USE_DES_CFB64_EDE 1 /* only used in SSL */ +#define USE_DES_OFB64_EDE 1 /* only used in SSL */ +#define USE_DES_CFB64_ENC 1 /* only used in SSL */ +#define USE_DES_OFB64_ENC 1 /* only used in SSL */ +#define USE_DES_ECB3_ENC 1 /* only used in SSL */ +#define USE_DES_ECB_ENC 1 /* used in SSL and MSCHAP */ +#define USE_DES_XCBC_ENC 1 /* only used in SSL */ + +/*#define USE_DES_CFB_ENC 1*/ /* might be used in SSL */ +/*#define USE_DES_STR2KEY 1*/ /* might be used in SSL */ + +#endif + +#ifdef USE_MD5 + +#ifdef USE_SEC_HARDWARE +#define USE_MD5_HW 1 +#else +#define USE_MD5_SW 1 +#endif + +#ifdef INCLUDE_SNMPV3 /* P2K algorithm is only used in SNMPV3 */ +#ifdef USE_SEC_HARDWARE +#define USE_P2K_MD5_HW 1 /* This feature is not complete yet*/ +#else +#define USE_P2K_MD5_SW 1 +#endif +#endif + +#endif /* USE_MD5 */ + +#ifdef USE_SHA1 + +#ifdef USE_SEC_HARDWARE +#define USE_SHA1_HW 1 +#else +#define USE_SHA1_SW 1 +#endif + +#endif /* USE_SHA1 */ + + +#ifdef USE_HMAC + +#ifdef USE_SEC_HARDWARE +#define USE_HMAC_HW 1 +#define USE_HMAC_MD5_HW 1 +#define USE_HMAC_SHA_HW 1 +#else +#define USE_HMAC_SW 1 +#define USE_HMAC_MD5_SW 1 +#define USE_HMAC_SHA_SW 1 +#endif + +/* This macro could yield to hardware or software + computation based on definition of USE_HMAC_MD5_HW */ +#define USE_IPSEC_MD5 1 + +/* This macro could yield to hardware or software + computation based on definition of USE_HMAC_SHA_HW */ +#define USE_IPSEC_SHA 1 + +#ifdef USE_SHA2 +#define USE_HMAC_SHA_256 1 +#define USE_HMAC_SHA_384 1 +#define USE_HMAC_SHA_512 1 +#define USE_IPSEC_SHA_256 1 +#define USE_IPSEC_SHA_384 1 +#define USE_IPSEC_SHA_512 1 +#endif + +#endif /* USE_HMAC */ + +/* a lot of code from the asyrmmetric libraries still reside in SSL directory +and is not moved to crypt directory yet. Therefore compiling RSA require +SSL to be enabled. */ + +#ifdef ENABLE_SSL +#define USE_RSA 1 +#endif + +/* Only one for the following should be defined */ +/* The prime number generation stuff may not work when + * EIGHT_BIT but I don't care since I've only used this mode + * for debuging the bignum libraries */ +#undef SIXTY_FOUR_BIT_LONG +#undef SIXTY_FOUR_BIT +#define THIRTY_TWO_BIT +#undef SIXTEEN_BIT +#undef EIGHT_BIT + +#ifndef EIGHT_BIT +#define NUMPRIMES 2048 +#else +#define NUMPRIMES 54 +#endif + +#define CRYPT_MALLOC(size) npalloc(size) +#define CRYPT_FREE(p) npfree(p) +#define CRYPT_FREE_FUNC npfree +#define CRYPT_REALLOC(a,n) nprealloc(a,n) +#define CRYPT_ASSERT(x) + +#ifdef USE_PROFILER +#define CRYPT_TICKS() get_ptick() +#else +#define CRYPT_TICKS CTICKS +#endif /* USE_PROFILER */ + +/* This is just a CE demo macro. Is has no other significance. */ +#define CU_MAX_BUF_SIZE (64*40) + +/* port specific defines */ +#define CU_ACQUIRE_RESOURCE(x) ENTER_CRIT_SECTION(x) +#define CU_RELEASE_RESOURCE(x) EXIT_CRIT_SECTION(x) +#define CU_TK_YIELD tk_yield + +/* BIO library is only part of SSL code currently */ +#ifndef ENABLE_SSL +#define NO_BIO +#endif + +#define NO_FP_API +/*#define NO_STDIO*/ +#define NO_LHASH + +#if defined(ENABLE_SSL) || defined(IKE) || defined(IPSEC) + +#define MD_RAND 1 +#define CRYPT_LIB 1 +#define USE_BN 1 +#define USE_DH 1 +#define USE_CRYPT_RAND 1 +#define USE_RAND_WIN 1 +#define USE_CRYPT_STACK 1 +#define USE_CRYPT_ERR 1 +#define USE_CRYPT_LHASH 1 + +#endif + +#endif /* _CRYPT_PORT_H_ */ diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/dhcpclnt.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/dhcpclnt.h new file mode 100644 index 0000000..6b20426 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/dhcpclnt.h @@ -0,0 +1,266 @@ +/* + * FILENAME: dhcpclnt.h + * + * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved + * + * dhcpclnt.h - was bootp.h, and then dhcp.h, and the IETF commitees aren't + * through with this poor protocol yet... + * + * MODULE: INET + * + * PORTABLE: yes + */ + +/* Additional Copyrights: */ +/* Portions Copyright 1995-1996 by NetPort Software. */ + + +#ifndef _DHCPCLNT_H +#define _DHCPCLNT_H 1 + +/* List of enabled DHCP CLIENT options */ +#define DHCP_REQLIST 1 + +/* List of disabled DHCP CLIENT options */ +#ifdef NOTDEF +#define DHC_MAXDNSRVS 2 +#endif + +#ifdef USE_AUTOIP /* AutoIP requires DNS option */ +#define DHC_MAXDNSRVS 2 +#endif /* USE_AUTOIP */ + +#define BOOTP_SERVER_PORT 67 +#define BOOTP_CLIENT_PORT 68 + +/* DHCP packet types; from options field of bootp header */ +#define DHCP_INVALIDOP 99 +#define DHCP_DISCOVER 1 +#define DHCP_OFFER 2 +#define DHCP_REQUEST 3 +#define DHCP_DECLINE 4 +#define DHCP_ACK 5 +#define DHCP_NAK 6 +#define DHCP_RELEASE 7 + +/* DHCP options we support: */ + +#define DHOP_PAD 0 /* single char of padding, always 0 */ +#define DHOP_SNMASK 1 /* client's subnet mask */ +#define DHOP_ROUTER 3 /* set default router */ +#define DHOP_DNSRV 6 /* IP address of domain name server */ +#define DHOP_NAME 12 /* name (maybe DNS-ish) of host */ +#define DHOP_DOMAIN 15 /* name of host's domain */ + +#define DHOP_CADDR 50 /* client requested IP address */ +#define DHOP_LEASE 51 /* lease time */ +#define DHOP_OVLD 52 /* options are in sname and file fields too */ +#define DHOP_TYPE 53 /* DHCP type of pkt; 1-7 above */ +#define DHOP_SERVER 54 /* server ID (IP address) */ +#define DHOP_REQLIST 55 /* client's parameter request list */ +#define DHOP_MSG 56 /* message text explaining NAK or DECLINE */ +#define DHOP_MAXSIZE 57 /* maximum DHCP message size */ +#define DHOP_RENEWAL 58 /* renewal (T1) time */ +#define DHOP_REBINDING 59 /* rebinding (T2) time */ +#define DHOP_CLIENT 61 /* client ID (i.e. hardware address) */ +#define DHOP_END 255 /* marks end of valid options */ + +/* DHCP Client per-net states (for dhc_state). The states are as per + * the description in RFC2131. DHCS_RESTARTING is a transient state. + * It is just used to inform the application layer(user) that DHCP + * Client is restarting the negotiation. Following is an example + * + * 1. Client sends a REQUEST (it might be in DHCS_REBOOTING or + * DHCS_REQUESTING state). + * 2. Client doesn't receive a ACK/NAK. It retransmits + * 3. After few retransmits (as per RFC2131), the client needs to move back + * to DHCS_INIT state. At this time, the user needs to be informed + * that the client is restarting. + * 4. The Client calls the callback with state as DHCS_RESTARTING. + * 5. The Client moves to DHCS_INIT state. + * + * There is another example where DHCS_RESTARTING is used. + * 1. Client is in DHCS_BOUND state. At the required time (when lease timer + * t1 expires), it will move to DHCS_RENEWING state. It sends a REQUEST + * to renew the lease + * 2. No ACK/NAK is received in DHCS_RENEWING state. When lease timer t2 + * expires, the Client moves to DHCS_REBINDING state, and sends a + * REQUEST to rebind the current IP address. + * 3. If no ACK/NAK comes and the lease expires, then the client should + * stop all network processing and request network reinitialization. + * That is, the IP address of the interface should be cleared and + * Client should move to DHCS_INIT state. At this time, the user needs + * to be informed that the client is restarting. + * 4. The Client calls the callback with state as DHCS_RESTARTING. + * 5. The Client moves to DHCS_INIT state. + * + */ + +#define DHCS_UNUSED 0 /* no discovery attempted */ +#define DHCS_INIT 1 /* Ready to send a DISCOVER packet */ +#define DHCS_INITREBOOT 2 /* Have IP, ready to send REQUEST(skip DISCOVER)*/ +#define DHCS_REBOOTING 3 /* rebooting/reclaiming address */ +#define DHCS_SELECTING 4 /* discovery sent, but no offer yet */ +#define DHCS_REQUESTING 5 /* sent request; waiting for ACK|NAK */ +#define DHCS_BOUND 6 /* got a ACK we liked */ +#define DHCS_RENEWING 7 /* Renewing the lease */ +#define DHCS_REBINDING 8 /* rebinding to new server */ +#define DHCS_RESTARTING 9 /* Temp. state. Only to inform callback() */ + +/* macro for writing IP address options to the options buffer. +Assumes the IP address is in local endian. */ +#if(BYTE_ORDER == BIG_ENDIAN) +#define PUT_IP_OPT(ptr, code, ip) { \ + *ptr++ = code; \ + *ptr++ = 4; \ + *(ptr++) = *(char*)(&ip); \ + *(ptr++) = *(((char*)(&ip))+1); \ + *(ptr++) = *(((char*)(&ip))+2); \ + *(ptr++) = *(((char*)(&ip))+3); \ + } +#else +#define PUT_IP_OPT(ptr, code, ip) { \ + *ptr++ = code; \ + *ptr++ = 4; \ + *(ptr+3) = *(char*)(&ip); \ + *(ptr+2) = *(((char*)(&ip))+1); \ + *(ptr+1) = *(((char*)(&ip))+2); \ + *(ptr) = *(((char*)(&ip))+3); \ + ptr += 4; \ + } +#endif + +/* macro for writing string options to the options buffer */ +#define PUT_STRING_OPT(ptr, code, string) { int len;\ + *ptr++ = code; \ + len = strlen(string); \ + *ptr++ = (u_char)len; \ + strncpy((char*)ptr, (char*)string, len); \ + ptr += len; \ + } + +/* macro to extract IP option. extracted address is in NET endian */ +#define EXTRACT_IP_OPT(ptr, ip) { \ + ptr++; \ + (ip) = *(long*)(ptr); \ + } + +#define BOOTREQUEST 1 /* packet op codes */ +#define BOOTREPLY 2 + +/* DHCP hardware typres, from ARP section of RFC1700 */ +#define ETHHWTYPE 1 /* ethernet hardware type */ +#define LINEHWTYPE 20 /* Serial line hardware type */ + +#define RFC1084_MAGIC_COOKIE htonl(0x63825363) +#define RFC1084_PAD ((unsigned char) 0) +#define RFC1084_SUBNET_MASK ((unsigned char) 1) +#define RFC1084_GATEWAY ((unsigned char) 3) +#define RFC1084_END ((unsigned char) 255) + +#define WHITESPACE "\n\t " + +#define ADDR_ERR_STRING "Invalid ethernet address" + +#define xtoi(x) ((x>='a')&&(x<='f')?(x-'a'+10):((x>='A')&&(x<= 'F')?(x-'A'+10):(x-'0'))) + +#define OP 0 +#define HTYPE 1 +#define HLEN 2 +#define HOPS 3 +#define CIADDR 12 +#define YIADDR 16 +#define SIADDR 20 +#define CHADDR 28 + +#define BOOTP_OPTSIZE 64 /* older value */ +#define DHCP_OPTSIZE 312 /* newer value */ + +/* bit we mask into the op field of received packets internally. + * This is set if the packet is DHCP (as opposed to plain bootp) + */ +#define ISDHCP 0x04 +#define isdhcp(bp) (bp->op & ISDHCP) + + +/* The structure of a bootp/dhcp packet. This is the + * UDP data area of a bootp or dhcp packet. + */ + +struct bootp { + unsigned char op; + unsigned char htype; + unsigned char hlen; + unsigned char hops; + unsigned long xid; + unsigned short secs; + unsigned short flags; + unsigned long ciaddr; + unsigned long yiaddr; + unsigned long siaddr; + unsigned long giaddr; + unsigned char chaddr[16]; + unsigned char sname[64]; + unsigned char file[128]; + unsigned char options[BOOTP_OPTSIZE]; /* was "vend" for bootp */ +}; + +/* define sizes for both old bootppackets and newer dhcop packets. + * Need to be aware the Windows95 and other broken systems send DHCP + * packets in the bootp size, so you need to check both size and + * options to + */ +#define BOOTPSIZE (sizeof(struct bootp)) +#define DHCPSIZE (BOOTPSIZE + (DHCP_OPTSIZE-BOOTP_OPTSIZE)) + +/* dhcp utility routines */ +u_char * find_opt(u_char opcode, u_char * opts); + +/* DHCP client per-interface state: */ +struct dhc_state { + unsigned state; /* one of the "DHCS" states below */ + int tries; /* retry count of current state */ + u_long xid; /* last xid sent */ + u_short secs; /* seconds since client came up */ + u_long last_tick; /* time of last DHCP packet */ + u_long lease; /* lease; only valid if state == DHCS_BOUND */ + u_long t1 ; /* lease related - renew timer */ + u_long t2 ; /* lease related - rebind timer */ + u_long lease_start; /* time in cticks of when lease started */ + + /* Configuration options of outstanding request */ + ip_addr ipaddr; /* IP address */ + ip_addr snmask; /* subnet mask */ + ip_addr defgw; /* default gateway (router) */ + + ip_addr rly_ipaddr; /* IP addr of our RELAY agent (if any) */ + + /* IP Address of the DHCP Server. + * Needed to send unicast when renewing IP Addr + */ + ip_addr srv_ipaddr; + +#if defined(DHC_MAXDNSRVS) && (DHC_MAXDNSRVS > 0) + ip_addr dnsrv[DHC_MAXDNSRVS]; /* domain name server addresses */ +#endif /* DHC_MAXDNSRVS */ + + int (*callback)(int iface, int state); /* callback when IPaddress set */ +}; + +extern struct dhc_state dhc_states[MAXNETS]; /* DHCP client state of each net*/ + +/* DHCP client entry points */ +int dhc_init (void); +int dhc_second (void); +int dhc_alldone (void); +int dhc_ifacedone (int iface); +void dhc_state_init (int iface, int init_flag); +void dhc_halt (int iface); +void dhc_set_callback(int iface, int (*routine)(int,int) ); +int dhc_stats (void *pio); + + +#endif /* _DHCPCLNT_H */ + + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/dns.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/dns.h new file mode 100644 index 0000000..345634f --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/dns.h @@ -0,0 +1,216 @@ +/* + * FILENAME: dns.h + * + * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved + * + * DNS defines for NetPort IP stack. + * + * MODULE: INET + * + * + * PORTABLE: yes + */ + + +#ifndef _DNS_H_ +#define _DNS_H_ 1 + +/* set defaults of DNS variables, may override in ipport.h */ + +#ifndef MAXDNSNAME +#define MAXDNSNAME 256 /* max length of name including domain */ +#endif + +#ifndef MAXDNSUDP +#define MAXDNSUDP 512 /* MAX allowable UDP size */ +#endif + +#ifndef MAXDNSSERVERS +#define MAXDNSSERVERS 3 /* MAX number of servers to try */ +#endif + +#ifndef MAXDNSADDRS +#define MAXDNSADDRS 10 /* MAX IP addresses to return via gethostbyname() */ +#endif + +#ifndef MAXDNSALIAS +#define MAXDNSALIAS 2 /* MAX number of alias names */ +#endif + +#define DNS_QUERY 0 /* Op code for query */ +#define DNS_UPDT 5 /* Op code for UPDATE request */ + +/* DNS Record types */ +#define DNS_TYPE_QUERY 0 /* Type value for question record */ +#define DNS_TYPE_IPADDR 1 /* Type value for IPv4 address */ +#define DNS_TYPE_AUTHNS 2 /* Authoritative name server */ +#define DNS_TYPE_ALIAS 5 /* Alias for queried name */ +#define DNS_TYPE_PTR 12 /* Domain Name pointer */ +#define DNS_TYPE_AAAA 0x1c /* IPv6 address ("AAAA" record) */ + +/* Description of data base entry for a single host. */ +struct hostent +{ + char * h_name; /* Official name of host. */ + char **h_aliases; /* Alias list. */ + int h_addrtype; /* Host address type. */ + int h_length; /* Length of address. */ + char **h_addr_list; /* List of addresses from name server. */ +#define h_addr h_addr_list[0] /* Address, for backward compatibility. */ + +#ifdef DNS_CLIENT_UPDT + /* Extra variables passed in to Dynamic DNS updates. */ + char * h_z_name; /* IN- zone name for UPDATE packet */ + ip_addr h_add_ipaddr; /* IN- add this ip address for host name in zone */ + u_long h_ttl; /* IN- time-to-live field for UPDATE packet */ +#endif /* DNS_CLIENT_UPDT */ +}; + + +/* basic internal structure of a client DNS entry. This one structure does double + * duty as a request manager and database entry. + */ + +struct dns_querys +{ + struct dns_querys * next; + u_long send_time; /* ctick when last request was sent/received */ + u_long expire_time; /* second (local) when this data expires */ + unshort tries; /* retry count */ + unshort lport; /* local (client) UDP port, for verification */ + unshort id; /* ID of request, 0 == unused entry. */ + int replies; /* number of replys to current request */ + int ipaddrs; /* count of entries in ipaddr_list[] */ + ip_addr ipaddr_list[MAXDNSADDRS]; /* IP addresses (net endian) */ + char * addrptrs[MAXDNSADDRS]; /* pointers, for hostent.h_addr_list */ + int err; /* last ENP_ error if, if any */ + int rcode; /* last response code if replys > 1 */ + char dns_names[MAXDNSNAME]; /* buffer of names (usually w/domain) */ + char ptr_name[MAXDNSNAME]; /* The result of PTR query is stored here (just one for now) */ + ip_addr auths_ip; /* IPv4 addresses of 1st auth server */ + char * alist[MAXDNSALIAS+1]; /* alias list, points into dns_names */ + + /* Most DNS queries need a hostent structure to return the data to + * the calling application; so we embed the hostent structure inside + * the query structure - one less alloced buffer to keep track of. + */ + struct hostent he; /* for return from gethostbyname() */ + char type; /* type of original query */ + +#ifdef IP_V6 + int ip6addrs; /* count of entries in ip6_list */ + char ip6_list[MAXDNSADDRS][16]; /* IPv6 address from answers */ + char auths_ip6[16]; /* IPv6 addresses of 1st auth server */ +#endif /* IP_V6 */ +}; + + +/* List of DNS objects */ +extern struct dns_querys * dns_qs; + +/* Macros to allocate & free DNS objects */ +#ifndef DNC_ALLOC +#define DNC_ALLOC(size) (struct dns_querys *)npalloc(size) +#define DNC_FREE(ptr) npfree((void *)ptr) +#endif + +/* pending requests, can be used as a flag to spin dnsc_check() task */ +extern unsigned dnsc_active; + +/* DNS client statistics: */ +extern ulong dnsc_errors; /* protocol/implementation runtime errors */ +extern ulong dnsc_requests; /* requests sent */ +extern ulong dnsc_OK; /* OK replys received */ +extern ulong dnsc_unks; /* error (unknown) replys received */ +extern ulong dnsc_tmos; /* timeouts */ + + +/* DNS operational parameters which can be set at run time */ +extern ip_addr dns_servers[MAXDNSSERVERS]; + +#ifdef DNS_CLIENT_UPDT +extern char soa_mname[MAXDNSNAME]; +#endif /* DNS_CLIENT_UPDT */ + +extern unsigned dns_firsttry; /* time to first retry, in seconds */ +extern unsigned dns_trys; /* max number of retrys */ + + + +/* header format of a DNS packet over UDP */ +START_PACKED_STRUCT(dns_hdr) + unshort id; /* 16 bit unique query ID */ + unshort flags; /* various bit fields, see below */ + unshort qdcount; /* entries in the question field */ + unshort ancount; /* resource records in the answer field */ + unshort nscount; /* name server resource records */ + unshort arcount; /* resource records in the additional records */ +END_PACKED_STRUCT(dns_hdr) + +#define DNS_PORT 53 /* DNS reserved port on UDP */ + +/* DNS header flags field defines */ +#define DNSF_QR 0x8000 /* query (0), or response (1) */ +#define DNSF_OPMASK 0x7800 /* 4 bit opcode kinds of query, 0==standard */ +#define DNSF_AUTHOR 0x0400 /* authoritative */ +#define DNSF_RECUR 0x0100 /* recursion */ +#define DNSF_NONAME 0x0003 /* No such name. */ +#define DNSF_AA 0x0400 /* set if Authoritive Answers */ +#define DNSF_TC 0x0200 /* set if truncated message */ +#define DNSF_RD 0x0100 /* Recursion Desired bit */ +#define DNSF_RA 0x0080 /* Recursion Allowed bit */ +#define DNSF_Z 0x0070 /* 3 reserved bits, must be zero */ +#define DNSF_RCMASK 0x000F /* Response Code mask */ + +/* Reponse Code values: */ +#define DNSRC_OK 0 /* good response */ +#define DNSRC_EFORMAT 1 /* Format error */ +#define DNSRC_ESERVER 2 /* Server Error */ +#define DNSRC_ENAME 3 /* Name error */ +#define DNSRC_EIMP 4 /* Not Implemented on server */ +#define DNSRC_EREFUSE 5 /* Server refused operation */ +#define DNSRC_UNSET 0xFF /* No reponse yet (used only in dns_querys struct) */ + +#ifdef DNS_CLIENT_UPDT + +/* Error codes used within Dynamic DNS Update operation */ +#define DNSRC_EDOMAIN 6 /* Some name that ought not to exist, exists */ +#define DNSRC_ERRSET 7 /* Some RRset that ought not to exist, exists*/ +#define DNSRC_ENRRSET 8 /* Some RRset that ought to exist, does not */ +#define DNSRC_NOTAUTH 9 /* Server is not authoritative for the zone */ + /* named in the zone section */ +#define DNSRC_NOTZONE 10 /* A name used within the Update section */ + /* is not within the zone denoted */ +#define DNS_CLASS_NONE 254 /* CLASS NONE */ + +#endif /* DNS_CLIENT_UPDT */ + +/* DNS client external entry points: */ +int dns_query(char * name, ip_addr * ip); /* start a DNS query */ +int dns_lookup(ip_addr * ip, char * name); /* check query status */ +void dnsc_check(void); /* spin once a second to drive retrys & timeouts */ + +/* New (for v2.0) version of dns_query(), which takes a record type + * argument and fills in a pointer to the dns_query structure. + */ +int dns_query_type(char * name, char type, ip_addr ipaddr, + unsigned long ttl, struct dns_querys ** dns_ptr); + +/* flags for in_reshost(); */ +#define RH_VERBOSE 0x01 /* do informational printfs */ +#define RH_BLOCK 0x02 /* block with call to tk_yield() */ +int in_reshost(char * host, ip_addr * address, int flags); + + +/* Return entry from host data base for host with NAME. This could be + * in sockcall.h but is here because a non-TCP used may want DNS. + */ +struct hostent * gethostbyname(char * name); +int nslookup(char * name, char type, struct dns_querys **dns_entry); + +/* ....And the crufty v6 version (RFC2133).... */ +struct hostent * gethostbyname2(char * name, int af); + +#endif /* _DNS_H_ */ + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/dnsport.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/dnsport.h new file mode 100644 index 0000000..3f17096 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/dnsport.h @@ -0,0 +1,40 @@ +/* + * FILENAME: dnsport.h + * + * Copyright 2000 By InterNiche Technologies Inc. All rights reserved + * + * + * MODULE: DNS + * + * + * PORTABLE: no + */ + +/* dnsport.h + * + * Per-port DNS definition. Most of these are pretty much the same on all + * systems, but may require tuning for weird cases + */ + +#ifndef _DNSPORT_H_ +#define _DNSPORT_H_ 1 + +#define UDPPORT_DNS 53 /* UDP port to use */ + +typedef short int16_t; +typedef unsigned short u_int16_t; +typedef unsigned long u_int32_t; + + +#ifndef NO_TIME_T +typedef unsigned long time_t; + +/* a unix-y timeval structure */ +struct timeval { + unsigned long tv_sec; + unsigned long tv_usec; +}; +#endif + +#endif /* _DNSPORT_H_ */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/ether.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/ether.h new file mode 100644 index 0000000..62d88f7 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/ether.h @@ -0,0 +1,94 @@ +/* + * FILENAME: ether.h + * + * Copyright 2000 By InterNiche Technologies Inc. All rights reserved + * + * information common to all ethernet drivers + * + * MODULE: INET + * + * + * PORTABLE: yes + */ + +/* Additional Copyrights: */ +/* Portions Copyright 1990, 1993 by NetPort Software. */ +/* Portions Copyright 1986 by Carnegie Mellon */ +/* Portions Copyright 1983, 1985 by the Massachusetts Institute of Technology */ + +#ifndef _ETHER_H_ +#define _ETHER_H_ 1 + + +/* initialization modes: 0 = rcv normal + broadcast packets */ +#define LOOPBACK 0x01 /* send packets in loopback mode */ +#define ALLPACK 0x02 /* receive all packets: promiscuous */ +#define MULTI 0x04 /* receive multicast packets */ + +/* ethernet packet header */ + +START_PACKED_STRUCT(ethhdr) +u_char e_dst[6]; +u_char e_src[6]; +unshort e_type; +END_PACKED_STRUCT(ethhdr) + +/* ETHHDR_SIZE - size of packet header structure for allocation + * purposes Note this is a default -- it should be overridden in + * ipport.h if the need arises. + */ + +#ifndef ETHHDR_SIZE +#define ETHHDR_SIZE (sizeof(struct ethhdr)) +#endif /* ETHHDR_SIZE */ + +/* ETHHDR_BIAS - where to locate the struct ethhdr within the + * allocated space, as an offset from the start in bytes Note this is + * a default -- it should be overridden in ipport.h if the need + * arises. + */ + +#ifndef ETHHDR_BIAS +#define ETHHDR_BIAS 0 +#endif /* ETHHDR_BIAS */ + +/* ET_DSTOFF - offset of destination address within Ethernet header + */ +#define ET_DSTOFF (0) + +/* ET_SRCOFF - offset of source address within Ethernet header + */ +#define ET_SRCOFF (6) + +/* ET_TYPEOFF - offset of Ethernet type within Ethernet header + */ +#define ET_TYPEOFF (12) + +/* ET_TYPE_GET(e) - get Ethernet type from Ethernet header pointed to + * by char * e + * Note returned Ethernet type is in host order! + */ +#define ET_TYPE_GET(e) \ + (((unsigned)(*((e) + ET_TYPEOFF)) << 8) + \ + (*((e) + ET_TYPEOFF + 1) & 0xff)) + +/* ET_TYPE_SET(e, type) - set Ethernet type in Ethernet header pointed to + * by char * e to value (type) + * Note Ethernet type is value is expected to be in host order! + */ +#define ET_TYPE_SET(e, type) \ + *((e) + ET_TYPEOFF) = (unsigned char)(((type) >> 8) & 0xff); \ + *((e) + ET_TYPEOFF + 1) = (unsigned char)((type) & 0xff); + +/* minimum & maximun length legal ethernet packet sizes */ +#define ET_MINLEN 60 +#define ET_MAXLEN 1514 +#define MINTU 60 +#define MTU 1514 + +extern unsigned char ETBROADCAST[]; + +#endif /* _ETHER_H_ */ + + + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/genlist.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/genlist.h new file mode 100644 index 0000000..45c9d87 --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/genlist.h @@ -0,0 +1,142 @@ +/* + * FILENAME: GENLIST.H + * + * Copyright 1999-2002 By InterNiche Technologies Inc. All rights reserved + * + * MODULE: MISCLIB + * + * ROUTINES: + * + * PORTABLE: yes + */ + +/* Additional Copyrights: */ + +/* + * GENERIC Implementation of a list. + * + * 1999 - Implemented for use with SNMPv3 tables -AT- + * 2/21/2002 - Added niche_add_sorted() and moved from snmpv3 to h -AT- + */ + + +#ifndef GENLIST_H /* Make sure the header file is included only once */ +#define GENLIST_H 1 + +#include "ipport.h" + +/* Generic list is used by SNMPv3 code and IPFILTER code. */ +#if (defined(INCLUDE_SNMPV3) || defined(USE_IPFILTER) || defined(INICHE_SYSLOG)) +#define USE_GENLIST 1 +#endif + +#define GEN_MAX_ARRAY 10 + +#ifndef GEN_ALLOC +#define GEN_ALLOC(size) npalloc(size) +#endif +#ifndef GEN_FREE +#define GEN_FREE(ptr) npfree(ptr) +#endif + +#ifndef MEMCMP +#define MEMCMP memcmp +#endif +#ifndef MEMCPY +#define MEMCPY memcpy +#endif + +#ifndef SUCCESS +#define SUCCESS 0 +#endif +#ifndef FAILURE +#define FAILURE 1 +#endif + + +#ifndef MAX_NAME_LEN /* usually defined in snmpport.h */ +#define MAX_NAME_LEN 64 /* max number of subid's in a objid */ +#endif + +/* NicheElement had two members. One is a pointer to the DATA and the + * other is a pointer to the next element. If there is no next + * element, the pointer is NULL. GEN_STRUCT can be anything. + * Following are some thoughts on the way things are declared and + * intended. + * 1. If there is only one list, GEN_STRUCT can be + * explicitly named to the STRUCT/CLASS + * 2. If there are multiple lists, then GEN_STRUCT can be "void*" + * and casting can be done whenever we are using it + * 3. If we need a CLASS implementation, all the functions can be + * made as interfaces of the CLASS. So we just + * need a class wrapper. Further, it is assumed that GEN_STRUCT has + * two members defined as follows + * "long id;" + * "char name[MAX_NAME_LEN];" + * The list can be a singly indexed list (that + * is all elements can be uniquely identified by their IDs). Or it + * can be doubly indexed list (all elements can be uniquely + * identified by their ID and name combined). Lookup and deletion + * from the list has been provided for this use. + */ +struct TemplateStruct +{ + long id; + char name[MAX_NAME_LEN]; +}; + +typedef struct TemplateStruct * GEN_STRUCT ; + +struct NicheElement +{ + GEN_STRUCT p_data; /* Pointer to element/data */ + struct NicheElement * next; /* Pointer to next data element */ +}; + +typedef struct NicheElement * NICHE_ELE; + + +struct NicheList +{ + NICHE_ELE head ; /* First element of the list */ + int len_of_element;/* Len of the struct representing element/data*/ +}; + +typedef struct NicheList * NICHELIST; + + +int niche_list_constructor (NICHELIST list, int len_of_ele); +int niche_list_destructor (NICHELIST list); +int niche_add (NICHELIST list, GEN_STRUCT ptr_data); +int niche_add_sorted (NICHELIST list, GEN_STRUCT ptr_data); +int niche_add_id_and_name (NICHELIST list, long id, char * name); +int niche_del (NICHELIST list, GEN_STRUCT ptr_data); +int niche_del_id (NICHELIST list, long id); +int niche_del_name (NICHELIST list, char * name); +int niche_del_id_and_name (NICHELIST list, long id, char * name); +GEN_STRUCT niche_lookup_id (NICHELIST list, long id); +GEN_STRUCT niche_lookup_name (NICHELIST list, char *name); +GEN_STRUCT niche_lookup_id_and_name(NICHELIST list, long id, char *name); +int niche_lookup_multi_match(NICHELIST list, long id, char * name, + GEN_STRUCT matches[]); +int niche_list_show (NICHELIST list); +int niche_list_len (NICHELIST list); +GEN_STRUCT niche_list_getat (NICHELIST list,int index); +int niche_element_show (GEN_STRUCT ptr_data); + + + +#define NICHE_ERRBASE 2000 + +#define NICHE_NO_MEM (NICHE_ERRBASE+1) +#define NICHE_NO_MEM_FOR_DATA (NICHE_ERRBASE+2) +#define NICHE_ADD_NOT_ENOUGH_MEMORY (NICHE_ERRBASE+3) +#define NICHE_DEL_LIST_EMPTY (NICHE_ERRBASE+4) +#define NICHE_DEL_NOT_FOUND (NICHE_ERRBASE+5) +#define NICHE_DEL_NOT_ENOUGH_MEMORY (NICHE_ERRBASE+6) +#define NICHE_LISTPTR_INVALID (NICHE_ERRBASE+7) +#define NICHE_DUP_ENTRY (NICHE_ERRBASE+8) + + +#endif /* GENLIST_H */ + diff --git a/FPGA_nios/hit_pat_bsp/iniche/src/h/htcmptab.h b/FPGA_nios/hit_pat_bsp/iniche/src/h/htcmptab.h new file mode 100644 index 0000000..cd22b3e --- /dev/null +++ b/FPGA_nios/hit_pat_bsp/iniche/src/h/htcmptab.h @@ -0,0 +1,123 @@ +/* htcmptab.h + * + * Copyright 1996 2001 by NetPort software. All rights reserved. + * + * Compression table for HTML compression. This files contains + * static data & thus should be included in only ONE source file per + * executable. + * +!!!!!!!!!!!!!!!!!! W A R N I N G !!!!!!!!!!!!!!!!!!!! + * If you change this table, be sure to recompile BOTH the VFS tables + * AND your application. If you don't do this you will get lots of + * subtle, hard to find errors. + */ + +#ifndef _HTCMPTAB_H_ +#define _HTCMPTAB_H_ + +/* A one byte insertion value is derived for each of the + * following common HTML strings by the following: + * + * low 7 bits is offset into array + * high bit always on + */ + +char * htmltags[] = { +" ", +" ", +"", +"", +" ", +"\r\n", +"`6g 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

  • T@Pkwo;e+r&qzC%HyHEv8I^8 z8B~Sk;t3}|wf4?CmgHxV8IO#JqgFQ3_$vhdQx=UOn{LC6<(N{hU^%@(K9xuI1PyE=>X&PB?|G|-4!}`kzAhu*t;I%S;-qy4eug;o^b9&QQ`YKK~bgm zKB*P|{>HShXH)@?xDX_N3T?9k=PSDU2xj!l{w(-FO}co`Z!dy>Ea}YRuu-w*#MnI7 zvk`;Y6@1%Epk}iS;gL;uC607`@-|rj^fuLD2*bA z_$>CJsrfrG*NH^7^|~0h$=w!{VaV!3!ILz?Y#RH>-Ii=Z*d5ZZ{_DBzw%O*3iQ!hE zOYc#QT}JEJRR`&=ivbBPos)L1_JOSh9Q*j>51ACSO=*vwbsw#l$oVF1_;{mKe-~U#M?<+uRe0&3cO+#N+k3P-ZrY zO=63jXX09r=k7A!5 zVII5Ek2-a0(U0Kt$eZxK6?2QpkC9Ni=Npw5PQ7oj0TlVT&n7-?qGowWUb^UFZon#_ zKIOIfuDkqb@8`%RXu6yk8dR9g*k>Tru>ddOWx*KyEWSeo$&!rCetqo4%YrxfA-|9N zN97h~PqX`HMvUr4?3KlJGfNYZ3Y8ba%6GR34)IAF167ov<<&+0gC|)Yg#aO*hESEW zxug>pU9UE~oPuo^x97(Iwn5?KWqFB_w%zV{v#jKNQ@#BC@mx$7c6UCLQEi#%`%A=z z44#eB!|NCtLNF5kYIKrOJyE5E{W2at`O0CnP=Nfpk;;0h$*Jmc+xuj4n*0-yf%W_4 zUXXyoq%27cdh(@kIy^_3O~u(wy%)eec4d(|>vHDa>(9H-RHy~P{^ueAc#E6SP~AGz z=n-7C3qEs&Vf;ReW1B-hG9azSYeY5$^(NO?bLT?Vh}^h~!@)=fgzR&}G79Ipl3WzO zg@f(+F5AzU$5{%A%;v$WDBywt+bdm;!3}=3R4B%3@3fJ_>WaXnBK@`XOGoel7t88Wud}VPxNmWB-Uag5eu_AAY$0>& z^x_P3$7t}jyw7j$pK$xk+xE1Y$ zDt|U7&~ERh^Zw&-1z2@@s=GSBT8pNl1WLVw(&LBHO}A6nr)qG!+e;!{ry8GGcOMPd zQSpv38(V3xn^0=Xsnh+gxV$1Cx3JM(1-pJ9Q>nAjSrq^?^<#DE`hFv8Uytf9G_$<9 z?RqCwBWlI@{oO;u-Cgw&@i4x}chl*=pVf1Qushd{+kkt=m%NQP^|p%}3+s)xcB?-$ z9AX^2be?})YCAmt79>CxYkR7}h_359YzPa=>nlaif5*d-qu-H>`X>DLW#OPVctbW- zuys0J_7Srbtsoz=u03yCbtxOcYxOl2WZ0XHFqF5k|Mml6%(;jQ`(`q0{)AY%U%V4S zT@D+ehws5*tH#aRN#`>amb$R**LC6oH1qlm(^ra5V;zM@qexwi8KWFSsxRIMf{*gx7-5sutd-4}(eu!oHjSfhUpe&%f?UWfwgbD2G3BiY=FyX>8>oZPfxDZD+-P z`kC_>RW3Cv)dQ8|>~vYm|G$Z* zGk~JooylgbwYe^XeuzoPa#VT2eGCej`vOQTO)sD~rvsOc%jb7d0V= z+8Z2m)8zM+LG}u}9%9zktD^J6utUmOSV!e;NkuE`hBB~LdEqxF1#?HAxc@lk@-x$PBTAnCCn%z9@5;KdoFu?|qD*c#ho#C%WWDkso+U)MmXnq1vVI$XVqli+yY+ zkYf6iCRyJ!^qPuItq6BEP8+D&TD3+|qBavupjK+YzEVbNVyHH1BV%ikGbg8ZQnGGY z|31HySoUSqND=clt?>zVgoqcnO0_l-7a6-6^WEn$TeB0= zq%t2RuF%rv7JC5|2OR|e-Qg4ve}wk3ac|%_jrjL|H@Xz>P35Z=a+6-v6ct%;E=6_- z6=g+z^eV(;d^z@hV^aKB^;D{DO;W6k2ja3RgEvG6P%DLR@C3o=FKkeTHG?N&ql32L ztj~FB${D4uF}Z{~+f|$2xNL`gT9}{f>XqBTo6bvB$IlLS2c+-V_-CZcVtW-Vd?l%W zsJUZycSfNHyjf_);x zOjwev!BDmpl=0|DK(Etd@}Z&Iqm$idack0V`qMT~cXT<*9_zJpS zphRoT@=X+T{e(>XN+@DpuC^_fro1u86(_q!t2iq~Pu<;S;^Br>|BppwULmHbHIWLs zRbCh>7nZ>xVF$pf$x*`j&q%tjhh$Vm7b3!PY zSgY-V_<0D2j$z}f%qX?-k9l~Qw$0bOVZTi~_G?SbC85%Stc7Z4c`UxYoXrOLQ>(A| z(Jy7R{%J+AFGn@xyYTw+6L#v@*(ojSyaJ~2kzX#qad~m<&hjC$EooqnZ~aWahK6OR zYJ7ApanAlZCR#@LAWV$SvmvgRa0)4&X(DXG9(YQ}Hlp~3rBDQXv68+oD8IJ)?4_@yc=R#O8RbxDQpjKi!P$?UvNueR8;~t5}SK8ibJAqs#Ck~b& zwu7k)!)e0C#4%1Kvy^bd8Riau($l~urh3 zpDF5ly<#rBsmX8jlgQ@$OiVA#q)j(~SPq_(uq}ccpbXSHbF-OECf8H%{BE8}T-U`& zviwk7x8l<7bL1C~qJnOXf8cB;dl$m-CGvXP<`HnWqNc?jc&lMm`bD^e zR%Re3g7vjEHSUd1Rw`irqj4l5q+xALWj4yH^(^9GPb=rJ)KI$N&|%ZakxfEGoZcGe zU%DmHk_GWDE1MBK(&$p9WmuQ8M!m4h%+D^zR$G)s(qtFXDrQXEK&g-vK_-KAc3Uv@Zg?7qccFycMxEE-Q=OjF(2bAgZvXu8hvn7fqU4 zbE;Ud3`oV?(8*4io!Ax~u(%1R46)w1HTC;yImSVr_gl%JUG>`UU(~IUWUtUn@Z^!qgOAxuOrv7mO{bouA9TC4_tXI(OdvIDL?)$ zyl+>PD!*gNuhXRsuqpK`SwgGdRDNzdiPvmBQb<}cFmLl(kbN1D<+Gs7;=+WbZ^ZIX z@f=Y0aVR?AU|S_jS_zneB&REoVSX>zL)Ww3Y?%8jgS61h(1@G-C&|JLDD?UDyq+K5IRN%OsV=!Mu#1>#&TIiE4 zYq_wp9R9AqQ*5ADMKpH0umXec-<}xy4*McakRee6Z_d58pj}37Nn=0y9xT(8v|~%@R-`H7&6$zZo9et8-G>4@&m8rGdYU< z0orx)GiMD8PT6D)yAB;MMys3fHMTfR6= zi8ASXAiiIjydp=1!aRanpT&I{Bb8Ql9yfusl^WgHW)(9ENUc0$zi<$utE@ePDCo7? zx)I|qEVztBtN|-j!bE%CYMzb`eY%zM>;h_98Z%0WQw8;T4ai%9IPmlF3w^%}%=3E4 z^+h+%Yo8tUrGIY8Uz3lnv}EI-POJ6`ndD(J0>=|+f4v&#&ikLP9Nut$-GLgA=u^g6TkKEP#1QZH$h2No!1lc}dgmiWL(A%kj`NQ(s;q z<2dp45P9lJn{q?LYvfM$MFyRV^(t056qWNrx^vG1Z^}+q?O07H#%bIsW)X2j>%zQD ziHVPKll!(Mz4gLhR=7iVCODoyzb)`Us@BukyD;r@(T+Df$ChhPeHhJm75Gk5LkRu4r-TB4(vne8{a$H8BxX`ZJ-veqPj@k zjh(k31yzq78mR52hs~n2`Ak=O>3|{DtzVH~W-wk?o?iB@N%N|z;BM9{es_EFntF{- zxn|wVCg+(159HkDq2yZ(I!p!CQt}xXaV$VQn6=*)n8eJKh3(B_S0U_nDyHDc8e!k4pC`~U2y-)9SLk7>@K zew6irhyJi7E6Of&^LG7@s#icEaQBwr$^a-D&*npU)oYeFy*Hjk`2o`8CeKnU;M~m> zB1TgARb(g6cm_XIOsN^mZ1W$26{W?!EEi9`MaYM`@&k;se}JS9Q2&poiL*IS*WKJ* z9tb#5n>WrB%i@R*ZVVCXvTcf1IR9&$i5!l03da7rfUg>)N%gm#6H}<(O}I?Ff~^3q zcCu!fm)!g`2s>T#5UCM1%&n=M-%{Smle)@lQf2kdS3fDs!8>WO%tS6qloM#iNbq%c ztbTgEzL{I+?FWw+>Mks{J<3oc0uU3$Bh%;)Rpzqj@J#|+I-FOQ`wVLX^A(lY@AWJt zQ4&mG8K-f-ARSqDST}VOBxRP$YGcYnb+{vbM5DS#hL#0Akhe1&E_d)$te-Z*4N|2} zv(vk0-z{}uB?mW-!K_w(uQCOPE=nyJ!MKXImenWJ%ObOa0chG8!s|8#`L4CTG#he= zy^)+4NhSIDRrto@w13lmp5A3n0gZgY)sY`FGjXglWZgQcebEzHWxhgrnUJu+ywQqd z;g-8TyI}s7x1RK7?w02txx#63609?!EhcN4XMld@%K;@HzBnOUq0($F2g$K-yJts__K)uBeqXpp6D2=Dm()A@U)W>fjS8MM37b|S& zKZM~A!DW;!n|uHqds0j(IhQh}lT_Q%Y;G@M8K)XXVeKSdKNUOAtH>EhG;=U)8URbQ`vIitaOiT))ji&vB(u=5$E~*Ymz1o$xpuB!!ZHdMV<%!4Ij^eNEss zHtHy$#mqj9;o2Uc>?okEZ{_k%=4G@)>+BqxJ3-IWLnq4VBrf`Ne$EbKdFhNYH6Rq^ za|vIy-Z&WKslk0bo6P%YyV5>!bs;KppIYQMZL*J-Qse`**rrf-{U{0NE zpEc#Z+#Sb zFkR_fOjuCJi|fNgMzv4bYcY$H6%kRvHu{<-r?SSp+yKkfKnN0YBmj=+I8OFm8U zk3GA0hHAAnQHO|1Yi*B;iJNX~jZ)Gf%7xiXL0Nsth51WcE6Yu+L6}`p?oh!&S~7$ml-09Uz#1r5BZOgw+B6 ziEE;q(hUy?q>Ph8w60U2aVBap;;m7q@-A#SJi4+M#~$M?Ui$hak40{BBsQ+k{>Pr z=r~qB`%0+87zO;|P2;cKm)0f6l&e6^kX*!WS7h8F$5D+ZF@dYF(4bXz8_n8lIkA^% zMjRf=?3K(L9`^@>5V^fyyf3Ztq>4tVY-iI>x-gw;%!BmK#+-gnUAU@sd2PUhuUUcf z^BBcqsb8qf6pU3)mZ_&<9oRR__3`ebR4ivi)QM#57D#7qGY!M_meg?}^%=Yu3d|~} zZCj>Sk85TkulB)N&2=DYV(KjZxsbd+gG^tpF?@GpcqDMwp;mOrQ8-t>KZBXd*XV2z zVRd#I%;QWSyAE!Jng2$q*v~lWJ0PT-#_4tESl2b@--c&g%qqH%C301W z+1fV;sqA~KyTE=*_^qM-Pq00Qu1Qv1&u5C07MhTegE2)6}B8&RhLHe&hgeiW?K zWCF36%2aV{t0TEGrE=?n<3ev0C$HSbmZla}rZE>IWF3OW-rfP~8TRrY-(Z_)C$u|i zKrOv6!Fv0*zscg=DR0)ijlM3Pd>P^yV*c*hS)MU^L)cJtjURj~^@R5(%qDogB1Un9 z=TxNIjFXNZ(R0MimV`!rx2;@pPj7RKmkP&VmbkKKow1ogIUyw)JUou2s(un*uC-0u zF5bI7ak4XVYjh}3HZ&|u%7GsooUi_w)-=-xiD!dnFdTDKh!GHdR{+7{d6&DUSH`ZEDjV#mB@cv2k>zO}Ww$*Ocac4#cakoYU1f14KbJ94 ztIe@JakZ0bRFb@?pL5w~WzXQ$112d{P0szPIChW6!(h!R@}dA(gmWRDzxp3;~|LFnGKijfnn0q}L^lE)tH-1=noi!WRplS}>*v zxcIRX$xI@^#Gk_UP2crR-#*1!=^O%YCeqpL*olZYSbcC@KC)K>s_0D5)YD$m-n)lW zENJU#`^VpJ?r*otmNdQZ0dp$p0)B&%-1`yFDqTIMzJuXS7x*Pl89VswWx&#Ks@`;$ z(}l)|dk;6iq`!{rM0oHMKc_7sUy9rCrFY-|_T0?{;%pV46vJ8ykk|elJSN{m>Y8iv zq#of;MffZt@)z_|lp0IUsWy!K2OioRru4Tw7REaXWqcMmh}r@sGzGSzGRbcl-;}&$ zpUB_(sU^8}ct348;z0{{F6jpSz#V7vz>XrEi5(8wz0w5qWB;g+>iX31C(RY>6Kn!8Aj;Mb1rza=@Y zQ`F&4Go_BA3B<@^von+=57W3oq78zru}btbepu#I4x)ZqJykaDjnS2IZR^fcRoRE! zV_Aoqw$0r3ux?Ye1Nz=*{l;j~1JRZD7(-X?&#m`>o3r5dv!ulPHnsbXkE4$dmu=W1 zCh9PI={a8oeBJ`x{pO$VA&0KY&kEP?edAhY^n;{NX`fkKc@{T>lb_G9U7hIblBeAY z`D2*WT#s4%C%lL4c^11I3)h{q{ZgMgm0#^0JB)$fO+6~=blNYQeKc0SR>S!T{fx?* zJ8fz|a?bKY*V_;;E9&=ZJ=AXNumGOcuU>50FxA*=TX}R?R5z*rxaYZFE(iy>`N)Ubq!V>29>n1sCSiU;48yUqzqa?-I$JV?Qj* zFhrT%k3OH@Cz|q)G5YlA`yA{0ywPfoPMbS~{53I(a_L!8Hm`2o)OX9~cPQ+1Oymzp z?mWxs{DCL4(fr+;S>H#W>x{7ZJF}_Hb}KtwbZ9{b#6C=pk$MDnj+$2a9@=Y@Hq#V? z49n_5KxU`1(q(GR?mn=zroq3Kasd^n-|FG;uyHd7Jjp1(GRdB|3q@q_O?MpmASrUA z=5t=D8rkdnBB>-(baW{`?K|HhL_o?O9-}s}k+C!H!-6=JuhFWhJ^J9jiTX25?Y^}< z=A`ECi0shXXQS2qRNtrFOrA%|pitMYbQh)lTz7xH*RsA#He?C;Q~l|}*lpqhYZ{EJ z-#gTO9IPe&A6#vXdR$(8W?$XM1K|0S#ysy@#JR>|Jjam1!;5YDMD){xv* zSZIG=hO=&-?A08s#{DIUsC|MYCyYN3-492wcF>+gZ;H>|>?l~mbB*u|N@aYuuTf;9*|E_1lS_#7+qbvpQitFxSc+ir_F z86ygnYn9}Xf{QY#-0zX5j*Lnj>C;r7Zi`ehf5k4XC=xvt3-k1d@=t!xype-j)2o{I^PR+}E(bX|B`+cv3SV zDF{e_cJc(IZ_MlH`%vtZbz*?Qj+O34ew-+4_Ey3$F)wI$+7+}qZz_yhXzGOL5;7v< z@KUQYI4Y<&Xe6X`V=ftdGAdJ)qoRv)u% zCGgD-R3S>XE873FGYtuA(6K#_4gg>K-JBbO6#Mdbe_o&dQyrM*BF z6P=>&_(EK#MBY5df4!fd)>KttW0Mq1DPnkw%5~){?G=FAt1&yyo z&IBJq_GYK;Yl09Rqu4vPWT-|5Yffcu&Avx9Z%Xrc>2`-Sp3xi)+ax6?^~niNCfq!2JVrC9Bz3srS7WXrH#&mhh>@uX zx}Z6(|5}#(H`TSjUv_JLR(Mp5#)5F(r%#2VASNr?&@BqF&8`#X_aOF=bB_)jAvxtF zCU$d6F#5t3Y*oYi8!^2XyjCqpPSuLhFDn*O5w#D;GY&I3d5J=KhfpPq1K;3=Ep1nZ zldO6`=7yiRwTsX^PnD2EI%mCgjJWm=`gFG3SY-Jcgo%)CRnh73QDJ&TjF$A>KV#!8 zpj2FFhnSbiPN@93#}*yfU$>(I%WJL{BbQVM#OH^o>JANCRnPdYH7=*tN;pjch_HYA zJSX?v^S>!w9d?OY)`Q{277JD;c$-5YO`YxZBn*5U6j1Zvf`_NnEi=gc<~@ETPW^T! zGh1fn!LVc7L#F>IUPE}X_FF?%QNgg}d!#lZZ+p~yu;}4MfO`oP#14~!ofXT!60m5E zxkajUUp|pIQ&K9j=MUhML_OwN(dSJaed)0OHr~}mgF%8^%#I+OUPCGF6};Q=tA(6U zA6JWbs3z7Ll#e1Bh!Y#(33 zJ+)CB6<1oKEOqdyjsXpx;`#V_x_`dwKB4Q^#$*;|OHxHOCDlc7qUCreLDfpC6Iqne z?uNPLri73#@zhMc1-=SFbSz5vQB-kcql`d9n@b}OyaY3(CNg%u=BPE|oMq+pN`zf7 zA(a}|&}SlPL#@vuMB_<)`)yY0%r8?1b0vaR@&dL7W<1firEK}^aE;hzoPxX?ag?-1 z%i`#!_Z4oYfo`v->V$!+ff7NHc1WRhordUQ!oSx=tTMvG$@Y6hzk{6Z4nHO9djMJ7+UdJh$D$Y!hF4b)c*-ni{*edI5AJ<$V zicE5nZ?1=6rT>yfXYuoNIohu>1I+C~)L{h;6?F2Mxmllg3FZ5Fcr!k2 zA%68E8eDTwk&@(0-V9R2jWz}NDL6<_Dfm-b#SWA^X%1nP(4){eaC4^2L7ED1Oq>^ zkmg(c3-h$2D+~o5g-ko#(w^qiU!$Exm8cy%439W2gWQO*Y|-4~Ze)a%U)> zSmz=`glX;M2^Fe_YsNC1ks>ECcbz;#YB()x%!Zek;w74}J%?Kuo4?LwU}-0wVUfy= z`&LuZ(b-*}iIcp7rG`Kt`c%@v|6Q?dKNvsgdr;FCJ0%G^+nfX+37(4SZ89Mz9>cg8 z{@`CL@$nYcw0#Mm3-AlA_P|}Lv}8hKzndz$W51SvqOggLVmS8Xs#Dt?@4=KkPoR?C zQjBk)?ac2ivopr55MQ(^ zEs=~&OA>Zoza6;~+;UB(c2)!F^oICp6bgfLMIN=Jy^IP!nv7W;Gwpf_PB@YF<7X%! z*9a?djMZcR@!seV1NP6zrBd5fPWsf%5nrBQb6V_Gj6Ys|+JzDnXaL19dGy72jD>|6 zTBOl)fUPFM?nB75;X#WNVo+N75#+4nfuu#E=|@FGDr_Gc9b{UU9IQfR)AeONOsHOx zTE#oux|XxX3$uMX1C5BRTn9%4>f4{{7dhsXI8e1&GKt=GBZy@?T zZN+DKy{*~WpVC3TCw!dlZc13FsEsh_=w_W{l7)$PmPS8ND;lE&Mt{pPs3k=Q${Q+X z_8ETSO-qXeddG(he!PQXJfv%oG^U*yUjEZWw`~)Fq@vBu8g8Wl4?%&JPymi~g_-AO zqr-qi6M`B9AERKL!Ksq@xJ53JjubKSwoZ=W_Nzg6L!6yqGpu$T56-lkd#ihd8bQ56TfzPm0VjPbSHA5s~9*U#$g9IEl|YT3)?o@9)&O-0B_u(T4fY@b3#;y7e)dKfJpk`4F*a6E`F&)5Z$ z?4SE!W({Sp!9@}0Y!W!RlfX|o{}?Gxd~zo8;LAqpbXCgcLw3+k$?XrVtmA)h)J z#dk!4PqYJNnZd>SG&dNpAa&moQ>GSBvs0J4FxJrybs zW$6BD6wG?btegqL+CfX5aiH2Wt(9tIUbyc0 zX4NlJRz!?G;;C)+M(EdPrMc?M2HE=g9In)LZi&IlCtokcfp}IpuO)oH>SB~OJvhFn zVDHB=mgIV9N;S(>GV;7yy-9~{)?Sj zL+T8}SB|ZmHRN0cUb0o$(@fziXF^_0lHW*bXkTd0CEZ$EgOm0K$6 z^y$~NAXbrS;0SFxobr0vD;`8$I9lPZ)OXC9y7je)E%grr`Cw<#Iq0IC59cB}AN3Ng zq>3c(O%?Jq$ed!zc4>W%>ar~>#>I@3T>m{+>~i99FokP#Mot*?j-xAxCXg2pbgG{D z8g;aJ*bqP)`sRc3DvsjE9QyVpv?-^WpK~GXseEqe;~BU{;?lA~sXxlm(D_-iX!Aa( zdNlXh%#r?g5Nldwu51=MUco9ltzZ-gImO8I`d~EUyVyZ{YwEV*PWX$M=&oc> zlMI!x$<4_xwXUqm_#+jQs4kL;&4{@MxNYgdRgOEP>Zga2(ia|;M+EPH!l1wQTaZ0| zf13yfPvIBCeYcC3NOAppX?99YvdZCOEPNv<%2(GZd0^qj4xA-TXX2Mgf6Mk}rKBoU<5Nhg*zu`%86IuS65%Agrv55c76jL8nms%m-{u3iwMxDjovi;7c zS#NSWh=G!)IdyN%ZpSOiG|9;ey_0Qrtc8O~hvXYy>{V9BS&Kd4(2dyDYn2n9LC_^h za^|LA5FMT%?aKqy5jQ>zLE4BI-gc9&#pyJsh8p}t4)PJc4&>4<{-n$Z;jUhwyW4M z%T1?pc7ZcZFfZgYNsa|yY*sU2v@)5f=r>1NH@+R>#MZ;vIbiYxU9ygNEzRBI$B!q= zId5R`G*ESrJHwH(j^ti?rzr z@|U1&wyV|fx)+^@l5L(wpze}^!0c@{=&lXj$LP|98 zAYKGqGwVHC7R}AhUX#z?OE+ho-l(D`@*t|P81#47!S>$8hd`JlqLijuG9IxeIMgVkkS&W} zhw%O=oV@xV8T&gAXDol@rwR;TWMB76!@5@*fW?ngqaM2>CR$Gl3{b(=jPTP6^{#`+ zTQGnW2B-#DA9l0HJ(K8uK=3Ex10oh_9Cgy9mF9fQ5yd`lR^w@nO?uprb^6ObO0%gO$;XZk5g3y^3<$RqFBidy}wby>uhi(}*|L4gC)N#=JZVrUR#vdlFXh z0}h2ItpH2~i$-u=us2CKFPxxOKsWMtU3yPg*XQ6Z%9j@*kb_};Gc;)ku>g+mpN%wQ z6IlmQXG8&#Crxn)UmST*{-P3QpUpYzj2qn8xtdb8}SFHt9=409*QBX5hYXOk9u3IYxQ4v#Z7 zG2ZY@1l4MqgEmsK?|v}=#&T9QU@l?bu>tQP*Mu+ufjdoGVtCIqUXi4~P?6yM;dl$K z>-^oSwqU;;V)VQtW|6{m;k&nMfEdRw$pH@i9efmE1-$2Cz`I-%{!k0y>jGR=pQjEq z@Dq@)XKYF%bPE}*MF%EtSpVWlx}&2C3Y{`)-{O4H{Q~~9XTSiq9UqeeJgB;K$$^2O z#&^sN#@!C>yNIP{E)jW_!|fXJq5YWPae|)0sdq?;1=MN`*#~8RvZYY3 zM^zA&tH7AWOTg9xoIXrCJ3<%AQvFNlTo67BWz$QFc|YzQ!x!3*7>5seN%^lQ$Dk%XnCZ4nutzXxd<1Zu zsOkdU+{*nx{_=hN_~+K$R6yXC0v*q$ia*R78%zKp?3d%X0D}d&;PpReEdz!`nmK!__nhpD4iLevJ-E5& z;yuL)SA;+3v_)2{;oo>b*nra>mp~=`@g^0{e$9LMF0{5+c@SB{Ys6L~D0LB;2XD6< zMo_AWI!+VfdjjG{a2EkI@P|Pqz#zyj2A2l>776}GRy zQyLkVWPG3&unBX4CHo-w1S2T9iH`Mxa2o?(B-na|9T&KZH1E(kUE&;X|U_q7K!DQY`0jxVl1f^`3o zWhY!#pc6X+iRhzjkL!g2Jy@V3LJiOze3eBHwqLTV-%8Fs^a4n1`)DA%(d})10XNVt z1cFlkc4NvOUUNZTiamDA)Sc!H4y0^Y@o9lZg(scVUi$C8^+;GwAY_Hte#{tP7-$3Y z&NS#;zU2gZ%tq+?v`7WBDPtktgUGz00IiVA6`CYn@iSWkP5}GK2L`pzp%}gk!5Ih6 zpXhCw228LL2p#h&n-R=&go$%T{_zbMn0X`Ldn?>F2IJ8eT8+CFR=Y`=qF?M1v&F_f znGFXF$%;WN>TbF&+EP3ENL#KxqxzILFpp7y!+|FRlZqMBcLzi#m@V09=OtZ)9ME@i7~KL+INj zp|@~Rp{}t5MK>S|L_8G`z7-=4PP`0S9dwEoYaw{eVqAjI$z<^49Ki1(oVuI`9KY>8 zKyL;jo4faWFU-Ug)`W6!RE_DzLs80uGHsUIP z5^TJ5o($mHehS)3#JfZU=p|&sp{RlQHLzjVPR?-=9QtE4m^&Yg+O}Yat^~>!U>5GA z0PA=fKR|LdQnH{^yk{){m&jo?ya2Wx6Xu%a10!wyjc2=*$&VR^Jswiq6VJ926RU`t$#_m(0Nm2UbhL51bw>o z6>`LWdQx>v(-+p80K+ZoIet1VmjZQy%C!K;vNfWPP`BqeYZ4Fc(6C0?UwdwoE(^Ba zMY6xcTn@D`Vsw1I?q+Dox+dyTFy6Sp@ujM7i-%0e`eg)qEE(^MGDZ!s!&P94IXP%F( zDJVtcTemz|+^e_rz&!GxMKmf6M0u05V!RhkiLX5h5Dpl+k+r^J%$@eH2t9(qeqD4a z_x;~tX0y3k4M3*ji`6g+J(^iKFMhmG2yY1c%z*dckC!DKe{7Y8Qk;!q3|D;8Vcrw( zQF`i`H_QN=y#&XYzNnyN7z2p6-&;D&i;Hmn#Qy#3&Mzf&f1XB0Z)&phCZ+H#I64`m)~A zW6B2j&eDO^8!{Qdtls1WTf7w$^8l*9_QmqUD{K^=pLjFKxx=p=-~@1Zbxm$%Tqr&9 z_yo~A;GbTy{~Kjr85Bp%7KDfK<;10ok zmiOBqyR}vOZS9Zld+(`pPjz?QI(@tAd7iUr7YA!F@)mlO4GQ>_*+zM9ve^?9Tj2A2 zvjw~mZQjH-zLMy6nAR4pA$nxOYa_U7m2v#wF06f_J4sIU2ip!i=+FWF4CC2+@hwBm z(B4%uf?yGiw{e@DqObnlt@LErZ3z5r6!(4?WH`?(k0%q1HpD=M?&}tr z=uLEzYhhqG?oV=;kHGgi=0TE1&2yo|QPgzz0ce<-$Fu3JKlyo-$5HqTA`dxEipDYIa-UAw%^(9E^!LS^FtTo;$y4s`Yr?7aptsdCS-ryo=eKLHms5%#=+SoG8zfaS|^?WKLe zcv1LvW50QNja!Pi!f3K`Y$>Wk!#G?6hi9*TbmN&aiVS?{P;* zcs^DKR#ss?^DMgLZZeE6oPXTk-k%7fC-YTz1ndyMZHT&y~HjMCSlUuu2o*$aY!3a#haN%VX>%DWRmsw zdC{-qaib)A<{6vnu8N`;C=K@T4t-h**sJJ7F^FjI9q{BPqH-8{k=B^WnR0s!$ajJH zT;H{Xo7=^QJ&e!JD3~Tl&XS!UDXlx>oW1@3#j3mke%k1E0h=(b;nW#j0Idt3P_;IH z`p86H^B6K|NHz%ZmHnhmhV_Lj6T1)~^hB6&8BX9cJbNqHz4612g`8=EMxT5)F>l`k zX~abaUFPBNqTDdj*ZcOGkbWbO_qj}ZLUcN%*WWTBeF3t2U0nelIb4c9!b_2!m}qJ+ zyE(xTe1G`@(0*|09w7&XZ6coBqQ;9((5^Dv!!`JcdD;iXzD&_cuHef#3nyPn3|42n zMNydhr}`%=r#_pXy1a*?JM7S*0|i}(v}V4yUfPlV*{l4*Ot>{wGE2W`V)yV07jC8i zNu0U=4eU#y`k(?>ahOyS&Np{kH)ZG)8;N;gR()90nSY%~8_u1nbCCyO6=dafv-?)` zsR^r3Jlf@!`hJ^u4CqxOU8p}6&&*lnmT?eBS1`m-Tfl^){*DQ|#_{6`%JU|0do*H4 z;_nwrpjRjQB8PrOB>M3Q0pU;$Uu^#Nt%inl~8`Nkvp4|qwqW@Jv|ib+PsnF zbz-DQ)kOhz;AM8j$PkUMIgf0>;M&Iu4AWpfopbs6rBgHAavSLtl(n38j!kfx;j*KT zwe3^9J3SvK`Bc_JbxyLsc&&V;ey zrCQgZyb#Y3)5;d}bnHcpHp4r=J7@z$b6WeItIU(o<8i)KyUlgyWYo_&5NNii1mLTPtZbMX1)QC-%1g7p@kX#z0&&KRMZ4keF z;kl@1><5|(SB*`bJ0IM|9B5ikPn^JApW6eMwfGE@k;uk)+B?>t0g0j_<15amDj7Y^ zC?ZE_recnXl&XZ4=~9mns8$iI)S{}acYNzY0^E8HVuW`MoD1YWsQpV!ZOhMgY~f;Z zpdXYYL4VC4sbi|{#*`2SZcDf*L|j;lqQpnCK=&nObHt((g57xX???+6)}*_ATEwW45YjTK+18X_bI z&kuj}*4^f3Z^AwN0*O+iFZn@X^?x^XCi^cg3Nf|^XPNW`)NV0}2 z6Dd*$O%2S|A~;1^=cEz=hw-lohd`S)ZEJ7X<${CxO@Uy(A} zB25x~{*7s^KGjUEuSN!G!nRO-U|TCEZ#43wp-#A4l>aEw1Pccvjl6&N?($8a>whVv z{hx{;|IcONP??3~Ni;Wi2Wp_I1B_f!45e&oEnyFK#K*<;hG+Lu)g~^6zI#tDYpSc2 zf&=!8MpG$nTVFHIXU-pDlFr3BpKZO(-pTXg?jt7qUfF6Tazkd z|KOLIBs0w|>!Vh#Nmg4H?&f-YVpsKx#{cm(?EAT&dWGHEje%Bfp7rcf_a@!F{2r_J zb+7d^6btSoU5OXCda@(1L zQOBlpMN1Dz^PAgNt}&nYR2;ZzJEPSc&{Bw*TC|+$ht3>nR322)kECAe$I1n#%%0Q~ zUE=E_)G5(K(R-~vqCLf)#=ieEmbtb;e+g)G)pL>W>jeE{D0pv8cU%9(zkOz357a$*tWrw(ys4Bhvr+TKA-VTvoUn@IFXv{Kx@?6P1zd(pll4+J zd_AL-W4MxJkZuSDl7XUG>t2>>Eq3vOm3j}39V0ffYucaVyy|w zx;}e?sAU(Spn%wPg%G-8@&TcAM92I%M`gPSI>QW=1zWvk6MoN z*r=H+QkC;b!-4d)vOmLt zHol*8NGza{{S)L-Am}%9q3^crC@`i>RO2#Qm4m4)!_p$q_a7Mu$r&hLzfDxD10!wb z`2HHSzoP}14i#xuhc@IhCx~Gy=r>M5%$fDGn^Owe+n?pyszF1Q3t~nI%qeYuSCDpj zYSjvS=zeq8tCcf)gxd&v7bHF(kwwqLI6jY7w>1qrA;)|wDKThi>UpRe6W?7OE$5Dr zPg!qJUqx&rDN>V67)g>y+_5;c%arxvl|5h7H!s(IglOC~lv_gJ^xml4in@fTigLWe!p^kT_SQ-& ziw3gHojM?=sP<4j@5-OpCui*?PYKa|JtqcmaQ^bWrMH*p%8!Al-0c(EqeJhv7!dgC zGQ#h&L@l<2M&txPptTj30l~12t07s*&!q}sqen1jnZ)|AS&^Xw%mnA50X5=ft#!`) zv_Z8`9;C$xon45*RDZHD*KS@g_w*!htg*z7jEj@fV-JVX^$sHCly-lGs#B8gTm3zb zHlZv&=5k2-!WUeK$&_8XKrFpx&FuYD@!R?UeLT1+o;lTPnOxVeZ6`RRJ#RaNN_A}TIiA`$ zWJ+FXPbBwCEJQv#|AM40e9oW3p#3+U8eP_-UafDMg}OxBJEYLMHKKr)6aN9ztuku1 z>(We>bm;PfDw<_pY_|W?pw!e))LRTB3i#6-E2$N(*L=)#3FdPfpL zUtAHf+}^&q{J9rGax2k8E)aw{@M*9-U9kjMH(2}b6jkpjZ+@74*#RC8YR8luO)TVZ z9-rykCm&;z!4J}_h)Uwag=LP@bBM~!(b-h9+-l6{@j61OTb53EN6q=QSm-TU-sEiZL zh%Cd%APn7k8i{1=9A-TmaeKntO|V}DPTN%TBxfFVh~9-V$hn=(+5m>v3Kw*eT6L@a z+S*E16>oHo8ugajB%5JxO@#|g<<3CK_Da}Z{P$B>!^1n->Ahg4e_Ol$KcBYyMqU`_ zD^DBjaX?`9n&s0AfhW47Ho_U$E2GDGo2BQ-uVC#jo9kYfjv(7tizImqdYh}6Q3dnTt`~WbRr#3W z)#wV=9e0XFZ9{h95>xi@G;xZ8X*dt-8HZNJz;rs(80e5VCC2Dbu&MV05?>0Q>|kxL zF3BC(R%HF?56c$2!Tf6K^79VBhD|j-hiCejLZ7j_neNYJ zW2i?HhPwNd7s#6`6ki&;-J}$OOs~@k!kd?Ysy0o+lh&sL7rz5F{Z!P2uX%J2rcHQQ zw7{LZ;M598xdxO=_vbV^io?qHeH_{KMvWB^%9`SP2@T6C$a7*sm@EBD7hZ<8xyG6U zO16@?P89>gD;t>!6ubO_9)YHUHJ}V;JzvZT!ZFl z3sLZ2e9EoU(mU(GIe__vlRVL~S3aD+>xq353$Ha&XYa8`1p#!J&a3^&l;31jK$h={C2GQvK!dHa#t=DgrCdpw-JezTm zF+ih~i_$c?|@yM<3EZiz{o=2!FbP3JtB?hpN~?iun=G%4|iVrjoW zW`lA+6Pve_~qrUs2NLUUtt^R|*$hhzq0Ki_h7B*TEGWriVdx16N- z1z*VpVI`13)YH6L#}OAxzn_iGkjNs;_gD?im+j0(6Jn-l!dm&DV0rNrH`PLgNdRw5 zb0QO*B_$-d70@lNUxNJFsfitVq4JRYUeyaWa^?e9bottTw*TR+;aNRLklTH6D6{sh z?}w$VXge^R2Mmyu@g(1M7SsGlzB^a_z<3^D_{QF*x(6zGENOYc!ph8OP{`8^&;pgK+2!l3J()_Ey7?W4}vth=$Qk&?%h zU@1dj!)+QTt_L{5PX75HAk?rXK0 z@qTMw%1M`R0XV=6O2(*hc3M^Kar!S@brvCcBLbuBcOai&_#X}6uwrt_Iiug~oix={ zr+^>UEvbF0|M#9dziGu6DhD>ZSw)9Gb)LSVV33Yy3K*p883W$e@yr45>)s=xuqajZ zFYlf^QGc*_*E@G1#>$j;a;{E|h3Y30XL+C*Bqo~At{f4nsunKR^8<_OOTwF(K<&*e zgM@`@MJ>f?mh^S1M*MA{{WjQn8^rx*k_Zxj$yPl`tcRPr!rZtOYu@xb++JT6tl@Fy z!*Dx>2y;Xh3Y;r$X~iM1$4BE^m6rn=j)PUX`VW<0FLhb-qp#*zz!rfG_eht2q84ns zc%8!~>M^OK!ATm=6P~+bNxne|G{Y>uWKxeMC8>`%84SWsj{faljTl;`t#l!Lo*KuE z4K)!B8XmA;9R#k&*9^&jwXH$ncL#xJ?d(dc1qj>+H?!z#WMsj2(x;XB88AnoZ{DHF zenp4YQOwq_Ly!4^e^{%1&dYgh@LX8{E=(u0?Y;q-A^I9n-FfSU!@@39o+$TIYYdp3 z=Kg|`$VHHfsID=b4C^nuBvHRrCC+SaD<`5B`ABmp zax^QhZSA%_DO=RF($=D6*ISDED2Xm|QFNx`+=%WvaTx8|*1C8S=KC`j2A|r3#u-r< zJi>U+XipHtnABx~-lR23YTKA5^e18LEZh_;xV#OuK&~D^Q*&B=UHKA`=}%8%>5%P{ zTI3yqV*O6&=3&YzhG0(uQ4mPSS=6zZn&+d3b{o($<*n0cJcQa^4_GIAF6w&<-q&&# zz0i}jNAw?g^KJ#SkbCC5IZZUb1%ZDH(l+^K#@E(3-fZ@2w1ApWyVg2}V{z9ymSS<& z*GMAK);p$SZ4t|KpL0$Ma_?r!c~C&w3|Hy8@tzHCTI5}+*3Fpt^PH;6YUD&MgL1V( z!c*wcq5+zAA zyf4n|KexR8{GiC6xbTGtAh6#*waWq?BPGgI3y<86iODpUr7h2%EjA9H&0dw==7k-r z?GXmg58&i78J*i5P4TkbyJ<1Efl{m;m#7>(qh^VOs&3VIeamcWrBP>2ll6JTV@=nZyN=A+zLj^C(g~l<@6WP9}&NuduEe46-{TL zWg*)YR%NLbT~718v1I+GA+)jNBd+Oh{9%XtKZ7VTBcd}9qeD0h;~uw1EoHvd<6rVE zh<><*`hI^l;#tOhd5v3)F@y`-t^-3ZzVT(N4!ndYs`Ciz8B3)`1MGu)in-268OuUC zN7N7ISAtE)bR8ru!<6%cE4P|zuQ_8vdgkI2v#ntfou9)OXJl(5HBmI_kjT{UI;lpu{xbu%m6l>}S1c^H3D?;-Tq-w6(j2g<~M?K|b{IcrhVGZG4 z75}UfYqHBK8!Q#%XQeay;DmF9O9OFl1-PsQS(V%8@Shx=$xua?zms+6LsTfK;BcMP zjD9X^@%2U&*pM@a#>oGEuZ}p;sHV02&D@lZW?;PWb4+Y(X0a=AwcKZQntMPIgc~WN zrJ^Wnr};Bc-gzQl#&=D{FjTvZP}4BQg;ee|gdyP_mXV{*dOdpnIV--vGQ~`RldkK$ zef)_cHJOg8t**TEfX+FY0L{hHHh7rZi|n5tW}Iwyl;;cDwrw-%52@n#eb zwmFTCj}>F3V*ETSKli!ss8lkaRKQ~|GfgaMWa&VUWh08YX1j6QDmGNwt!J$|3?A-% z_np^`Oj#Ol?z=vd6bpR0++dDECoLn101C1pv8(tTJ&XRMy+#hD>kZ-@k+NqV@pN00 zeA=AX_!**NMpAp1(%QncDmfar=q(= ze6dRbc8M6i)YyS&1J)v88-h|nvZh(qx+S#?wv18y2{2iqOT1Q5mz?;J8HMD&fOZs3 z!IH?&!DKMO5e*iGgmp%g-j~1+Y3i)(MhvD+F+1slX4Bf%Rm4Z1#Y`r@%OKNVW8;fs z2YXz_2L3M}gV$*|lIAg<5FZ4;1i89GdwsLc>S4C|jl$^9vnI6umy6HQR$1 zDx`KxYnyNubW@LKC|2qaKc@*}9g_{>e&QmGm`-I{PdS3@G}_1ZO-XX%7nDXBogE~t zn;9}sXP%wTQPfsG{1!Qt;BTEbGWbMEPZ0cRa(%UL&20}MrTFUM`s0uw9 z*{%^-S)Ey1%tZq1!mnq{^1Jnzve~elkO2+g`qF=%@JzEH^q8dx7e&lLIRADdT$pnlus()je9>h{=1vK*K;0B9-@~OM{oDMPL zpTjSTB}m*I{Sw|SM{Xmw`MlG|$B9Ka>5aXlM;aKjj#d0+btdBZcHC~~iI|;Q^F%+A zRcne&{zf^j@3G+bGQVjJA1RA9T6Hm}><}fEY_Up4{Bj1pmqk*=w<@kQ1*_qCAy>rE z4LlN73pbS$vf~=_0iG+Dx-LGyP~9etW6{frim% zdcq0O`4$R(C%Pllk17&^75%jxUVRz!%yKw|qbI9N1SfxeMQm)&Gq^f42b#pkWIiLk zt5S54<@iDMgE$HBcrHPiGx&uqzJ}Q$8GG}PlN*PLc-8)EN!jgxH^Wk zki$8`S$hfHxpfi)w&R~QI+s25pm7~um$Qlos8z5Z;qT^x$ArTiODq!xp~`@j22T@4 zf_Dq_q#qq%&Df8S8GZ}v28&^na5)?zC3?y?-N5kmk5P2#YJGeCRc>}8#yoCvgn|l( zcrBpa6$c|gcHdT0si?W?&gvFDrIzwl#t;a zqT(V|>*zd$c#>?QZ2>Axw@NL=F!gO>sDOzy<%0Bv$FECVqFCLHxvAxj2-%_ECQe-3 zjZ((gY5iZCdeppyoE>%S?2uh7GF=j-RAXfh26x6RDL`5ae-&hD5|oH(zIT5Oirk`! z5B=wIczV&DHJpcOw#8H@y1KbqhhKajrw+LS>#FB zoJgm_LkVLdeN7(j^z6g{6eAOjLC+u*$0`#o8K?HyY;ygBdsDof)9{4dzu(=ufj2J# z&Phg5dNEiQhGOcf-gpQK8ebP8?ITMX@s7Dqxt3MJeJL`iR?5uvsMW?l52L6e7K^Pn zFyl?MrE?ZM+$60V<$YX7PEc)CFV`%C_I5qZ=`8Sc zC{%>na!fYr>+I|p+Xt|n3O{>r5&hjo7TQy@KcFHDB+}9xmFV7TP5+L7(}7hv za*9a2>EuX9ciCFf8F5&6bm>xz3>77@Y(lT~zz0$K}& zw()u`DYWInPe}lkg6MtbIuxSYJNVtZGU&{ohdx`YW=zn0b{2C6)ZrJE#NJlIH{!@} zC#ef_5y(^E+wi^9Lrqtr&OmhM`R5wwjNe?(Ked3~7avj(9IR~ag^{6lC=jomK5pN` zENy3J$ypkx=B+CuE>tKtS|}5aWN=+`IuyT_w1pIrujjuQlvUu1UZ}2VS-C(-vEv!bTthAi>NKD#N@Y0N$&au7{Sep8>IG)iY>`=#pA7csnMW6_z&-bg4-#V7a+CM@P>fnMx~g1g#S zf2>JUXj_nmhZh(2YB9=+=u+!PN*U>J7@Ji-ElPZf%kHyH_L>bUELwM#PU%kh8qX|c zk4>wIdZL7Stt6}*FUI%f3A8k++Ch&0+v-GSKQa@MpZ`~u0kbpf{t^j$L0S0pE)Mv6 zD6^MmK{Y!Zs8rA^#C&M2*I{5vZ)ax3gq>rsz!jUUT_@$VCB3`&DQqQa;OA85U1js{4wM&(zyD$yo8SWaX2x2eUCRG;Ug})q)2+8FM;=0 zrcV?NaCKQjt>Su6t$AM}}N>B?sSnXY(M1hmCUjCxEFFCu!V`2>W# zNPLVIXfe#!#!OlXf+j>2q(hlLVhV%=bo$}NaYx=yO;a(U#0lAVz+O%E?D3?n0)4B3 zRnpSjghRaX--YFR$w;!A*jg)188MQX!Dl$P+}7EePLySC73BMQ{Z4==Efr0ZKI%GN zmrr;}ixqiWCwW_0d0VS_TY~9XrUl_`_aAA!wZU?l1i$4`PA_(jcr%N|taj+WZBD-& zp}pHuJ+qp;Tr8b3D?{P8wLAFoSykbwey*U1KLQaatU6V_W+6 z`f^SxG*Mu!EP4{{t>}YiVD)FSvyYqX?GJKH(k`Y3zIj?>EOuB{2{l(rHVPE@;dZgp z^q+j0N;M3Jhpjlg51tKLvVJ9n+kW9`DsTPJz$j-HYEO6XPh{6nJD=v#LTW1Ng?{?0 z#ATR`0sG>HHtEnn)+f-tqeE=v^zh~ap)o$Vd1v&AcwW}AqpyEGimTkxSNa@BZtsk_ zFdygX4zc>itacjwVFU5ksUdl?%F1u@_tnhA^svZSw4u#mw#S*p;l`T;d=nVC^f!4E zt4*yJOBa@fa1${X`7@2Xi?}W|15SsHM&gzhV0^BS%W>9Ni>m`^Ca-DzDjuvEF3l1R zVoX$>oIpr50*(%-)!$pqeP&)N_Z5%sBWW4Up#bZOqxkyidAS1k%fgS z;orqGrG)~a`!V>;aV9kg4XU_sJ(Iag{%T$QJasjN7wd6@er;n5I8$b}(UwS-2c%f_ zyjFDfZB7dFnE~q2>8Y25<=j6fX7}u1_LwcOw%DfWvB^~t(`ce53YCc$_Ss};RQh?- zeKj{r{Bi&sSIO%L!Yg`9fIv*yPsv<#Jg5nu+D=_Y6;v(HIKJag#Bj zUMUI{m6rTNANEJ_DCwhJzwEIY z(Cesw+85&Rt9a+~RaLZO|AIZ1w#p(WN>d&6O0JEeSN*^PI1I+O+yf19+Oav2T(O&w zark|MKtV+vBwHt~TsJ5BFZxn;$c7-&0Qnhv&e&jw;%(9@7akJ)j<980BmX$wLAjh0 z(jmFp1Ll1;H5A%|@)ZcS@3or&D-cNoh_=PdxD>!D3?KzWv0Wpv1Sil#X^1C~&gl!#cUbqQUg06B1>+vzX4BU*j90>b z$J`69lB=?d?3!%^$nn2d7O28wNYXg*rv)U5nr|j1sna7a4+WSucMtc<Z z5C%L@fJh`Al)l7|f0Y-*-2EBkHsrm;?w@9xFRU!DsG;!}(SDFm%fPQ~q}7-Td)g(c zw5y?P(YOZRbHi|i(O+A{(u5(k8uv(1FP_H3TrcAZ=(gAjn{HJX;w1rKR=3)B#xSoTT?evkbfQuV;IFtZ@8|7FF6BI|86 z7@v=KAM?DgMFi?W7mEZk%6))b*N)*qcL~lVpj55`+V^BqY4p&6UpwPss4s z;YcQMi@X*o1#zp1Lh92}TSH=hFn6*Yi^6EZsX;I*y-zQOI63G~odCVa1rX$XW=nni zr1;ztW#!Q33&h7-3*7|$r0LuJr&&Y#tiV@&NUA7|)L18s19E*@#sN-DYefNTnlPaw zPW%{GMC|;Wor^1sUdmViRJzsn>Fd zeeXyZWM*nX6Vln+Vs39yXZY=2Vifuj8l0pFRty@;1UtZaAT}ErDBuWZI#*wSl2Sup zh%YQ0D+7AZO84)4Z0n&~IWTg?hLgpz#? z^IS+kIAAW#GxkBJ)IH{6vHU%M8yVwjPz!5_^hVZ&|NWe{h2KRVXAe#OSxRdB z$Q72IqY|Y@>HBHj0dqZc8y(s3bE^=28^Q~a_L-|Ma>*b595cN7t086%vfpqyl?5jL zd#Ebw`acN#qFu{H+unMq3HNLRi>iX29Wc* z}KsnfMu|rrw*B-%&JzB^Rw~Ge{M6zJ_D(swS7c!ipmwRjo z=KZZ981{4ZGULMJ;33eF)c;8lN<;M0fPMw_tj6m|5+-8w#qy(3zkh$gq3B7mq;YTe z2w;Vx90;I6uCe*0q4>s`r;rIFrVShe_!kyTG?59L5cIA)e|o)OcYj8?RPF%GqT|F^ zFf8I09ofT3ZXeMWpC6a0 z1wT9*QpwrO%vtzF-O)fndD}vewMp0lq&R;Jh;-in)C%$W_xSzZy!U5iiWkz$X7a`R z3moWvUe6RHItdiwP`XE!Lg61Sj7k5@9g|Cc(j#c_)t9W_t?&Z3<{>tuxC9RU^C%x{N5X0DE7g!_C0(X9?~1gS_27)o-F{5?P!e!@$7w;V*lsfHB6AZkqjb(s^puwo+44s;v(g!x%W&ZqVWT$GAR?Rik zT>Y`_5@PkD$FLgBy?_XWTd~FJAUh?3G(%S_90}~sa1NM{d0 z08N&7XKb2VjsMG(EdsZf@;zSLI%bg%Yc9$RR|9EWTZD@cWM$Gp>RxX)o#~nQgj3P; zSqBDM1;J33n=nI3T8|o3)Xt1OKb_~Emvtky(Y_5c~K1`kUPQrR#1dr6NHfS zU*qr)1L986#jp;47GI*vfsGKuu#FCSJ%oTKv9yl3>&7=SfhH#_!U2daWJ1yqJLHXW zR1Y?U{A+~77L09&bcTDK;J!u(kFO~WYXWiB;X6b<*{<6ZJrRz8G`@iTS9~as(S9m; zqTeR>fxc4-_Xjna_m-o5 z{!pZ!)hysxreZ^JtS6&0UkHLyK*a_7wSed!xHheOD#y%=ulEGTkC8|~@dXjc{;v&= z5D@vN34CGvXMO0*)Oa*R@onW`o`KI_MDCq;PBlZyp;u2KrZq#r5Y4Ft4M}PHZY@Db z!$3OSGs6joWZL|JIRrm{oF58KtKJ3!2eckTav@oJ;KSD?ZAhm?wgXCR*!Tu^kxhYa z2%II%0P06DVhZ74T?d7L@?P2@?ic>hV`bQ{i{!N9(&*7gFXqS&VZ8O=M+9)SNan8m=tfZG2MEf6$7%>8 zl(s%3An;K(1X$>^1}QK~+zxT*SyaRphTk`!@)bBT1Z4dX=0Orrf{{XtC(o`TEP$iVv}|e3sLxD`EGJRV=peFjSZ02ERbM?uK`J{LPb{C zuOGIL@C@F)6hJ5s8NWlq22(?_YbNZW=XrUIA?H7G7El7vGB>E-NDnu^F3?%~X~6|) zt@|P9`L9F}Ro0YX2rZ@ia6kKo?1V;$VTfNp;(5=iJib54BMVlM-LbwlZeN4RiuR(nN*vnq=i~SSN>xtX)o+KEr zSf<2$F%SDC=lD62URw7eive${68F!Rfy4oyUMlNmH7DMxGL$b|wuSo+nt6xpr3{qa zr0{b92KKF~vl|avNP-_M(buoE{m*&mZKw)nuCA|r|9Y>#0WocAGy^tSgiUy{GgRiwoZ3@?!{OE4yo2n7!9`9w zol#c8?Py3W*big4o>tGcimB}0dpyc!SM>LR#xLoLBZry8RWR{(Z3wq)`((hRLpb*} zpU}(ZQ*8>uip3Jdc-u1{zJqwjDXJ!F`@r}#o1N4LQ&*aMM1fet0Veiv7-f9Jje6|i z65<#A2&lhqHP`Y{m+IBj7FIDzp$=0ak z*2jLoano}>^V`p+y>;pw6_&RS`>&eB2|nnsV8FX~uBQJToSX5#LHXO8yLvb{+ZejJ zTG?8;TA91NLH?6l?R&oB{7=Zg2$S21hMU!I8Im&lWQ=}ZVN^Dpn({Wke_ZmAU9H17 z@~!QC$9Dnjuwi6_X^F*A%apm*S1G@*(eUr_{wxg-LR`)MJeNr5K5fps*-iT%IkbSD1=rrzVl7n3)Ib##gbe5Ka#s>KEA)^< z9TTPZe9m4YHQ*c$Q?*S4L;LiVHhOFkwC`f{09lLr>miVK^Qy6H{y#+_O=^P~ba7%=?SxmM%osgxBXGJ= z_eSkH)zj5?Y(e@+pQD+_Ns;?Ew~N_BA3uhMlfvVPPGChU&otxKTe8#<@J5V=$+2HW z%fB67A))kcoD%`LDpd2d4L(F0(g5xp&o7v@;*PnC(|=?ZoB&N!{IYZ;!!_V74mgiB zMxM_WJ?lqQ5VtK77PN z#K1`ASFoTNN*Wqv$2h-?|58@@_)zv%K@_j#Lj7dMUuR`y*;=<`;;{s| zL)ispQ|)G{D&Rd|soq&v>p$mPrvVJgUno?l%$d zWBxKKppyldvZbb42{16OlL@akScbXV-v7*(9F)jJMm>ea?J8^!=%2L}NKUh>FWoTT zji7i$F||&?dn@if1Jlj|BC|G3ZBg)XUv$lc6zbfcbxMT?dr$Vn6hfq%c zgKNw$#jX7)xx6uKrz7s=UN32nGWTNHd8N0z3LOlcUCFHd3H{l zHxJo%Z#6ToMI)QKQAANEOSIoVCfwgq9}OpRQTfU4%j%Bn!r2sHuCR!KfDTT-qFT3Qc5pzyIYF;dD%2wZga% z<|KY%-A`2F6TEu@FEMI^-q|hKpXqCtd~DDn%%r&uC`~;!&?ED=As_K0a^ApeabOg% zM(+fiuE)DOul;8}2{aRj@?MUiyUkjFRP|N*Vc*X;E84>By=%0k#-PJnI{Cv{Oa%$0=Gm^ysuOm~18{aQSt=Cv)W+9f@jgr53D_JkFoPyZwT-CH(!BIu#;R|{n?5nF+DMMxfRHAKBZq3(M z;QGD=gq5B? zT7B2gFU-lER;U#O5`_J_Mn+_8Wd>uNi%Pq}%|A(n4PJ*alLr_F*Inm^$g1|(PxSX- zAMAiQ`m7LlwDJ%)t z$+oG$*E6O3?v*)wjnnOLR?pydt=Z!{Yn|Q=k_b0{4z*vAh78 zDN#3Oq(qY!T&?9WS&Yhgpd*l>kOvF7ub}pz;WST7ZYJYpYKY!}VrPGxACJf9#pG9x zSVitYUc;S2o-o^<7EjdQu@$mQ$wZy9iCmMSoS(p@eUfY1_Pmdy1cK$=J|cqx1TjWZ zLuP+?WNd2^+fhn_ooK!6^Ydnnm}&{(6bd0z>s0dL+$4LMq+etnl00(*Y!GhLv;K4w?kSTU31gaJ zIpX-mk1iU!g6d{vU&6Xm*^ai@*?ngizEd^ICc88ajTYs9PJNF)I!h0z(=&t^s++8b z0h_lHD|dYX1!Cjb_ldG}Phw-08V*%i&!>3Y79hv@*`OFs1-c3eUYg&UC%s%7$!?kT zq?9a5#LfHJvrN8{NXa%d(e9s=pbFH3b{2jDK0*f+eQw7DN3uT!qK&7;|F(`uj}dGf zKRD<`=tr=Rln-)JhcJ#E?!oGQr*p_4+7xz-W$>v=yF2xb>QTs%%Y+YNLqtPbXL)|7 z*E{EmU8!jOW7iuacx^MYVt$cl-Oo@Co7-qvB0L>?SZYF>7-@3*^L1q&N{a)v*zy%m zVy{)gOqOF(5ktj}#D&fc;}m8xj-D60X{C#5{k*lMa8F`1QAdmZHj}PXK<8Py6niX+ zM!2Ab=bdfuKRxQKR8yUn$PWv4x;5xVW#aamJC$-3iSPkFwe0=!bMqq}jtv)ltl^b5?~`a4C9^;Yl4QTO&1Th~%gx5>3>uY551fPKDm7nla=ZCz^p zCI`4db+y@hl5wR(EO`i2aUn%Kc*r{fiBM0Z8Z@9s!=+ymFZq%;<&8Ym z?CiDp1fm=Vb$hr}~bYzwhlz73;6BRqQ^?XCmUcaO&zDa8bgD;D_$COExP{c{t zT@uU4O2V`B%&GoI6{S3I7b_ZL;F%+;W^Sa%K9*&4DT7}(dO|8xYH4XIEQ@kAkt&e1A%H5s5pRV~GHatD8B*w1 z-{e)n@&YYU9BIU7Wq({tK5R_FqyOu7%WV2Q$cIA9>{_veX`t0|W#nQ?NKOV;IJe>CCLlf-Bxzv;aul)! zIfXs)e6)nQA8O3*7so>_7I?tS1m@47i%u&Z4aX%zIh`eIF%r|LTOA(2JN;IxBHyUj z_hB@FS1r&NwlS%0TE^0rUyHY@vV+365^h`c&EM`_E#|YTqi-#J`1L<&ZLL@{Mpvi| z%g;nB@G+;dsIWIe2T0k(v0f(qgb8NK7BwyX`h|hNoOuw%n?uH1?5NI4b6ple{xxSszVnlYHUC+Y82wO+#Em7=X!yB{NS7O8R|<^zuWgEIPh1>GFl zu5Ok6 zx2xUDtb0Fyx8m;WsY+?Z{Z~AilE+;iPoS`eswZ=IFppE}OQr5FA;+|KUFPK+IWeRJ zby!UV;u-Fv67D?99s2IyZi@$Fbn4y}x5Qr4pz6)DS!uhqJa za=w~vS0|M7R?)+qdTvCcIB7)#D94u~nujqO;qowI!+iaT!+hhIR|VmIz3<>SvOT2p|0J{jD0#P-}FJ206 zx)%3p8rrA!dYb0<@`p5(LZyyk7IFsdJ@8;as3dr!18ux|mGLkMLE6-CtOgAt%Prk2P`UTNuL^JdHFw-o!Snk1w{ zm{;u)H6{o*)g4bx+Cv>xyYJDCH_5K!^MWeLtE%FDw8#zG#sv&GP>@sGIE1q0L{rh{ zpjZMb-$M{;gT#f9D0<(K#K9C{_Pw&iO#4_lL)@qyFJBm$)Hpfv6vP5`o#PBKVfIx~ z$8$oK`>ZUV3H665bu=$uA{hKRxzom|a|_725Dht!fM==iO*E9r5SK(gQ+%!OQ&O<5 z>plfB&{8qt&xZF5ih}9F)Us>_vpMt;CZHlkkI|hl1xmP|`YL#e&%u38Hk#uWAx9zQ za*{Yy?;eHjiD_GI?#Lz2oFzv*1H^eW#e!EjG4-97cb%Ds+?jlDFxO^^VfM&YJO`B6 zVnK7lSeLYv7!57S!w<#AiUMHr=TXJoct55nNVRC6At{dvgnU;Xf7h&1B}Hk*dz3d^ zcw?vGveHSEG+qgwbFf%58(w~=sCKF%m8Dp9?$MPAyO7%{Xcp5n!4R`*KOVft#V4!=1<*rlJ7Z3znkF7nQR68VCAX^j+TLl> zGmKQ_g@cP191rZPwo3^5KX6bbJXI0zGR9&7N3BcOz$T`m56dpVJW$6XHlZw}AX_kP zKFAQnry-&qTH+YLkbINfv#+CPLwm&&=cdXofv-P!WUm*LjAsQKK`xca~TvvBqP zehHJ5<~OaN5GcS}+|Dz<^Mfr_OWQIRqslnU0Jy z$1c7lqpWQHCQl}wv3F^iX(zj>=E>P?32nFU3Gxa|T7glV@9h$|h3b}uo@xIB{{*iw z%qTR0U5r?a?z!W#vbYhEUa0F)7;WcIP?~$3rcOm$=;?*!Q3T&{YL`;jGPuyP465St z)`BaMdmF2$;&`PWptY<>+JfI1De-TU?E78ST%4I&dSy&`@57{Ucf_8A{s6_$;cB?h zEO}DmTF;xsWr<%Ne{yrewQkVA1icQr_CzNj>k9HxANSlv=(LU53v)xwdDBR@8ED|dbH>Z`Q z+s~)g%B?bXk+QLHVy8TB5UUvA@>KLwMLexv_;S+C$IbCxt*U zk~S{5)B_S~kEUl?wos$`h`|?L2Ic*?LEO+!(s_mj8F&Na>;q2;aVZ#`j_j6=1mt#P z9i)KA1I~)nT_2ALOa2^&zSo;{PEX2vVZEu&n9Y((%ZpjQqhqYX5=}S$IcJxeA&To3 z_gU!O(ZtJcppgUev90D|YOA7JTyH-zuR~MT1rTAd1Z*T=0m0S)*fLwmY&*2hU|-5Kaym>e<1(vGGX)#a;D~e!kCRLRxW4If zW}9j8e+Ia4@qhIjR?=2@tR|~|o}isElxi4di)$UBcer?4LSdh2m&4XY>!BHD*@}j` zeC@PkM{CrgF0}0b$q&YY-mO;6nYGBO*M+$V6fKg}O&(YxS<)dr_BW+(Shi&k8E829 z9MCuI?_6q*Saa$*=ZNp&v#oR;%Kt8Yqo&;Fk0e%B&+jY9SX$D!mM=)bAXTo)7CS2! z5hGMWC)DLXx@>oLo=YULq5Denvv^6u8ol8tAbgw~O0Nt9e07y-N+ndH^93&C zEq9z#*FvSnog!?2WZ%D|@Cr^Cd< zs<9Ft(*&=fRo7nK8XM~KDmBQAbza%Jx{VWNNgQPG)m!i>>Qq&>llib_JhEs7E*|wV)c9+$EhU8dkO?As z@kb$XC@)_viXrc<>+#W)lb?G$-pj-YEfi~)?@}Wcdpsw6?MUsGR2$`eaAWgnQpqv& z%uylE!CttVQdbVNs;N8fKCz;%6G&9MXFe5;TBBAN7#u8Zx3xqpJuBh>F>!joOa_NE zh);c#As$h2X5M2|?l8=rKg8FIp|Si(pxyGu~R?{4JwLryNV4 zlJqJ2oN(MiCUzI_t@K+1T~_>Mn&thseQBo?)4u{mnZ2|dx0qJY8mlXd9Oidjk%!A% zYCdqHsscEhSIYt!h=O_xHhQvp+N|IO-CsUV`9!UE|C9r%)r|49>qAFzUz7c4H=bri zD=T#i*hnVsXcy!=jTr0DRub$5gLtfMr!)g zXGwz%P&GWsg>pYoh~j7%cF9o7o(!02WC!aS$@>%pgc9>CuuN8sk2TWl<`Ohj!%Cfh zyQB%Ug%6#x&f8nf_99{H@(RHQE)`*csfTPVq+M9#!!K`WgLq>6iqB6}T0CnmU!jgf zOqlQ3%htJUt%IklELz4A9oO`02RT-jH8xksOD6s2-DLy1Ye!F0f@QNCN^b@!B}>YJ zWvC5v7LCsW;PKM`I7rtln9-2pJ27)G{guE+vI#Cvi@TJ(7tAk6bDaqFNS2Xi3bUwh z`3TK#xCkhEaEes;dW2W-%)j`*!&nXIxE88y8e&hBJcU=F8{LayArQhPWf;&3} z>;*pv385u9a!lus6}*E6W3pUM4(Tg|5^o2;(WR_NIlb;yAI~3nsoCqvZ>e;QEPfdL z^#mtjk1sxP_H>OFgKbFcT%vt-`{VK~ZDqU!8}s;t%k$he=9>gtnZ*|GJLXs0m1*Ow zNJujRsJO7fA5r;SalM~YyJS0;GF|?EWzIW;HOwteo>~8Z(TrMROI3EdUDZ`GxR%N? zKk$(6f{Oc&=UzWb+D{}SVs=Q{()kX~@x_B!N9}1=P;;N}#P-pSf(341$&}W1OD_t# z)M(;D2fyr4#;NPGqYC|;(4Qus2kMu?d`C`z4a%owLPkYsX%NYsUu4>_(M)wF3JXjq zLmc6|qv@a%a%15|h^F-MfBJGJQTY)nID>-DyXgOguFn8fozz&sSY)PkfpndpAZ7@C z9=|!NY@+)MM^d^!%{*-Q>W(k&7~j3Tk~`TVMsy&$G^IgPl`rYE+pkuz zVqKm>61IafcCa6VX0PNQr}Koo|5;`}{`29l4%Wk31?QwVx8-TIpHkyce}bMf6`IF} zH4MIA1h1vJ%?@u~q$)a|CdT4DeqO*-`tL_ zZThrFGKH2Sw&Zpyo~eh_(-IvEVk^1@=G+>xAD2ZvW>;L{uC$JnAD5i6xZALSZUbB;cIr|gLA zO!@=o*)>}FYlu23T=>t7#A&hN!6%yY8@=Q{kJEUEM2O?Dyd4)l4`Hy!D9yS}s#lVY zZu{5UDru$t&KZYU7G81oM_Y2Q6onOAcUinBdc;R2qjO24QTPJa6xOifbIAe#we-Xq ze8JA?#-Del0)rw}*ARnC_EWb8@}H7*h7?BK-RgX(GNc@fgV2h3DtUSHH|pAJy9lE4 z%X2}$=G)&!Ce9M_L?Q$amh!*7TM2jVsB@G(dyD`05FbvNHM~|POYG-bJX$-AK@4o1 zEb1;gYg{;6Yy<-m>(~ARB(4M;U)xxS@Qhf?QZ_E@b0kiC3S)}#vrdQ!uI8Q|QZnWZ zuTEn#hUe=h`OB}jW1Upso(kD(B|iU*?@G60@mB%j1uC|4LjpgPhnKEUo{k^!(x-9| z<+DMg)tq|zR&?m$ismg;N*|X^g+A!$K4868BJNn6z|z3Q0GbDgBdBi|cJOlWfnn zEeDyPxsKBhk1hEG;4msnWsbf_m4Nr|{(z8XNUuRELjN##)G6gIb79nNnQigaIn&e| z+pQj`l+#?s)+3&f_;D!(J?-{G{Dd7#3fc1d5<)VlcKF3SL~wI~Ft4u3B|n!jT@y=k zR?el--pjb9YWh;fVob-sSz`|`#kH{D0|@1{{z zrTp@_N9L-ub1|~_`X;|5B#PTVx6hl>A&D)(_B9p{pbI#jHy_{V=O>9vEBm>9onykl z2ov?{x+BM}&mKU#j6tCg68Ld9yb$Hh4mZ<1Q7|hIND2Mb-sga5fAq9O6n9AJg|j4h z5h;GiX}XY*b$#wqt~mYmZDuo;Ya8M2x$L)Csh>kTZE$lx3V9i69r688{wO7SUiL5R zUjuf4$ch2(l5Jy5Cst7<50tfdpZOF}g(j!dT|$Zcbj8mL?e)(3CIogNDYJYFDvmR8 zBy*dJcGGc#L~djmc&`|n^_m{w_*532%-gNtb~ zH}GWj5x*&Pz+)<~y8G>tQ$hDDBkCtKS}%Co-A1S1O*B^h2G)Ty1?pkgoLbAtG>7V0s2c;>63LzUpR(p*Wr)4Jn<^P9u!Nz6>> ziJRL7D6-q0uT0UKVx3sl0`o#^JNn%+F*JeXt9HCIej1vQ)C7fFP?C8_5$P)Gv6O0! zt({J%B$tCEi6h#+d<+}WYQB#RTv%lQ|d#05qdG0!;2-R55uiP|YQ z)XJWAx?TomOQ(w}W39>3<>$=gDpp~o>k=MvBLu0ObLqkMk)CS(r|zTh#E$;ai^z=V z(fW|$h?uCMR7snxxumVSiba1aNyX>i>-0nWd}-f`vc`!@R*s628BkZ#PalV>lEiuP z*qEj3`6b~iDj6lD2N6}~0qs%w?u+C19GmxNi*D)xO5g6G4C^L#K>Cp2{tWagq zu;^Q$$Vo?acd{qDZ6uzvD$NrL=a&VH8qp**|W}m16u+S3X_odjXu6B)jlspN@M3G4j z^ctZ7#e1A_j*@fSgH%+%lHi8h^Xj#PdlAQr4igiGT4mC(&YQcXj(?>$1lkt9k6|}W zi4U-d25x6tw#;B({S#M^Yk&5{a6sNQ`O=N*`Xe>+AD78xWK+wN;)gv&mbzM%t;Kn!k%vzpF0S z_sC@x_@J&_#r)&aL?>xWn`MpHVd0vt;!EvkKzV#H$W@1Udw=)kl>3!K11Cb5V?2tjP~+4XL9V6vw*u4ARu+0a%Mbqid(-1$d}?+C;;9x{M+H2iZvOM2O|2y%^n zfR}fVlS`>TGYT55lx^fu^Ku$Nw(M!IZqjg7`7LNljfdCYThn~5US}SFd!QW9+*~Za zk2rstvR+-5h2>N(Yf&SNd@fZ)ruh?9CE94gu=$?Ai!X^}*uesL@YZiehD-};BEPG& z;bgs@`t;%RVk@FZ%Vgj&KRMYW%ui3HM7xA0B@CMph{8|_<+dD!4KRjWSs7OjlVVJ= z1T%h_qmjga1k-9}%sTPqp1(;_M4>j_(ZWn{HPiO^{$Ad1asJEM4}ma$V~ zNZOo}r_Hh1ckgeIs`uu1_(^7AP4-i|G!vc7t!})tHHB+p`KQ#PB6fSMDH9exVyF+Q z(^HHh0^JPGti9swf@XNJbUN-klI*L)ioY$Db+wXXQD*)oJ;DF;a^Bb@aXj`M$*By+9mYHie&t{g{OD2IxN& z`|vUrG=e6b>;A5WKefMG7MPAayFjI2O;{4q%eiP?KoPS9u*_qr-Wrdst3zsMF9R) z7EeYLUffg0i`52aY=AaH5J7$xt&E6aojXfGJLOLvxH5Mj#wF8la#hMr_ZyYcc1RQ4PeJa3z*Xe++K z3#!_gYd;{tjiUpWakk<{uzT=s!Q=`vUx0_GF-2h@U1Z^g#TRtEHiZp{VTW#zUMxEB zPcG|bLp67gc@c>(Ce&)Awl3tcYqw|Lzo7R{ke_e5#lT&F#B;CG~HMdL--=pt~TW;0;dHv_ZN*9 z8Vj@S#_w!V@8lL6u=N88tEZ(}8S?~UwtBV9s5oX|dYmQGeBSKp7crGwqdS4kO^(|S zy-7m|PK8EcqR>AJ7ma8VCd;=$yIVs=HzuGs}BcB`oqEDz&C!yDHIE}ZVZHv-N{MYTp%Lm%3_PqztS>x;r8Cg3P#A!7G4DzEXk7^vH0}17I{%mt zXWXMB@~(bp6OR~bq4DG2sUbGA&Wr^<66P(f?9YrnGvSH8a`-;{6%bt=*~wG5<7{o_ zU8WY_^jEmB!xi1)5AP<<*^_<1viw{weJK%}vD?F7^@tApjND3z32kCukNiA-6nc2g zIIXhb*Yy6&^+DVs;^Un1I@9-Eavn)tTv6?e3;5|=VzD2rVpA_x1YV`<+AWyV6BFl_ zyjoT+v#sCeVJCr}$&*ol2T(Itd8EvFfxD9jgRh55)XR(^$9gO6z%qroU50!}x_&%7 ze1ehfn$EmKO5kR^UlCus)F?5J4- z^~=^?lNs@s^$!h!F7VulgaeH3k+hi|pB)X6lYawzfhSEc*eG4Ef8AZD?WTi5YS#vp z==g@@b!qtmt*rTUd(r1Pp>K&{VwUuMdojd^EYtM1d(j7ll`jq6{x%l<5M;1{Bj#lD zA;ie`s9j+Op9DEq_E2P`K#MW!rz1=c7mXNbLxbycWE6}nNLpg?9a5FGE1+jEId9&f zH98I{jXYWz?Xdn~+qbj|y5RC24^GLz&03p?oXj%)bHr~tIQcprnN`Ed?piFJ%^l2I z)#SmG{@{Zn_*2H6XHb>O-G-+t3MQ3!L(y(oelf|UvqzVrmjOqa=l5T?1Qo~WO!vG^dad&KOy6F)1rv4+vO;RT47u3&xP_desc zO&KIm;C#{F1?b#i_dFCqX1Qy(0F>W{w7@%MpXSLYwnj#bHv~{7^;4R+XHN1m(ghbR z(VzM&Y;Qq(ZIJq%OWQW+atlI$o;?oIFPz8;5rwFOzjsB(p+^pum@;b!AAgJ7Fj127BTCRo1p1`@V{=}<(6 z&Mn(=c{OK{erS%Dm~U{y&vE)V=N{4^-|-DQsL!uYHDI_0p)Pu63<=(up|UtFI8wlfqyBDZ~y?G-^N7CIdL zHOHc?0A5L+NA&J!-!hU^M-U$n3lvoZ$RO>J0<~cp0gnDsGr8kggDik@M%qj8zNjD1 zoWLsuA`Cv*Y+`t(i6d>B=YLm_HI$#&(jJ#Cz@vS~Ud27APGOK8%atJJ8>V}-iHY}# z1Mq6wNgG7`&q)(BQLFOseQ-%%mL4*vUt1dUjXlyWX*-2=QwESRb5#P_BXpLyjp<&E z-ihV2LDKro=q-60{rEu#xDpxx1Jxs1Q-r$yc%e4}{VHwDt?edbI=Uhy-hI^sWv;2{jI(f)wS z_5}*|wl>2FAZ|Rs7eB2rKS>@xAOU;)k=no*oI?*O z_jlY1vL~#&o8c+p`w}C-V#_mUyM*-iH*gO0+_bH><0S`s`L{-ZemO8R0nh`Z_Z_?Q zi*HsA{WGL%Df%1ElW@g$L!MU5_U}YLVUWP^XTvsEBjb3&Is%^-=y{r&;)&((@(d8d zvh+#&G&a5S3K-cOf{YRK^^^t)=HAW$PNEE$;U5Y<)u3>I*(FdhMLFvG?A;N*MO5zE zv`0UBV|s(Jpegz5HssT;kMiKgBIY#+oNWCiDfASN-ub- z2GTB%2fY)6ZwfB@*AzFTUPx;$aUyE>U)@&bC&w3q%5B^60cGIbVDd8{2TGS|`Qnf> z6?CPak-JULQX&D|8UWKhrt&Y2p!{$Jynlg?SOB;0N;#CaJVf z3Y0st-Hb#fdxO@=o|HffS8$sV4un|i&{>~apuJ%OIgPjJ9Z{fQZbRU<7fH@0gj{RL z<{>U`<;(50~^Td68<_)AB7wypZ^q&$1*a`Re0GOdS>7FD#Yl`(fyO!<&%>GQ= z8f^YoXm2LR_RF(KPA_0i;BP(wgAxBJLFy+{P$y|C9A7lq;B)PWGq5e_4Z-~&r-%k7Wnvk3e15aI@oGn?X}&)dLvxkrv{v{mh_;n!@P+B)%I>9w{wJ!mY}x$ zTc5y4s*DlF|1t{{606OUIMQhUdN2)O?=+0338csO4ud`)zzvX^Qa*Z1vGDA zOAG3^tAQNuJj6j5wNq12YQHD1padgYe=xP8zA+&shI zL0nJI&Oj}e&0EMV6kY}laMNv+W!dn%hAX~ZHw9njNA5Oye=iQy-1B_~;Do@VWm`D* z(+Y?wCkLDTC4-Ot3E5i~o(aGo0yUQ=P$O+9`Hsy6zS`TqJ2upqwE19a#gfl0xT?>U&A*fx5o+F$iNl|YoWF$I8YH-k?+ z;2upf6mwuE51>Ln#}qhp!pI6>28>HVF7>LS0f$%~E&u^{vaUci#Ylv16h1e&4}rlC zBOt!PT8`FR=)otYJL|q6W9kDfxTQb-qr;ses?x3{_KCuH6X)ugi3ORM^Xh>+yN!m4 zDNzR`_nuSKHfg&XX)8kWOY%0SxmV2g()7}AVB7SWS+c-17@;Ey>g$2mg~-N%LLpJ> zq)fdG<1MEUEa?1Ii=3g1P@KaqgZ{>J&LstsitQ0+*~mFY<-?X?Lf1ynx`+3L5J*7h z!?^8MVyP<1!SViPeeVKv*6q;&+0>4pK>B6fr0aXu+!O%(M9m<8RI4AtppD~4MxdJi zkOm`Hpj|suj?ypYTtjVSUND(y(!dFdTc{-o@c8u+j)|#|+f{NsuS$*O*&<+DaeVA6 zP|)9&9&!uLhYNlaBAW=9)HsF4N9?mf_w@Z{BeJ;@7g!@-Xbs>662D1mq`S_bT<1+CMEQX7*#oACV}%hg&!V03>1z>BlNL zcwZbFaKG_P=T5%9br!&qW**6;XoV7BmjY3vB1Ay?LHjO~{(#2UrFc?Vu2lnBC7MCb z`9x#^PL>98a5^EL&HxMiu0T1VDPmY(+=u5f{dSbc(rvvy?rikTUu%A_-AK3h$@;5G zKe`OLkGHWqiTIkpw}5{NyECF22lWlBQHSMUN5a6iS7S3)kdkMbSOGgju z4dZFn20)*8`v}!CnKJ739GIqW_ z!c~72AbY|)23Y}rT0e;aF-SgffnBwqXMm+&At;PI+f#%?Po6KfQea5njtDRTlt$~0 z;0^Bmf+nU}?_3rvDvD-YLqcNztt`Q&bb)fWs$zhy6QY;s^msoEWk=L~gIL@y{ z+p_I~3{OnM-hV(#$Gq*=k)MHbLE9JK_aJ+32p2UJH{tk?P?N7RCKGOIgg@ANkw3aU z0}|)nOCW#|^4)46hQ{~!?QgYHRRBK(VlQzJ|Mx3m(L>gkY|F1HHNqaxkW3|4AJmdO zU0S{mfzoTLK(z!txZ*4Ob}(;?x^`gEwWR987kD(ID^&}Z^Bmn+bOl0Ld-Ai{1Ah}d z=H5ntS-fvxzH_MWRL1bZ9pJ7Aqb)O=UR{utoSG(eQsNa#uHPL6R*-+mJ|%Gq*a>Ek zsm#ACf^_?roB-S;rd#0er7kYt_$Qv-F7No{kB@2##X+ix1U4gW@T;*g3e22i6Z0y^70*aCY(vQfZzw&YW{tNNv0xhcf{*ymT5#V}+S3m=g0=4?Fq4Cv9pl~l)a zRYvKV?W7@ON6Ia{~1?Wynz;P{H@3D6OTO* z|7jn!Eh8)neth|Y=<~m6A4&cfNv)HKt&^Q2SVx--j9w!_4Ze!ILG}QspE}s7Fzb{l zqNv!>lL8$0kf5>c3w>S<(RodczGqI5DjNE|A@&&`s)hKeOyI8~sA=@kjTNbw*66x6 z=vlXHsWJY@FC&MksL0v!Qz2Oaq4`W)bZ>OoaMMa^^g3Uq^?SV<(9;n>+-Bp%=bpDT zPUh|iIMWgIMD1<7J3`#_Pu!&U2>O0{_+-h>5ZppUQ|AHFs}ZrjR*n^{{=-ekf?8!K zru+3%ZqCQ}0rK8H+lrWp+f}43udrdLy}$&n?D_dQ?KYoB0GG{R5w$PID&~~Cas03A zY287vR#o8v3gcoh_j+CO(L*#H@BXl3XLE6&XDVV4_GzVfHyX$FmBuXb@i{aJFo)%? z@?rKn-Lz&}KhjX^WTKr&JBGoZa&+Z?dFHQDmEhrvOyhjQL9?C9Y3|V25ctAPG%OqC zZ)6K}a%9+YXu_e;VM0ORfoZAPT8 zGR%%rYrByJqu%nC0Ny=Ke#^!3z5N2)ehe|X&rFo7EO_%pDuRvZ%aBX4HwMuc(UKki z*gBYBCK!y4GcbvN>$K=!!oW zZe|!uFqU#SkCYYKm6nAig+O1EkR~vzl@XFatEX7&tuHhW#Xu*K5B^fb=sz@F9F+Vk zjrR+qFzwFoze}^pAF+xw!Xzf}@`H--fp1#^URxDbEmu`7ANSN!i!DZ7hln>`4KKVZ6|;0r0Osg!ZJpdM#lLFzYSi8B<|#&}`8r0X zywQB#sI7z72YoO;di>t@`OR~;^I^RFuQ3AN)6vbe$P>56GX*dg{f~19mZe>_@^hH{ zuV0aja*2No_;5g9%Pl^5U|-D6_?`dG3HG@6VP;M*_ffTnbXtxo#s()lhPz9^fKF6=R3P0=WWbumSayDzZ z2$85UeCj^5e4U1r;8MhnI;EoIw$jHbbtu}_GtL8Fj=0;xBgXb}jKeU_#y&Wps zal!ONDcC_tW3e0eQSn@uY@AoyCraEJAT3cxSuvI~3aBjm^P+#^v z;a57Qd@fB$i!0@(B;3*uQ=XO+w!cQQlm-)o1oH$=3&T+BtSy1CC8#PQt%0zpI}R`{ zmeC%RN4qz4Rh79!SCf)&&&^EnW8Mh_LqF-Q2fc@|4vO3u=<222z2i)J2Sk(MQfPYn z`r*P$4R=LE=UE)$$p+c#l+lpV#VnNFGSAobM{CPdYf%YBMa~)2M9f&L{!_-4(74Ap z5L~@;X{hm|ybx|&yBygZ=9Z|fClhn1n`@|-9+z-A8FcN5<8a-nE)vu3vmOkyZzk|-9sXlZc;X);(y;U^> zP%}pR1tSgtsXNGro}5D|md7h3B!_5}heD{axAdG-yOJ(Z)hW#VqSUM=b7N`%%QE;u z)<9u3qejOZCAB3N7L`JroPftB>9)IY66M*6L@_rW60kgu&Y3%Co~oG6<$wvTDt+^q ztmZ|y;(jwK$RlYf87nhPmDpv0W{JtZ)7VK-5al*J$|#|%XI1h+==^IyIoYU%{9dRd z>wWM<8DC}@x6NdixQvQ4;UTLT`+f9;m*7i!nrF-_Hrsu7)f2a@QV{WqvT+2wpsB3F zD)o9xd|A(0IrzU?y0=Ik(V)*pteG2;AfpSTNvNYiO;OHe`jG>*Q|agywOA=PSe}(j zPpnSn)znPeN0GYi0HMiRoSu+PH=F5`cVu?zSJ)J+SaN!)&WrB`VJ(cw%P{9&T6Le; zeih7=%!~v;SsCcpBV=61OIV`2NczM?DS_hM>A|}}A@;a3#LFKlkDr9}cNja4kS<3k z@JL!AcaCI%rzRzsV<9dFFtX#KbTst2{tG0wL#`Vh!vw}5x(+mg!zz&UmNu`3E|ILhj|!019kYW>=nxaoD+*Vjm; z8-s(|S37!+uH5O%qUkUe&fv1vKyoDwII)fr=-UhZ^5x4k_|vb&lJ4F7=;hvEu4NLN z3xbkuvG1rduF|7~JbP12nd5)_Fiz@cG?}VI<*_^E0HVG-p@0Vqe-r}U*VNpyeoe2x zuz7C}=@g|^>7zpud-XpjB3XVa1+B$TSnT-1yM#Y zMaiDwdIy>2?#mK>w6bTkv4~>6N}QizlQT;*y5t{tw1r| ziKoVNQ7YuuQZD;$l)7Xbg|HJ|B0G#yyYW_uF&S+=8*H9Q3(iCJ$+Xj#un{u!bF#Op zp8R20<^hHIv?C_Xg4(NB(La6doiw64oR+09;iZs!v!jZpST^$2Rrc3#MuH6SU|^hg zd_%K3*U)Z}ZLbi6668f<4gML;$qj{!x8{W_1`K_u7}TNlQc(NRp`pWJwRL6_i4L2-Y)`Rv$o`|$|X}38NO6iNmjh-(Di<$jG)5BaMg1XkK5Oiy;)w36j z1M!~P+$TwHxV;nh8)aU2Qiu+hv-FI;?;I_Dz zZI^TWOQ}YiQw6a1|3X=bjU@-)u#`IE+K6_a-N~Ka(9;Ct<)Nsf zRu%2zCX+`-l7|%r;LSwx@OG_yn5I*q)y|dvS;b6zWJ}kOvb0`#Y_e=42iKumUV#yO4<*t-6MGW^+PT^kJs2o?Y)PT zb|-&}venAYU`8!5LrQx~_>g(TY{=&+8(k``u-Zvz5gwgy@ zV_stB#i*b`@u!~^g7zL4cn%=8yU2t@<@#MFBgn@o{iv#6ud+Wvbr*}?VH!L4uCE`z z`5%_)l$L69U-Q2`O#Q;31(RAqI1l9%@RP)Uzy$j2wfUDHuEdH7{09U#>vdkzQz#tu z`-&D-L{0o;jE#RqX#%uo|FN_95q0ywsd0nuTBwiw!$RksLP6r>D8<{9=6@AbJ*Fs$ z?xCOXyCs5q`~@5}Yu^rt0=5i}4z|JtD-b6OmLX-3bNGJ|4k$@cRGYe}6XD)tI- zBrEbo8X1<8J?Sg|lrbrl=)BmvWVM27ib#@e@gtOxwe;&frr&)pb*}zQAzH~;7q(Ry zL}R*LNXIwT2v}uFO3mhWVMaRz+~gVN)YT5L9FoA&EySsBn%@dR3Id zZy)i>@vwFb?p0-){0tB;Dzo=H$G^9GN}`p?hW-&fmX^M^kIHAVtkyl$RB!x(z)9g<;dO>zs<=7`eE!-OVA&!TWmg zgc1x7W8suwPE#=^Fzr-oy;5WOdZAFRy?l&6n`KNruq$=CFp4N$bjQ~IcMNLFw3tA; z=)OKobntp6WyVVL>nZF4P)f8G;EAjll z`Yx7Su-Hr8f{7T(tehw;_%~SC)en|^u@r*CfnW_-e0Z$6I4xM<)c|&8!Ok#^P(En| zIGahPnYNq{HVj0aS?W~KtPJFH98zy>Yuc7e))CP53y0el#i%8VWUf}S$9x8#m&`Ud zRXe^ELGJ}h`IN`8g{7=#*#SjcUwa~LM;UdK6vp5;+3>*9FTLyGpkp3DwkH@JCMSLf zT7VS{Dh`+9V5(r1Md&_gPY_BCFe}oPz^{-eY(IOzV?S0sGof=~Ul_q$I_~E5ESsvF z@j1K0OAonBn(Fs5GSg}~*@BX(xqc(}=vzykYvyf6({4}GeJ39k9$i_%uM5_uy#=Da4=vuj#nB(lwGIpM`JN^MyZMTtEa(Pf%kreg@CRtJUYI-yzl z>}BP=irQ{LN{PIv|BM#jq5vCIT4b}_1L$$xf5yVSl^E%7WEw;Y?b<2He1_D)nLcnP zEjjd#Qv>Xbft?kwGf@XFQVlM0%Yb%b)eLq7#3-zW+_W#Wn)0&-x?LuZz6J})wpdb^ zj>67N;)bJM1Y(k|o~Q(xQ;!$HV4zjF=9h~#&XvH<$o8o4ep9{Z$ILK4l5UC%cXcg| zYFr^ald|ZxD@`{dJ;L6)Oc#cLpX>emBj8GM%83fRAdu)Yk@L|Sad{!C{+m@$NxwYD zOSZ!%`=b1CL(#M4q+2eB-o*1qVdlzUzf(AB*SiK@T;M(?|k#)kkzv<*Z9G)sY{2sqv9>xj0j0?Cg{7U4hQDxMp9MFcKZi ztLV1S8d7$bTif%)*h8F_OalI28%4mg`TQsj|R(=7ADa0u|;$K(ypO&qbGCWGWuWW2Uhlo5mM8u zTJkK?R^82y@tz6XGVVcvvEBENi{$m~Eif7Eqk*vv=od}N{WR6I5B(_{@%TE`05+b% z`On~i*LNKC&Mm(@aGtpy93J?unhCg?6a%lJeOa);%dLt8{ae2pZ#Vv?!qX@jYL*#X zb5wRnDla$$)&ax+!`fNJ#qEWEx}~@~6qn-e4y9OecXxO9G8DJs?(RCc4estb6n7}@ zJHP+#-tN_2&AiD;=95V#$>e;W^Zfl@NYwzPiUWd0lxrMNG~ypd!)hEGsbBpbv`U{} z7X;-xX2JPKHwi}%NwlOw^$S5szOi5M&jSRa!-TY|)_R`X)|?ZKbyPUenS;(!P!psHwx*9fgtx9sTTLml{INSB+pcQ~jJ745#DcwOes3Q88rtPiO0 z@#(dw$}Ooe=2%kHq_O5UePgQ#+pP)+4QuLk)|ieXr8W+^zJ`qQg8X!fw-8|cH{|I& z|D8ARy&oM#`LG6o!bQyRGtT~x+tj_v=g=TPcF8`WNeUq>iY4x$NY)IimfW)1wIGUR zIU(uP*SwlsqZAOz`e{uDSplbBp;igj5>16vp1M|g_aT)VX@51=k#)#oV3m`cV4i;0VX|Cng*Sq)=-$CnG2u7a81;&p0kDk_>h z1ozVKdkavt7M?8heBFDk3HLJ3tO$vy)JXn5(g+VHWW!0ZMjj_VzEnWGnB_GF%jB8H zc#KynjQ|;s8g@D48?_UUmgHF!$e>w z^uWxFoiT5H%JYz_o4i#sW9&N3lqS1^3VkSTVi&G@J~+rsp^~1kE5)2LymC--{)mXP zOIidnM1OvLir#KfMrA5pdaSe7L35DrP>*T1#aFY8RlE2gt@z+$W4yQBIICHaT@LMA z$Cm8p)ZN;ez|Xd)uTMgeVRHOcA$azYR1LFUh7}^%(Zdb1@~#l=aU&guti^#OWx9M< z{XogPxWjz!L^To~G#=+PQ6$xK*x{skYZubrI{7dNd z{Hztl_#|$u6@T_mcI3gv1K?GW88yDbKEA4^Aj$a59V)fhwUQ6~w>b-Dar4q=&VWZVqlIqRF<=Esa_n&0 zVQ9iqC|k>0%Twor3k}TaTB-PA`3!XVv*m&zQXYPji0+~Waa%?#)Z%=~GMJjoWG`55 zkr+ZQSn?2)269H;Of}|6y4|6r@pq!fKJJ3?`rmVN}!BJ-L7c&dF1Oyt@ zS*_oHQA~Gi2m}+5P`@Px>s0XIkwhod`(jp#m0xV}T37lr5v*aYDon&m1GPSsY{s*| z2YQ@cOlhc&5wsHDLH#?Qy%c$KCVmyrE&xWwS=(_C7?Uoh>-dtTszWF#xJSLvRgoxE z`>&3htes81|C$>!LGKW%XHUSTf(`STzxvANAeesSm=}kd$c+-aqJ-#!M8P=H!-4;e zx9n~ZBCswXZ5*76{3pk>TCLxYjYA~oO>=(w{Z|w6Z_GFBfSn-ph-QBNCQeK?Dk(vu zRY>q1nTdK@~)~tuH^mCI0@-N(^O5T|SW(aYs`S4@>p7R?Jkn)^1EPmUDd2 zruFy4PQmu_ET=IqOtVRQl_L80FD0_5gsph&KZ$cCG_`S(CRg&m5mOfM(C#eX2Zbcq z?;|@WH4~XeYi0*hvCit2~&p%LHEvNY$JZ`dJP&mS# zReyTQKJSihDG`}b@VOd!S$u1T!T*G6$_?fCmWuRDXi<}n!eu0TM!NJTr7xI1&`f34 zsfq;_MMg)RyuI7k{e|7BlDqgEe&66*!9KC9CbVXiAw=fY%ygAjX7TIR|DfM zS;;~X=X%l0OFvnCtb>Z;5sEBSEics)o=(?dt~TVjPJoi=0L)neGTHJAU`&YRSKIt) zW$#ikjGj=`&afL1BU3cB_D5hJdbXnFfW}hgKKQh+mnm;8wnKJ)viD^~zAIdZ?2|$4 z*P0|&S_c!cQ6mbtk66^ZJ{DLLR&J`GNvAn-R6e`S`rq}GO^GDRAY?lvdh5|C*U{X3 zwq%CYh?HvW`Pt?sRc_B13)TcGaq3}ShIA!DR3Rz7d7yBE{G6)ixQ>lRu&a_I(r{sV zjU8<@cS6ctY0bI8{8AghSGu^s8ORMZ%_ovG5nH!_@4_wTEtkpK=xhtMH<8Xz#;{e< zrc4_7s?k!t^tYZDIxKRA?e|DQUIbPCtDFl15o_U`1^OsY%mR9Z3%@pM?J?QDWdi6Z zucXRg;FopwB-4U)Wb?82JQIz%jBy(MKVL#agKb_0HEPDt z&JN5vxA3XQkqIJ1pNyeCTreR1X6Tz_TsoBzgqSC01sCNJUsxBOT?GeUKBj%$D7^eNr4tYrI9GW2X zTSL`&qDGCAo(p)4{glDmBQ;0TBiw1up<=|IRQ#8%+^nzjl)r#e#WFUbY9y8$$(OZKv;oxbtLq%8&c(l1r?`T#4V#+3EczjJUX& z_UiUK-%Q0u9AVW0Do=DzIMhWvfWSY2m6M{2k{AnIW1nwq3%=mbQBDvM4~16Ac-VbY z!=~oNQM$`0>BMP{j?sRY57Ly=9*zp_YRQ04ERZUrP za(t-hG|5tWf?j|z>IOY2L3!As9;qUK0Rb^)EPbIN%z9NtZbH3W@?3cgoI?54=7Xu; zOd%n?wVA*ulOQh@Gdz-1W~3~k*sc^>ELLjhRKa4hJxB*GxpJHwE=9o+OQ3@M-!L8G zFKlA()-27ZU-K#{ue}Z94tp)Cqfo1RPFiO{1JW&<@fb4^((#n>Rr`O^6j3N&xfX{F zIj}Psqs)11K=2++3)}Ht3wA<_tl+tTde565>Q+C_JgS2JX+q%*CLjJ%hJwLm*Ux%j z)$tbQ^j3;AV_G4!yy@5Xz6_bC>bLoVRv{Bm^rGq!ea93-h9gZ&Zn&33FycxM2QX&+ zDG|3X!;J16TTdG+L6tv|oxH(a-lrRjmNagR4~z>DEBitr!m6RntW&H28jvekUwjaUDHiU*y|ErQ$JlUe!6V^Z1DcZXBb^a zjy)cE&KEOIVw&a`UV%ZswO5rnRYB<;3iY{0AaCk1T&&GgG}ACuQc@L;Yk|?N8KC~} za3Qa~5%vY-C|W_zs~so!xgsVAO~W_uqC>)HsmJ3b zeb>LeAHHP`48?7J!a?&;=d;;CGr9hjtfGNnYl8_=g)xyZ24BV1Wy_1(J79Bhx4 zN=I*|>mlJOCleCUnr@8L4dDrT-45)Z; ziTGU+CHcFDpIYSvuZ1|iGr1P|n{o&6A>OnA3{J{xpd#ey@i_}nn;f52;

    +5IP|t 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

    Em-C4wyWBydi~u=qw?y84)PFiWF2 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

    2cUm(UgC|Yn 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�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

    I@f6 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�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

    2rG}_2fXdIr#GgnU5%Vply zFpion!W~>groBI1dd=ZjkS6-0A zL!qv!cZ$EA3oFZzsy#gd>bMPE4WSnw$TJP%Q9MG z7GbsL^K?8EwH}X-%xQ?1B&KD@s8h0Ut-dJA{F7b0;iE`fU?$b4(1mmuPy7(O8Huyi zd%-;RqO8iS(Yjx9s$<^@J#<>PMd$Ad<{sJ+cpKyZZs^5U-sL`aec+Nw+q4h%-+-#6 z4v3PEl{ZI~Gl)sLKX{eFOZg=#s%4Y_k*;TphAX8^vBq8eP~+S5W}y&OTAe5h0z(gb zRCR3V(96emltU0N_0pl>+u7Z+BCvV}n7Q&9$V zA~_900!kCFSgzDLw~Fo$>ayU$@+Wjf=w#vfNeos{XQ?Uhz>6@>>gA`|&R59in(%9@ zIVsnuUsKF|6W6R0jrcmNQ6+>Na;l`glA{+e;EWBg6mzOm{Uf3jBiTU7g6UW>knO`M z;esW|3w_T~6m{9LS8YX0YsqrZLx3xv5WwqS*7Lw^&;CBUdU>oEn&n>EEM;3OlK&kx9p z(Pf+fsX!<`vFPWokXg1jN6>_}E3?&H=T680Gm=q|8m1tjWy`wi0aL5`Si53(PU-LI zrBxO+U#=G!?6rm0>cP;$r2s#^08#nPD?1BA0(|cp_}?+*4>L18M6T!hi!6K6+ztt3 zXlFH#lk{j*L=s0O=|j&bpQ;H4QoF1&39o>Tw%Fi@Ti>euL@Fo)b?1z1b}y%EV$sJH zI#zW|3#5KoGWoM33*&{d^^a;LwpcNnIkB|ZwLQluwOW1LE+4SZr&su3H)!&4aBBkV zCQq5LlHbe5IIP&!2uz!UgW!#p|>+FnMe&&#QWthk$my{8fDI0{P29``gS;~ zBH$s(oYpPDhEB0Lw!dkll3rQ*%PJgXH~5$9Znw$0vBg?KV6U#7>V1i*T)9`a6-W%(=Z@PDi3C zvZN>!?`LP<1Q!g4xK;Y@De{^zl#-oA&|Wc@u<&QB`;3t1Rq^QUjly6&fY&YJ`Ekg~ zkqWQ2N+t=r8+oI=EN{~2^D(o-EuUK$?zl>O%@&88jeR|<)5_W2q@Rdb6hfJSRr%@3 z<@X-!S{lIkB)SB_4LGH4j~~+a=gH=@wjJ}3-)T_nzDp#|tPTxj%ZiY*X@?RAZqfhn z73(3ezYAswx}9^mXUS3UfMg9b^)0((+SY{M-sf+BqBT}B??3L#?6TxmY6eZSB3V## z;}q0rzXUaT0V^3T0$&-W7d*u68xcdA2Hla%YGH!#YhN*zNd)6FSn&28BJa;m=)TWa ztaEgEQ0Wbta+0Uq>kfUD13%v|+v*2oSeU=6eC=CWdT-UR<(|}8hn9q~APA`#dD@}Z zrx|!Sl&F+}UN%IO=rj|iDRL}qO5T&EOA|oXw!^@(9GTK;N{3h_KAvNW`)PX>Mv6D+ zZ?FTRQ^8K0gOy3+f#Enxf-H9bX#YI|{m55Q4m&eRzgDH2S^!;TMwJoe$7L`at1Mqf z6hPq3ihd0;gn)}~faByCBQ-i2lZ4De;m5o|kHJlE7JcKpJ2rFMMZ{J}C8e0GyZD5) zIy2ZCiue-35Rj14( z0{x)RyIl_iYa6d6B=*OSG;b>lzQTIJkZ(O7?h>-`CS0Qs7yD+Xv*g={O9oSh8`Cf( z&*P4#d!PyH8yvUGDtO7KJG%@b#=Iuim$o?A!1y_(O#1B41qJlajCFRG*U*r>_=~W- zMxL`Y@7U1p$nv%D5%MR_^sr`fEhR-JEKufD-4wt0d{d_+TMXP1M$L8otlC%F;Ly$8 zt|pMKr5R0h{D?iBKP_IrL_-c@Pq~OUB@R`y2!Gtl2&X>`VH|0GAb_(}^%IP@r4I>v zyXQ4gsxG|Hev2JY7L$>aUgn+#E17V9M4yaM7T{eatY+0J)kv )S{&6r44>L`X@M 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%0A-@Itrf?CoYqHK3wX0Y48h=amUzJ4ms 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�v;YpGD; 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

    Fut^P|BTcD8>0ziK?yJV$khQne|(uaq>R&ALm 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

    *(E{;{LE6QE3&>YO?C0(M5)S5z17kvz6j#l>+-> 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πQ%-m@plId+y3(m{0wMz=E+Sn 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�U?hB@iNQa|Tci!*@v~y$!tG~_ zur^~zK(aIlqw15h>W2Gc-)m_4wkoUm+x(*d+~q&Bj}NY01XcnrUfDN2leakaQ|epx zUwv5}Z_y-_7`vY=p6yaQ^wl4n78^O^26&8kA^KuL)mt8I-+r-W3%6sa)KrObojjML z$2we-xGCGQC;N&`WXnE!Q_J~jzO^sXMH%FCh^#*A8GGJ_DXF&zrjh zcLBL~RllS%*$7iEdEdE>xYWc?x4cKo)?^?}63}ViMGzaXI*BZLcOcVOQT-1^D~gPi z5jHx&>UdjA!)v0N=cY%hjYfv9Z{_g~IHuFBBaS<|a}H}YscKSJG;xhdoh?!er>6XXGo${{JXwC7`!n9(X}(+?ZtLnl43zrTWfrc z;l6&;U8{7~(4+MnvL~#Ko~7_K8puK4PT-e${@WR+*_IsC%`9{%u-vvgaC?5ZLt%r7 z*ua~F{=HA^Y$La>c;hKpZ(gs{s3-EG2gql*UVua0^APV6(kl;aFt3 z;JHPIr_AFU3+Cwx~QmL|eajiuJ9Ja52JZ7ew2qS4S&mpN! zpR;ZZHP$we3&y>VSjs^oB(g8N)tVcXXa}qW!Pa)J3?aQ^-dNk(2!yq7v$xNUznw>e z0KM{sG~rmN0dm|89s6`{Q94oS+Z&Kesasw@wRg5m0n zj^1r4KSM@=OP78FSWW=h5l4_=nkX#=(6j6rJY(&K)=LllXPSi&j1L_Vm{O!#$hrD0w7(%~d>=9r;%%?7fm;~p6B@O)bQ zU)VtirJX{2!!Vq?^l2O7rD#f8kZ}A^PI%phxmtZ^x52B^v%+PIqVY0i3cm9Rk@KlR zp!O?u%TC1mfm3W@|pyj)Sx*m(_IAD zAS*^DBnWB<|D>VU^NWsl-gy2Fk`lQm8SoJ6vTTql;~=m_0=E?EGZf=?7(fdhZLtF#OP~OfjkX(sBdkr3n1Ob2z zA{uYy{wBP4KEf<$WRIh~&b|+zwyWddK^U_Nms_Vv5nPq27#60>BLHYjc-#3&U#Ftb(q+? zGWxfN^_?iqb3-Ch=*N`WPUd#nz}lCQvmxVS<^<}x*X*_0VV>uPU@%!q(DidfH4t)c z%`x5&B|yCRzFvgTpK)U#@aFPyDd>7{cc6oKohXSBU)Ie)`nuT7A%Vq7fSFP0dd+l4 zZ?k1QxIvQ-y5K~)L${U)Zjre4w!x*L#IxO}QIJ>@>MP0v7D;1_FenD#$_@w0n^V?4+b$Yx02(f0nc~P3} z9A3UZ9n182Eu7;A6249FYg8!L_Alc`yAKOKTta9wJqRwId&GjnOQcM553J{S$f_fy zn>7bkQx;>?AGy+Tx^`Ly8bjR4_ z%uI~ewU_w|9&I8P<#rr5&c7kB$M)bj3c}JNnBs!lF=9^97e6MzN*PB*zojgUjUOy+ zgo;%=2r%LpmJdgwvcG9&$t3W&LQiG|*xTgKKda~$CaUTl;(f`P?jej)Ryzzadk_8+ z9Mll!ALS5&=*tpdT=*amD`Jm=y&eCeBoWbsugsk)4Q>)^EKqtxY(xpmPmZsaAYgp) zikIKgaYrc&(%$}utIGdvUl2qY&O9Jd7dKd+OlU_i@=12QUbn=n#_e8#+>3NeE65n| zp|X*>o0m!BbJS3-G~&>;HgOb6Lilb*p1(xJdT(w@r8pBkK z@cTED<`#pO(|rG_nkDbL<2XgkSR4G?PvWrztl4E2HXV|5W6uF1T`yO zZNZ%(G)opY|Rg$84 zOycBqcx!23pC}yV{f>DwW(CAwZc3_ zgJYCR5F~c1TTVjdf_y?x)cjGXn~u~*{f&Cjpnr!eqgJ_BZEJ%u$7mB$t*&|vK(ot< zx0bnoPYsa+~RF${s&C<4 z&K(rlQ-_59^f@;=g0g5gt{xiQW0r9Dx%)Mzl`+(ZV%+`dZA_QwD>TYtd|4+Jdg)4& zI=?dha@@IfionFWa2HPA&U!g!>lEQ2Vwh9N-D=not;LV|t zui$Yh*H#Oky)evM6TCdICoiwbQTxI_;tra!`Q{E7>R^4Tk9Dqh~hsRjoG{s4|)EyCK}%Im96aKsY-czG5t^f0eFbH`o15 zlWsEgAtCvcs0)wJV6>cQd~6sy=&UZajrr=NR()e^9eLmcAUL#eUhJ8aq%?psV0FyH zos!xioW31+pIu3*m3FDOG%{M8#lSBH*j9xx$PE=|m~1(74*L(#ab%N+&ry}Qs!||g z^kID=u=#?!xDk14a4(c>>;U1{Mq-H3+ob}s_6z_Im{O%jt{S&4c*wy1&4gy zJ@UF7`++t~HBS4otOK?NBY81^6Vrk__d-wOvsdPYpNs>TcQ9&hcq;WX?}Ka~sECZWb&%}OJ`4E>brXJ88BM4{t-@d{R9CM}1(mvs|q&?L^EV zLaxsHM@67PzLTQ{s6&Jq71OZ_EIX(uR&S-^=z6@g3NuXp=f1%K*(Cv}+2ybhMKO^Y6>&n#(M9WFa>4D)Wf9y~6#=FDKDWT+9{xqy4&y6A%cs?oJLA)5 z5VXAC=_}>y=q44xk(R@&GXx!-`AcgidO9NiL@;Sfi{BHu6H1K6Wy>Te&9Iof?tcuP zxE8Gewe|)D&!ZwISvBG&ee}3?%RHfwVxhg`=h1y7^-r>@Yx#4}NEt~rQDuQqGx*C+ zI_G8DX7n}!x~33Ok_|alZPf_Y4FTGQ6fQy^9W|-7?<*IWwa2~I8JeGlwDq3E7oP7< zn2O;;A+W>MI+M7mPcgAO$5gBBIMaDA^C0I5uamAe0$bB0TMT2VE`Lmnbm`Vzm?c@i zIAaJt(O4I!hu=YQi&cg1edDFD8!xcmMwC(>cs3Fo_B(a#>Sm87@7HXvy3wPl! ztcL_al95H+0PIg+;uU7_zi+iwzGVj`UkXFhIh1yFcE+mJb^e&3mneU5pFHnuy&QiC z2^&(>CybfK${tUA5^Y&J)G;pi#t8NPZB*^skMG*7YiNgG3eKhl$_#sBQz|sZlZ2f< z0CPoJ2re84GkUR(ilA3OLvm0HTD zCB*X|IU+~-he(VLTT%o9@g8M$BUO3#>-KrO+}@9^RnG}#9D~z3Ef`5m%g*xE!z$o) z^Wrg8&A%RpZOPR?JXHOwLkxSqdpf>4x-|558g_im5+9Up8&j1USgMFN3COFC<&hJ> zW1E51J-Tf}cXjdL`Qs5*Wi1>lr_1Ye|2W~sk}GCHw4N)yL`DlS)iXKdu8F}iX%%Ns z<1(t`8TlQ-xEGP0((ntqn{kiFlE?7n;U1h+#)7n3T;2a>fj}~*dwkMEz$<;A{)aRB z5eo=7+Mu2<4VA?E$8Aj@(jo!h;Ycl>KYU!Yc4EI4^_a6p(PHHxazz%3krgA!FB*pwhd7-5H@V6 z{4fkOap1`VI9f!8EXavTD)hLX_lZQ+oaV%O9ysA~rS^*1vEXn_1#wye6y3ovdA?(4 zM%cwMPQWq|{siZatR3U7+$;lQEY0l&4AOKkb-f1o&2BF7k|Xe0F3k=T7%?d1<;Sz> zplKkGrV7Cem>qG#0X)x)L+yy&xMZwK*wFKV2pDQodwdiNwbP?I$VP6NH-k9JDycg9 zeU2)`pL!JXFYBR?M)n85YJW;#5+Lazh}0i4x4>}EC!CD{OrF|l6ZDmUUaadNV=tUj z5}EQ~1)20ANsK=bnDaNZbm>UvO5Iq}766vY(k%jxu9VxSkk=F8b{WtS(y5H=Z0|p# zt{bR=Ty3rq;j5}&J%F81613FSydatRjL77oACCgf$99swaKPA!?|0(sV@j`ew=h0V zto0aYrL+w2+O{QswI4C{b#>A0WZUJLO)nWglGFedG*S@_ktTJF4x=kQE6ALS1H9h` zSIDbR8BQDsmk^7P0II>cAu_=UMnmdBTw=7-zVh$wi>n|~AF}Sof`-lq3ZCFAZXuYk z&3A4eAD!1#0Ffgw`y`398uH46nXatO58KtIJ!Y`X(-58Lq45;6l8y>SA& zm7Aj24c#;pV3yfB8B)1av#(Dh$_+w85ao&5?trW7L)gdB@{}+S9NbXHOH7TRUGp@) z(aG+VaJPVzIX_?_H*Q2XpDP{lf`SSJsN&-A9wfO93O}tBn;lzB1#re0VHhG&&!t6$ z#Nw5TNRwqU4G~6LJ|B{6sI4%TQCQ#sxEg;{hdDR`a|47G6nz5L4teO)@lreLB#9Wh z`McA?3Y6blgQYmE=-5S}#(q&-B*O^11SEd4(c50;;Db;N@*qz(yngci=%y2qFr$8x z-DgG>3Gytyq`TU;<3UVP0ccd_mW8}nuAtRDDH7|P*06u!iLmW$58%MhMw|Lu^LZd_ z0>okI&L!|{)CHXP_)DngFlH{U>JdWOs;buN_4{xer}R8&M&~VBuP;cZh)`li(Fa<$ zH_H?fF?Ev;**Sn2+hbSQKn@Cl-PHWprNp{2>z=H~0O6-2*2}B$-N2jHBp{ip`Xu#N z(jRTX^Na64yA+cnC^Mvng-8Y(dyIyN${si$0_ama9|OgBpSvShKEL)d5w=rX8O0X_ zY0fX`Y%dr?BVjBnUnlE`%)NmM7vr)1>~BAZT=zy=?$RU(+`h}%X)r*HbB6sbI->P6zWUm?$zEP}tE z#T7(NIIIl;5<+5IG0^Yaz~9aR!M-K|!A&3UmWY5wGg4WZ5Hl}Z(&qzgkzK1Jvo<|74z~+6v-~!rpgOWtOhxg zZIA~1^PDgiG?Pd#iI_67kXNWsyM z?+Db&pW1+jQMIIxCM0T>AP|1l*@ufp0xrn+P6FIlqEpr8QgeYO&?rr@S;M{q1%k{z-(IR|kfv*fDUnPVDO}V_y zon)B2nwwT=Q0GO7sylt~%BEEAqIkq!x)ptu^DFcl>-RB@^+ygVE3 z)B7D67KCAK%ui^9!lg?Nc2N^C`|`{QziA}Xe2Niw-UfnM(-K$Cxk#C^&kIg88mHJ6 zMU_NrzTuPEXei-;D3;oNT`%eadG5*VrI4mB7tCBvVOMYmsPf`CAnN$fj;J z4>G6LrHy0!_x%Wn6C-)v+C>(u5eo& zX-zXkPxGbGtPnCPXO1QkD8x^4rdb%Ao+9hTZb@r24ZbkKP9QKw6Zk}|d-yzAW4)&~ zv1`V~9rK&blkK9T$NBy4BCnx2R*@FpiqbBE$uF0BzXhgDXr2K;9R6vsYJQS--bxJv zl`p6a9TKZD|8VK3N$HD~;JzOk9`lhp=tO}Oy7QE+rnV|oFxNyZU;lWPy153%h#JpQ z5DN@JhfFXlc(mlsI`oohhZX{S14?}0bZIUT-w9M5N&A3ePO?jN&+*R_ZfS$kAlwc1 zWsrNYPc2IDuO33>J%v<4RgECahBXp%F{Ey>{*rv<5<%^j$O_QjG1M=hdVUq6U5R9U z?{PVwWw>J$9*b{AMfZ=U9mfsMK5>)@&Wta}UV!Y{(CJ|IY^AVnW9!L|rd~X&z z5A*xPxp~4__=o-5;=SZuGdw4CiSP4{U*UZzcJYo*!xHU0=aXcV{0g8VNF2WpnB>3FJS zwN>h`ftUIoz(N(;w}F}8UpPI@{!m7UhoJrUd`ljk9y&dH03U-tw$X|`gb+AO__yK< zGu<8`SPIO?6P=wXry5uM8ik*!V0q*8&5XPiHP6ghg(^R$RFT;5#x;~u&#$GcUotoQ zYr?m?=nmKpogG7BR2qH2O?+JdBOYKH9;+TL$Q)qT<~0luKw2fa^(Y|x5O%e?ss&dW zZioxEA2o%?yUFa_1K=~;V{i{E(&&6eerP~vfE!LmSjB+MoLnfak3*7ufREiZUq3p^ zm4(rr^5&WHOFm31FV%-b}f2)i$UAyZtgIt>U`$N*m3DT1nEJAbL#}8LtrrVa6ttkAV3eLFc&dl$p{S^PO1*sSxmqqZpUAndVZ~{d#6**^8UX8u_yom|Ahmcq^-m8C zFj6>7#$1$}v_GgGihtwVy30jMAW&S8>WmDb3Ns0Zy36q8D%Gd57F+0?D}4L&*gU5T zR8*g@U1D4=b<7`)yeJ z_4($H*Y1Y?+|W&~OI)j|4&ry0N;A;wAVHx4^rZ!! zJ%hObAyZ zfS{nDfCLK0RDa$I{_poc0HysjnQo2-Kk(EM^>4eaUl`v!{9j>fa3b_$u8Z(JgcqGc z2y46W=ADI82Dpv_{8G*I!W7_&m02#YfB)^0QY$oeo3?|_@*74Sy?7TVLPwn(0D2qyfMKoTiXLZS&uNpKwOQ`A9YA;-{QSe4wOkt0?sA5ld*hhqro zNE#I^Ax=Wi4KeA_ESP*tV&h6uD-UNviLeeqF%IocMZp%wAW}uoCI3|KE;ojd`fxDo z0l|&-9^Q}yK zX&8f5l!xgPOP%1+O_|7&j-4ZtDd}Wv@s5c#+`?jf3!9=r0*8Ws5wJa6!teZ%g(ovzoN269FLgoFxHy(PWIVtLN7l|mT+vURx}^zVP~LP-eYD09a555P7?Sw=RW zmsPaM(GAJ~S(pWg*mD5psjPyw+H)&g`HW@oh0LDuX?&Q^x%KExnFtT??~tLOD(8E+ zI{z(O%&#I@ifMelZ2zYDXo?wD)@b*##SPP2f-1rV5VPx1) z`%C9-eod69e`!8C!UmQf7e?_(t8nfP{_yf}Kpl#v+67(CDU_YceaPd+cs#5s(^$xo z_3%pYo$Q!7TH0Bx1ysOG!}3oJnO;OVCo=ol^&iA7GGFtspE})Df>P2EK3pdCGL3dCv-dn< zEpsp|BG~Z#Aax~-HQg5;N9?bQH#W5?Ik~?&j+YL8#`!$}&cJPn z$;a*N{P(TBgnpOf88NCgu&Ustk@}T~bPmByU1UhpZRlQu#-$YFkLHOvBnft=Nm!w{ z{O+}w7=m7MpRG?$^a?rRVzNcGD`d!Bl$TF8tS1cWjB%L>-b4F-W`v8wvPRbu`*psKCZI4 z9UIg;@~={3f$bEh2%0N|4g$Z!26LisyOS!`n8Wbj+0#x0!4=H3{?|nCE=+`+d!fS0 zG126i0v-N2R2|5FW1k?oZd_WJ z*AO@V?9C{x&E*mC3^_Z%_J3n>Ih$6-ba{u*9^b!@i}?_Qi6AxlthnYI&}G9(x((5; zUHBUt_PoGMBFIetGp>Fj>xby1@)+;enTk7ZWI@gESx8UaxpedjOBmF{IVXOldy?}E z!8C=Wm|+;(Rb(EHuPh_<42P1crWq$d#Z#- z7$W4%`XRhvZ@V*uFJ&3&5|L8gc4r(t%Gswmy27x_!B)8tS{@@u8ou!Bo#Op%=mgsB zX?X3^7-P@<^+4aA&s91#Wpe(Dg;yT3n^LUVgnya}qS!xO)Wr231^4h*WT=N%;b=tb0$TV zm|l+T?-P6Vm>#M}S(EgX=(FzAACgI9C{khld$Yz0jb5cqg(h!Ixs}pPQ}m!)V@dX$ zX#~qPT*n~GAjU?OFcuhvEnSt2D&O>S@$~}6(~Y&8Wf-lSx&u^gZMd^^{xOg=*V{gh zvb7`3JN39&Fv2TwD(M)-#I~24&l+5V0LM;dEr`CE!ptva&82xoGzg#WAwxJiu*H9X z3jH-cZB%fxs_DH*p0`v5*tlhvtjB;6%e}e2yyo^B4ee!Ykv1ey?Np^?Lu^_i8;xlhegUXaJ>nO+iqq>db zpCP)qb`#Aw@&+hwA?OEGJ*tmLFnD26Z<+BH7rVw*y10(<)+QRQT(dF=P4=SvW6B=f z##|QS;M+)^P4wa4PFx*-;p)j~$IzlFY%|r6K&c8Ky&OHoEs5+Udwvewm_!86`|R%kW=WReyPt4 z2ua=#p+dC+9pA4vf?mV80{;u^F9|Yd=K@FdUgXwt?%HW9n(+2s87e~1oy794IF(NV zjzSF^1yz$Kg7XKa<56Gy+|NjRKD$Dk!h^@nd5SFHgCXbrW74+NwDELn%|=DBPpRtU z7?dBiyNE5PL(U3i8;6DuMtC4wxBb%Lj#PkxE5?)Ccy~0jay+v&c9$&covo`kBf7R0 z*L0qDOk``&|H0rv^#mm8{dPeOL;>l2TOujc%aE>h$AtOb4DC~kg&>F!)?rx|5;9oh zC~$lkrbMPo-3}8t@!`nU(c@s;G%RPcCx44hyfAMp1n*j=ya$VTdAqbr8SnQO$4y@R z+lboB$Sd1lj74Zjs!%z!&<_19I}bX?jF~HVVGe@$_u;Z}6ic+VG07~HJuE~M9?Djv zS>oT2Lcu3K^ay8lRwS#~ncQSs?aci9TfbGE?Wftv-#P3ym0j#8DpXBn@+^c;b8zfa zQ%Q+QYWT=*vYdOCIV_34Q?!(9Sk+`jSp&_=diyu<7BP#VZly|yzK}=B4S`FoFpMR@ zOhtb~C`s?C>{hJ@ElYt`GY#H`^JdWxlNHP8>SN-ILZL{p}?EZ{!Dm>v%6~+<-y#R`4$9Z z5*B#+OVlY(0xM0CA^LEO=bs?x7RDFDg^3^AtQjMYAS`6n`fiy)ih;Eh6F{XAO&Ik( zisLT96~0{_JbSa{b%Uxh*uiy@IkbU{9FU4=O{BEpuD!96S-o8O_o8q=q=w+& ztm?~zx7xW)R4pYAS9Y|doThYvJjGo39d=!Bu%tfTX9qu8+(*ZNt}K6eo=BY`flK%1P5oIFrsbjD{a z`gqk_5=%p}b#tXq3G(5_8Q>w}R3n&!WHKO>?QO*!5J%b)KY_|jCzOH;{vzBXBjSDi z3BDSgHWE1b-9dp2;^gkaUvk?1oeklT5>+#dvXLk<5YBG_1|WM4zUKJ2Ff$-tqOP#W z%H-0vj0|t&OqbXE<_f`TqmF>9%{!C+G<3Fv-?Ksa^6rKKU`V-Gc?IEJsUV_w!#hco z)wC&$n2K(B8x^~v)}(;4>gr>!5k>i-rJ*u)4MKQ4va?Kl#)0=B=szNHJiMH{v9$Hh z;1-xv^zI07Bb{QnUc-2mWot0dxD_pv+NWinHIMk8D9*5_aQ)27_;i-75J6nkNHZJqnQQU8EA%$`9j z2ZG3UG%ay?VSW_=2H-0`lf>E$RfCLLBV2@vPtN<8svn{ zD$i$E)O-h0+6ZPye4UXaHCp4bhVi3{aRfNRit{g|+TT96SxOT0HtAmxW=9-9`+3!X zQ-wEp-+%BkX@jtUh6&EY`*t4ivLVLP&Vh8Lcn$T4Bm8y+dxm5&{&O}%U)!#g=(4Ij z>{OZf7CC?3?1^U^NGL#sZO!e41}uAcI!UBKhKYrBB9qEG21slE;0zI=t!tFloqImTU>+p=$RiZ9A##?)2D_+t>_P#4m==+<5-dF{H>FKi)46st;W;>YxVx zbWN?&szX7i(sU}J>=u>X{$+1>U*D_LzghEgAGNUw45^t6j%!NhQN(c@yA33%@(KDu zD-F73Am_>qN?&MiJlDJyxt_O)(LHu8^H#>&CksdE?0wZ_lJE-Fut3Kr%pn@1L$5Q| z9Jo3NcE0cGTs6`rH90vlx)ji)GU`K6Dgaw$0w--CWutF+`^+j}+_!{iIilTKAnjW{ zrZWkpY0v2ejHd6$$1@d5xu2mjcYo|Ny!hJ`z$!<*J#mYYZoSh*6I1)Vi98Nd-lt_u z{iNmt6?FH)m~q-5B#+#J#``@~6y&nm&W%8xE|*wnJ{M8T1bd9Ma2u@9!J8pvj8)HO z$32Qt=Eh}eSAxCG=3h$LK1nxt8WH-}sc`S4OV>2h9eRPmh-!twb(P^zCgX(9AMPrq zp0ikn5z1+`=0aJUPVK4!jo!J~EeRG}F@{OqUES$Xv!N`Fh3fn+A~Xjpsy!ikg>V|A z0{77^$P<~EPl}}as?1RL$nHNF%JAN;=ZYX>;+RgR%Bx1W-7L~XX<2aD^_o>!%-yig zk%`*`JVcw*vcl9DCJUl1y$P0+*qEP|8ArEVtPxV>BK)u->}Zs>@CUY#cI8wBU$Y{h zCT$=`YaHd|7lL}jAXev7zhkL&%DY9Ho}V8?(a*f?su{3CMV#D-Rt{)RLvK<~M!#cw zyI8EzyjoKIE$}xrKVsiiy!<5xB2Qa&e?5JvyXY`pAJP9!?fvXZ_~dLTA?3Yh{ z+nD;Uvw!vVZl={^@#<>(ecO6)T-UYq+ZMJu_amYx2vm*VI;6MkE)L47_#kntRRT6} zy$UNGkW}VG5NajL`PW#d}w&;D^)kzLo`a&K-LgBmXQ zSaE63VCtW?zr_Tpi&~A4&?xTQYA2uqWQAl}TkpT)UP%Vu4U&fyDVO0NQSumA#k1e+ zpHU%QK|n7yLk$iJgizsYTf!CTy-||m@iZCf?Uv3w)43O-0x(9s?!sh2ZhkIEoZNCzJRxM%I~T6a?VaysMPm z{}o6?p(UyXZx;iG&Mz3eZ5<#o!UMB<=DD0!Y;vRS_coq-D{ERb!y7lal8L(s#t5r} zr?LQxcp`RW){N`%3j~ft2wO~rvKSV-oWsOkbIL9GyQ4R_1Lt;%1pFs>?$+~d?I}Zj z0<+a&fal*tr27JMWRt4{`AgDH`Jh1j^S6f6q_+YekBQu?(mxn!y+gU2IywfXuC2ya z8?l-#OLnb?tectJt8orItVowvQf2lV0V6`IlH#Oh1ju9YjPC5UIUCQ>@>e_aC%^4` zT4(t;9=w(tVF>A+-RP4cK${Nh5B5$q_#5Ouebbyt&FBFf5Kz>QWBmU;75*Ptk8EB3 zL#NcV`H!3Yi-73c;84hDq5*Acq@Y5l%pR`{`65l*nh@p)E{H^JF_$`#oSIe;@a;P{ zeVHgFDXAy-%i6Jni|gj$Ql8N*msf%7V(0eq@!;j-k$=XSh4GCz<~}KjP3y#zg+2wx z`~7OI=d-8BZaJ$2hoWSbQJQ1rLNjcMEM_TU0ep0*mowIABnl=4Ab5(%=?Io__IkXP z#cJ)!+s*k0x3^-HPj^=vkx{k|K{w+UvI-)~Bo3@f;@6`Q`c;?(-pBkBS8?Zmui$lK>!e9~EDLHmbGTu`1{y4!WjWYTm zUPYf|lD?27UkyZSY-|^UjocRwAL>d*F7932(FI8BI_N=?O#y^H5Xzg{g7F)7!ErlLxn zRCx~&D+z*uL0{na6*v{6DrA=ht1NEwRs3~KHL9g*E>Rrz3#TP$=iNCnT7i_eyO*~*A9W;W1UNU`XMA%&dWW`~I7sYjEpWeRl zu*A)|V4#7YgGfg&b%YO)+$p@Ck08q#E1tvn4g7&2Dh-ot&e} zy|X_s%`&E!iZ?veAN5=>N?%Pk4#6LSMiWrGI5@ddC=DY@g9PmflsycckL=twN-cZU zd8nT_AWlT;t&oUOd#KVDz+F9fN|6=SM zn?wP&WZSlF+qP}nwr$%!ZQHhOcb~Rx8}H1_=Xc}&hKkx1J1cV~Lh*W(MiUG*se9(8 zF#Q6@V_L-#4xwSxVsetor%jsc3WVlWZzEi?@BQE-@jT8<18UHe5?1f?8BHnJdNuQu zSKU(e6`PBp2;^qyATgZ^i33M;_jBJkzx^+UlB8*iNJaIagKnOr5kJ|VHRZmaDAGDx z*t85?MNz0R(KD%3nuE@uO z%g129z;enHNGaxKiOgh`>J?BS_8cX{vIX3dijWq+FMjc>sMu74X*dk!FoHD4R#+nQ zQfL5N0IJmsvsydah`v17857yv-A?CqP@x?9=G5Th~gBpsl)9l7W064Drq zeZ|l@DesLFZ^oOE+uudeCaUk>`I|8%X+G=|zDaaQ`kk(WEha|D9%ek{ZX^v}bz_et zDhFA&`yw%B3?c;uVpyQv<1QAXV64-xWpXX;)RwK2y0v25e2A8)161s)?=s6B^Q{~o zsmWygwIf8REVYPT;T#Ac&PVuLOxS3#6_gC1sc=9rFqnnCooOxzBucTsZ!JfX`Js|{ z(`GiRV#t;lv(D8O_xHO&*e{u++mfxNx!$A(!D^MtLM=0xC1*}hs4}HMte~;=Mj#MZ zmE$OyI5e0&Mp3fSg$U_{i=ye+m|vHRQ-j~Zs2GFlRUd>OsZmFzNliQ6?z|nf(CTUE z=hIP8PEm_p6s@Rc>gcEV%c__O{n>)m{Al1fwjxqab%{;qT(LftU1rJEC!{T?Es$L0^atOY-52Y=T%z_kT=1BH#tknk?|EDfDg)t z7HHHzkLn*rp0oyDWPT{irmQG^Zw*qa;dczlB(vG}n(D!`qwI+3wdAz1pTe|D z9J722n6HX8fhyn{*IF-~wkUa)d@hwdsb2tT_8A1onx`Y;ZxOY+rj3p>C--8-VSYU# zUcOzJaF|f#4E#lT4(8p&f@<-cU#L|WRQm^Q7)%L53UF~si25S~!f8=W8JY#c*?h7o zKLJx*sG^KXu|gp?^!Z~|E4L`}D;B9F(x5Xs&2l^XD?xz!jwsTnCX2cWfZUb+S2KNsxlzNW~s$&zy@CuYs5$ z^(B$b140HT#$a=yak;ic^-%;gge;7B1oqEqfeRu|5B?r8=L@!;76))Yq&JA^ri_xb z&Y#$7vMnZ%Mil`Nl|t^?XmOv?l500lgkuNw>xq^EwEZHbaMnR2Tc@UZRRK!(S1->s zn@OWPyO+n)E>2kpyn`XH2(gE|dHW?Nr!x-S4Ih+}e|`12HiAkiNZ9#~G$ffK&T1KGTCx%~{Joyg&$>E0Il0|^Dr^pw zB+(=SH(P?|8#i7jHRKX$sZx|P4_YF5i(O4wRj=;qf9>h*Yt@(9^MUZbEvD&WIBrV;tlA_r(9%-@e z(R1tL2G{BQ+MVqkg>FXG^Z7l2)Qzr2v`G#= zH&L6|M{{Nw|6*_A1PJ0abME7dQ>oMI4<$x{u_yo1B&*%rW`fsVs(15f9AC zeLIP%b*jA`rIi1(ZZ9vT)O!IH>U9#J_lIpmGIVhaJenqwqz z9Q4C`c(BmI`xLOrJ)A`WyQlpZbVj~FBU&bYg?oe#*F zj$Y<~CBp$4zX5D#L!hSV@3zBHlYY$|PUh|YJlf;F8<2{g=I)E`r<&ZVO~j$SCWp8o zm;bc38t=hWSKEv%k2(lAEphNNFwjzINgAiL_1q#eMcx@KNg|Cnz28LcWi*kRSDlba zUFmr>)&Z+0GN!#7#ag`Lh?>j!+ z^c22(75l4I8WC7D2W|8!^;Z}OHLuOpjO|saWel@;*SfRcSF+EyXeaMALDC8Hvkb*8 z_l9a={E4Q`V7_8Dl`sWlnC!5c#%-yakW}f8V#ozTYkr=lKbmtW}v*Sehc9TVN30_2c>T+lrWe218>M~&19Phmi`ce zrmfE}{QoSArv?0b>;E7FX8&A5|Nmw2zsVjuJ6YQOBb&{r%i3eJBlLie`=@hR5LU!p z6|;9x?sd{pE#n7X<3tfbtaj-{j?;CJcC@bK|MoBs#UD>bB@4r&8VDc2?M`=l3eVzA z@BKYqKOeb&KL^sXF4mfvI-N5R^LHrhicPF)3H}=%UT0X5&4Avh1Ko~ztaUC{S6uHL za99e+)@%@hdLpOdEVk!wPhV#j=g%h$@1Lzle)l+~zq7FM{_t^R^X{zGrzs8HVguqL zwmTuEQSbZL@-TlDj6$US`cex6x)Ut!RE7)i6u*{U-mmR3Ajna`5ada1*%$bAv4;6D zE4i&d5R0O-HqmsySnUM@$LtiJK~9rGD1gWvMk#PuXR6TBF8YCZxrfS?RCQ^q|a*sdbA?e&QsTN2@N(A zOOc@x8Qw0Jk>a5k;2i}XmunOOfpZ?}MlaZP1BIHbvL1RzcdzhV8vUpqKD6=v zNs>K-DdSBRE%s~E*io;bJD9UEel_waX9N~?^1(1&fgb;mPqQ4+g)|e#ONSpnf}V(w z)39fGLQ(v?SW0jheE`tu(3d$`todVhDa^_UA6TD(aqw9TabU41-ZKj>M$bb031xQE zCY2j0MznRD_>XywqaZb44O_RWC!2$}HqUsgz2NgTZCD_OWKghQnkyA}B+4erCrXDj zMZC2DwVO)AcTG@ChzjPmYvBhOX@^ahShEmkU8YpK5S!ln7f*IzQdd|&N#!swX>=ea zqK{#L5ojfp@?`r!SX8)v|6&hzuw$&-P=P|o6reAf-%8PsnA6%Eknf{eco{F5YIDx! zm7zi?@|JrH1Llh#d|m0C?N)rI<#2L1B`4 zLMkp)Ji28^El8BLXTv|H%Dsp8-3=}LU6hx*qf=9Nw?+)NH-(jzy)?P%UJ`I=u4-;L z&5;8=u0C#FpO#IIF!PQ_$o8tGB)i^KW&5&+s)YH8h?vrKN|0dm@b}93 zOjlL(CFqu=CMe}woo9`kq71pi%S7awS4wyo(8!>_5wMWwJ93M_o0OL?aJcxo@>Y1w`7b`aL% zE+ZaAe0_Bjqw^_NIl*G6Ni4Et$x32;@!i-cmXbpXRrkp*KGEgi^&;ruc=T7l7wvNa zvTb0CC^oe}_@Rd|JYvT(3$mr+_icR)-|}jqugLa4_58+^MkVFHG4I{tp@fH&OFZ&# zj@f2TeKnT$H-aL@BXC1QWgyc{V+xYFXil(?wk&G*d{>!RXBV)@Yrh)%%&TuNoLJ() zF6SQ=6_erZIry2g_M&^nXK-^Phd%<=PF)A?AyMWuz0?e!y)>aC>S(~MaX3BuiF8IY zV~9AT+g}eu*stH%GHT@*NK*Y5v;lwWm_qj8!AoSxCpO7qJx5<77kLI_8QpX+9_K&P zjjena|EjnB(AfK_P`iyVl#8sB1_>F*YMtI&CU~JWz1SixsIQf?PeZ(x4+?An=j+V`$a{U~ACzUi>X-_qmjSlyrlQENFH{llz9{DS_^oaP>R zr&R_802qe`a`1fstN(7;pelAYu;MqWepmjxW+oN~!aBl4yhyQDq zF=D~giPLM+IAi_eNZ;@1#U`^TOJ=W@ne+4YC_l#E?emW8-DUW{mWbd~18BtR0}?5_ zVg&}gr!|5oj2cB6WT}6dLYi}3AkWs6M1v_3W2{wwgobgGe!52q>6w+982j`M3fk4E z63J4{Mw8~%Z5Ix1%(*p@vx+e#ysZc9g(|j;-mXpnN4l|{JEN~woILqDw8M#U@0mrJ z;$EExfpWRm@&xQYHnIzXXH^oBsJXi_-ab^%4W_2Qm-iedI3eNA z>P-t@MqD}j@d{K#OEoOaS+nTDZRJ_91Y&Y8uP?8?up>&NL9ygNCe7_Q{lA34bCky9 z;WDJw113@83)%~j6bcv)Wyo&W6p~6NZ5kR^{;(fFi1$@GK`1g-qqpy+NV0UsICUt%-CK1? zECS1J{l+9h(SHP(CtO>Q(B*iSGyG4+PhcWBQlzQ(apz2ui0wc4ChYbRTw4KsC3%dB zDe?OKjOVTE57r6Gm(?@Pv8vDM5)IpKr~3iHPN|#gj%ru6cO=((kf`Ja?Cy3wa z1z+0b26>QR$pUCiNRf4*@nceKoW1dxW4}g{C{I(kyx8x39GVwQ_O%2ssJVWmB;B|; z>iDs8WzmW48(NS*FbJd$qMAwFI4L7Q;@zq1v;UAOs>oTHT5#m%#GY_#LYZ_TttZQ@ zTh19w&H7|Ftb05R;7^;S;>z>-v*E|mnMdE#7k%>z(}U(cFe7fEk_F&101Hg+r3Ijw z17MUbgvIP>BT^cwFCDN*13;zbfw~v;sj)}dGPaCtrLsTl&X(c#EOeWQY`ry~%ZZs4 z!NY7}=^k+3!ImuC|4pk%gQW|*rMc&UT~GpC26$wn9yAL93ij*u07$v)#@F#Evhz$^9acymUGC)! z9{I8Y;W!O}Z<%Zn8-hsw^!S93h#2YM$EU45LH@O3!iNnr$Ka)^)xvl0oPB%hUfNDd zkO$WkfCvmQ>JSPsAIV}QB64cuC4^T&rp$IW>|%U+N& z#F=;e(FSh>GWYPOmlF7WqfEeggdSPL9@R@*wS}v1U4dgmJ7lA4hOyIbrwG%hWILs>7mvWfGS4 zya!NFuyg4I3o+>f6IJ~NaMs7P;;J6O=53= z@U{_L5LBdzAR4zOq@9TamRM{WrU~WIg#^w>i&8*(7Z`oqhujhs@gZ*_(Gw0Cy5eO9 z6umPLedpFbMR-vAf=f5?{F3yWlul&#EdFJ5?~6jo6;E)b zmMQteq`W~PdXQndb%YZ(KY)S8q~qzJ5~G@~0T)<;#-2E0!cgm6Z)V7od= z&dsqIc_e#7WmEfxZI*=sV1lx%P#8E8Up;C)MYLD3VV0$Tx~`1#H%K5^H+ToNisSx9 zb<>dD3<#dXy?rJVldKj_zvccpBMHYjHb_3Z?i(nEVnDz^KJ6b6xRcy1AGV{Dly;n| zA1xAT;|B~vk!_3p9ebqkRXus%h$pAJHi|o>ycC8h9iC2Jzp0W*WTMhsOzs~E@1M&f z%JtJ*EJqA$-Q5pjBg2nx5K}HBa6`9Kn+Gs0+y%XiK!Jl*Oq9TFxE#tsgb*=X9~B~S zjvFbW_lkMqM@^jprpIHU1{;V;AmGW7@otuTH+4baXZ;#I86cS}$QM|pYeYd3fR8XF zOM{*p9A!ZUG;jg+H2y8W5GXGtn2!s$+P!|Lwo8-##9A>cOVA{o=kTrBzBXopEA&%i z^u`kn_>F=*!iOzQ%wM{NjT$qpomd+9DvvTOalbz^=y9(D#^3L#S7GagVtyd-%@{ry zw5Dp%s4U9MpyN+kXcS|z7KR@b81>C0wGr!uSwj5S%$)YkQTxKehGY#t z7HS$=DFsXFvSOuVu`?ssKMurzU@EE?n=6Vho4 zh+9-hpj5xUK%7yq)4mUT`qH6CxnuB_e>@uWQ1+vAK;?$5{aJJ5Zg!_db2&&KJRzjf3R*V0Rd18{sa=CizQV9^|4j&!%1fPp?ZdJFa zcaS0=kARv=Z1SGhjs7_*N5~J>9Z^Hw!cttYR6h4hh1D>;&N#CRmpjk+Rt1M|h-FeO z+&Xo|0rgF)AC%grE}&JNt(6KRw8_9QFIe5$Qk&uAL4>q#(0ouxes49=AjdxQW|6^* z2P!{=sh*HjN&@u&Bzp>qxtsNQv>aE^H^~54tq|vPe?upvd{#r3$x(D+uLB(n9nlws z3ZOoon}iAQ4%nRv=4XSheg{a66EhpQv$HGVZoE-=$i%aqx%H@g@87G0u7*{7l`Zz~ zXQy=FfGKH=0}LfXSCXRr7`O$vtzfl4_Z85%Q6=m$TTABs3k5FYJeEoiHldPf)lQ%> zUFlh)`j$`xtp~>^;b^T8I*7+PjWs_MqFhY@@N?aVvAUjU=G~qV2=#7-VX)#wGeQ8` zx+^5pqC=+KPly5zo^z`}78TSx69i-J1%R2~;IEG4GuFB7nF9b*LpDWneYse87}N<{dN0N^;XMgh5MaD);`!eG{(zfCCpZo8!1;9ij8$rt3W`;I z2CS)a;keD6oOEijp6ik&CCWTz(YPFEKS@SJy<9__36gbgZIaAd7|m)ihm9m9l46CK z!QTNsu{awvp-vS}i{K(T2ZEMp8Tez zjX#l%Fo>4ONIas7gb z#sFmZ@PYBzm{_=AP$buh#hv;ETK&RzXi$LmGhD?Q_AZ=$r&|OMlZkhJ9Jk;A2eS-=u z%an;E$)(N0krE*NDaIW6p|L26Yfr#Xz6e=iP1G>LC;=pF9Yb&4wmrp#O1EB^^fX#QnDI;b2(Y|4Tvb7KSV<9YO@xzC&uUAH5zm|~Kh z1#J2f#W&XJ0x*Nti5~r%fy)b{rKQW2HB5%}bf0(%;X4(Mdd*i%c$r#Rx}qoyCVj1P z+QqPcg7v=_=p7jJo}I#($Jfr`W7$K55JlGT!m$5X${NZ4$%J*;R>f*sPLiA|P>j2l zw1C;%3wWxo2lNs?NAN`!{|x<*MaGlc_XSTCHJ{%VjSeF6i!5I3Q&;+0r}ylewT}tj zGez#8@_sGvu+iz}8aj*t?)f%Xl&ExxKm;qK_-pfCmq zVTQ??=!ACz3vy|cqF~_~yg=v-_bMdgp+9NT)WF!I0?3}+HG_8nYR~RhZQeS9#52eg z*Am*J6wPEG*7``i^vA4=f&r5iObLscO_SXdWN6;3$~f&YEL>=KvrRXbC|4`M?*8vV z$z$DKecH1AqXv+~ojUW+Gwy1=DyI!nG;LMsoyb$$8Af%BTI8%Gt?F1gzkO=wmWMj1 zu({AP(EI)44*u@$=l^QCL}jD`v;Xt~ea8Q!5m5dMhFVy<=sOs?=o>jZ(End81--MA zF}!sN{9JUd;zIa371vTw$LCG&AO04niidni#iw8pvS zS<~2qb~!Bc`t>CZJ5v2%3-(M*2Q2`G zE8j;iree?2-Gv8R2luk>!iX;i=1!XIMaL&N7G->X!HUv`hIGCfgu3O9){zYJtZTAO4HPQ44KKTN=sC!o{5sU2; zKD9$rruKB`{D|`v_<0e8)+%z_YJ!abySjNppqecUA}u{Cw!Ym&oGK=ih6(Hs;hUvR ziO${s@G8kF(0)zztHX-q4VK{X?3)bmuN&*W+6~P0+s1@PgfMRh(2nfi&*2zLh z4)c;lm1`XlBvVW&WFdACd3#YXrUcHG^i!g>)DEfc(G=7-MRPXp9>q7f}q+ z@t9(i>X@;2cba?_2~*+p`vVMqMg3ll!hXtRAif-3BBc;6YYxAH0sOJ^ZBiLYfih$gg?Xy zvDQSe49>3$eLD|NLF}A;FX`oTzM(VGPb%F;@l^kZ_*$fUtHk(+ZLI_QPuK0gk>s3g zP5;+vckTQ6KRwWQbB?LM;gPLIiAb2Z$L$&fkWm_e05Abb zu9sK4e&6Zr08xG>3L#BmJ}cR7MaD4UZ|m<-T1Z<-yCQv z6$qXhA@8yrs{r2T#oe$E3fTtIMoA}Z)kNv0j&CM7vq}rMzrrz##S(`O!s`5-+}%83 zxw$ycaB=Z^7q95%f4+;B?Ciy3mIm6VgR56=BFfXlZpRi>RSuB9LFaAwJ$&UKNd%V&%-cXmQJ zgQZ;P8?FpI)K`H9Au&U4JwYBF!N%q8%{dqO5w8g3PhkO)1R3xi-8mx!QwFFn##A-r zmI`rp4DkU4EPJ+2%;ELWNY#Ubqzw$8dEgHBX8jPuCsZRPR+3%(+!l8IBbVIK(cVrb zhQQ(Rc{Gtf4;@v+ERlx8_M&h<;PmH~aQM;a80~6@_~(Z2{qdpig!;u|bxH!&p^=Pn<<~7;+ zGamHJo1F9p`Z+3$NINEie9U&Fr}1#~@!Y`0%f!L!x`Gdz)ak+!$G{0F+Z7E0EsXy1 z;eS0%<6bdWkr3xWO;m(=L8@Kh=eYQDbgfG-MUN=%qc^RKv0 z)f6YeAi*9W0EMd4CJ2M+881mX3WQcE{Hw)KWoklB|3NNJKT@C-_WdTRfaXea4=fi{XD zk-@$d#7h6ox{H?kVrF2b7$c_WD>t&U7FEg%iw=Iy``fNgzoL9OBXqt1!2(&q2HUN3LuK;b;_wJ~X6pEqd+MGuHx!^1Mh*f4mwq|=cf4bpR}@P6;?%k{MoGBMZ) z#WX*ZHkMS=N0Z0#JoGaE=6c`K9so`5wRz5|qOx4wR9$J<(u;Qv%o8HoNcm4a$;G9l z;uebo8yY5g(EtZUu%QCr(S^0zZL2kxT3z?L{fvU{z3mP>-5h)sa~jGcjF-fkh7j=H zV9f#x04#1=TR!p8E#tv50-CnCfh}x$;UtD^`bpnLnyKm1T>#8Jj#R=6hteZ}elpfV zg=t%Os2B>NVwZpjbYWTR7!JP6=O0E6t|e+-jC@PQt(B$FqP^&KUASl> z4EtzkoG?kQszcR*i`9-2i)n$71Yg&@I5)c#5KU#wujh?OCwmqjSn>fLx~Z<|v5K1M zqAt44E*6wM|3G~aF2v%tXc`RNp{a6#skOhfBt?-1 zDq`$}QgONi9D=`6nGimt5-ngiv$~{ePH6<|6?U+#G!z!s?r$s(loX@8w6F^2~|H=OF%l@9}M}E^eK> zef1**EubFsf_vE45M?0Y3E{~+G^HBS2~1gaXl5j#q+vB=3bxm9-Jpw?rh0JY$=X@= zyisf|x{R)OUcXPM1bg=3QHufDNmULB+i}<)`kIZP7^4K7m*=ToA(LEa_fi&cWPfu> z^y{-#Y>S@}xoax(&xt+Tv3ey>)rM?{mEm9J<~o9$A_{6akZIMM6#zZ>1#+(=F2=G5 za>Hv?d!B9Mq;+Jvqm!{L8Kt4{ic zCsor0#1B*9l9V#_LII?HYYbR}8i@Q5AAnr~wfMM-!!V{s<>*gy_$l=3NU6Kd4|`IZ@Zbg1OR^PffgvPNF{*+)rk<^obXc5yAeLo zPZj!PAzvBCK{^2itse$t$ zbn{RV>-ZQXsxP&%c)K+V@crt(Uamhz20vP^lc@?Wu!#dd?5z%tQ1W>y&Q*C7ttlDL z7V|YXq@ZTb=*tT=`)UN8E$6Q?RnRhBzcUTfz+`h%P3N22f5vO|xn+0Czg|!?b+uzY z?6vfOW?D&00`U_4yR=!K+my4)xDT zJtw?! zhT15hvzA7kZt;De`}`ghmu*Pe8KjsIHOFr$I3$r>vRlGz#|vB6;@ZjD%@4^L=%{lq z;PiHa$B;MqFl(io=Eyp18+$oHgoi?oRF0kb10LqsdZ8<~jCL+5q+oVa&HAw9j$- z4A%4S+a-SO@v3?QMCog_f_f5`)MN;mu4Z0!5p*1gLmBj7h#A6yYYs5Z>I6>%0XZ}a zdfH_y=!p}@GC&MF$oYqesT9W20N0~JP}{0A4jA7s%q{brfjS2VDY0P9?@7o9^~3_p z0J1k5JhdPtWaN=(XI&6VV|=StBZQPqYaQbv%>J+{h!*)V*+ zY$tVEwTxLzj#cz3IC(mgkqo$CxbRp8S<*TRT-}mHbhTTCs&%)Clf>z;agLFW<2vbG zT;S&w8+!%vBRCBt3|gEAwcrqcU?ZNdPj814R%%G1i3sG;woSs64D;D;Y$23vS_4iE z%%6|sLp8k_bq@jvHU2Ys{oeGkwCBBQ?N$H;Hh!%3m0y$rMI|{Ta@IK8NH2^*%~~Ou zljjf;%$xO&R@ng@$)ziPrD;%cM~FU&E3 z*sOjb*07EA$q&Hq{yDedy0|;zMF^Ml<5Ht95RNz!;x*N_4cxNHi)~Q zjmE|;8z(&`NMJ#ly=-)u-slB+5>^aO{T+J5h5_WPL2@%s)L>9NQ+ZLB`b~s>U6nz^ z%nuA!?-wVZz1;YGWY!hQ$WKQdhFzM96wG75njR6)Xnh|UBhtbK|H#ljyC~tkpBW;P zLRo`tZ2V$%J)OIZOQnKg+EEG5zrC`P`-LFW<-itFQ60#bSs}MKrzL%SwpZMN{McaT z=LGoI6$rOu<)fB}HQbast_2trFE$wn^<05*S)(#|Rmdj8s2Jn*)tkTbV|U;(x@oB? zm#kEY(v~b%(zq8U%37s0id$pLZ28zT*?k}`o}G@AcsmU)ml}o;z_CASf!8{c7Iaqr z0Vj+yD)5HT*nrq5=gp)*vBqi4eAqeo2b9|arK5-oLn zOZu=%R|_8$m4){v7fkN7=m3>1v^^S_&DF4K!~i&XZG;qY^!w;FQk+1-yl^Xk+;~XX zOc?fn04KfHs8*M%0ji==K@HZDWE$xc6m2OF%C$D8(JF zn-th<_%~?|jC}S8A;c7*)MVEWb+2(KM(79YjJp0KnRS6jO#f|UTAi9j$>`io`6J}f zroS84x*I3`S(q#$J=(@;ai@;u+c7fVZ>hmo4?R;9QQ*CBDnG4#%P;`{SkR)$fOb$F z)I+Z&$r}_+D20%IjFxaZpe}2YE~K$~0VNMSZ{Ii^R0Q^*8_NO^kr9(CK}}97Z0IRJ z`wvg~{w{7-_9;a6G~dp>{tf<(Eyg9yyvy9xo!?W@OFMBMkEd`rQ-e6>jeBq2HeMyYawO&*)oh%oF*lW1N^`)z{duGlu=-my2+;{Tm%b{{7fh- zkO0sRRcRJ2dam+-KG@K8eGy13NgRQ}3fo#kP~JwY`l(Ss-_c8+YrdZEQa)?Ry4`Qw z@W<#M>@m^vwR&vof1W>~FUw$`@vkHO+fV}FE6K096ch(GcL7Yafj`B@K^|uLSMu*+ z_b4cq%0WfXpV=dz7ovtAc^lSC&9{*Q&;L|=$!m#p)ti8;@57NPlb+K^0jT_(blq!L z_S`dLStMQ^9DLZTJ-$}qt4V*6=g6q>2M`3QHV&H(2B6vd%c;ORN?*p(y$;j4V-E;1 zz&H+}c_M-?!oPrXKf>-`VvnkuhVboM4Eqe391#A|>w4b5&7;%mW7J3J_+1|VE?xX* zC90{Zp%r-M$5ruHrT7&i`o_k-W|JejH-ZPdi{x0)C5izcftO4|;r6G2k(8PD-zl@R&{zl)1tPliLHZ*OU@mePZ<2@lq+?5L+R&SYJCX&d6PU<>!{F2)X)NasO~W5 zwlR((n4%QlG5yL1e3i!m^q1WO{#O)o@^NgByxgn>H9OWF7-ZS_X^sWxv%?eQ{mkrZeVd%1#aCVbDz3_X z+4@;PcNJdEzpAtIemfiaQTvIm4IE;N0HI9X0^*@6H)~a|z?Y9vP`S+$bhQR|`IH5W z=x)vw*&mpNF_NFDpv|Dkg6R|AttQ?vCB#B2nzk`-$una{+6$U(11BoKj2OChzKp^b zF)h?cIOrJ~cQRc}mO@<)EzS$Pp@k4o4OT{f)HAG;vPRvIA+vHgJZX{hQHcV-+6t3Z zyJT$@Q$z`>NC?anpBJh8xKldusmN7sFq0~wJoExzT2~K{l&93*FM$BjnU+O? z&3!=56Rt10aXYE-r6Hxl06{z+AG$8No$rQHDrSd`hKIV}X4jYhX3swgcSKjGC-}Fz zPa-UskTKdX2(f&L*MT}lbNOx=F`qWb<_}u@F$TAh^(G4Wpy$_`mVzks%m*NXw1hyp zi1u1l<$;7D;WxdO?wy!>W*QTE=tI>Jk+tWY&yOA*Q^o5dp*mayA$TgRP#)g(14#&v zxTtf>)uZwWk^5)j6@V>&Wfa6x4=7Qg0kSCWtd(GVSuKMgdPCDL^X!?t}Y(#yO5aD{jZw6GdibkrseJbFnc^Fe~KNevvYD@ z^&(I+)}w(tU`JTm3-W(CK%RqJHTN5I@2v=1a{C` z+*H+=2iKUlROWF3NGFGfv=OHQvBvjv_}$Mb{#IrgT4#^N_|_kkrjN()UQ!&7E&O^w zS7b+#qRextgnnB9JKt1&*aBjW)!T6e?A{vT#kNycDVqcH+Hh479OwBupe0 z?7#)V7QWa&Lo5(f0ZCwTm8d||&=MQYiv>>LAjMSInnQUt*NPz#u9zLb9?^zrMe_Ff`n(+T^ zYknzDfap=tu|EiZW%wb1lUf<53%Xo)4=yHsHSuwkq5m97Tg%&08?$w4+=No^W3KWA zvzCmmNbBPHX@raa!bxK^NQ-_TGn6c0haHeT#h?cB26?lVIrZm5av2A`n8?;AO)NJL zvNjs!z80S>#7KlkCbTP4EL5Xlcd~iW@J^p6H}~VhyNIh&lGsD0Ji8)v1Lzn8(JmA7k{B0eCE8L{b;=w;jqjBcLQr^G*n_8~Qt=NsHli{bX&-ngsGA!}D{J>sv0)~1 zHDaT8=&MM@57MAqJCLki3l;Cx3M_%UOy;NHbLwt~cao=q#NNt}p;T)`r@)lJ{myW+ z|LHCy8RPwCIAM;74X6zk1p~us(RO$ML87sBUL*@}Zbg5YfhjhQLp)D6F1K2C+B`3S zSe?0beQoeAu9o-vhEb~JWWADC`r#LwoCUPzqijon*~k-^XFF#juhAYQFG)W1(nhnd z7HLS8%#>okn$-MteHG%x$-}+EuL@tX`#n-PEurR%UWZ1}d-4APb;FzAeB$;xUIMtQehPqkRBuzJ&Y+=!BbE{FGs<0<7 zFZe2!uuOV32IOd%qsBHZ4P}BbsNllmvqvCeHZ9~2F3AN}i}r@^$$%e9^ENMRr3Hr0E9%*)gPA=7w~QFU50jwcs06MWvwGVg>%CZxsJ^-5!w78HtfNKF{2e{ytmfzzr4`->eq z>Js)jywNq&>@J#(!p>%oQLuFk+@*lS2Js&a>mO_>q+-vz{{;KuSBS==e~;CBN(KA$ zPtV`rqQ~!{q3E>Oo1uD&&DS)pK*b$>DcKx439=B~0}Ce*qN^S{gXms3?$p>5C%0KjpeCZN!>Ku4~3Jdw!SvDV~7?~7swMf zRKOy_ZS8s2-c0M0R5$r(`0>!?>@tx&oav&%rV>&$_=GYi?L8K`kzMtZsojgb%RlOA z@G#bYibtH^N${XK=RkeST_^mCO$1iRWhW^ztbZE?qtF|xj-TnrZd&^Ja(w?B?UG`8 zc*6DOh5k7kP=+ zP>=)B&{T+pn~J3{-Y3FO6q1!MITe*LoW~uPLx@|7e4C#Joj;%icaMua! z0U?Qc;Htl0K@_F38(QH(Ib2S6`V!|RpzUw2A&CR@<|NhHAm3JiMk}px2;JO_(?G4V z6@SwDS@74KsWUVH>aYIk?&zeJ)L@m_$lfeYxJa4De4B?GVRK0UIjz-_rtnsvh$rh} zj)s}wP0xplO9eP$=*dLCDaKN8+vVLSNmh#uu|R_x)MTj4H`$@SVf2yqb_WCfRc0AMScgVU9c%+vNKVIwJ%~f7W>sFfXjYS4{cileZy(n4m zRrlG$o?2Yy&DOx4O?{wlU+9^NI(Ql@m_dk&pIl9@ zar16`qE{_H-c-)%)y)W1sxOkE`IbGO-sANMW9DS~jyh-v<4tIL77J*VeQ=BY)MuJ) z+1$JcL^2jl9qAExIY0;6wMk|}SESDnom;O|EMpBh#%#69A4$gbDKf4)mu8m=e1v;{ za_>VbyfhXmYJCK=3?vPHl$m%iG$L3tLFxw_?Y}>YN+qP|U$F^-dJGO1x-m&d_y6*R`UjJd$ zvoPlvy(yE7_Q-lH)QzPrBtb8-qYVN_{#$*VV1ex<>gTjWYP+N^vA_FCf438$@SH2* zb*Xwo1%_Pv+(UezoPZ{iQ@{@4;yXqrin%N~r9Q8b?SH2&XBwL_@Xfq*?m^pWaj{66 zv7;PfhH#AKrhT0UMGyJpdWD$kxv*cUS1UkTtiy|fz}fmY^{G?0$8RpwT!X0=sd*Ku z@VsS8F*=OHWHIT;E)WfBVgD}B_$v%#hil0~KqHq2MzjPJ*W{XBGN_81$hl21ftK3! z!L6k@SJ}CXCUZsFNt=ag11cpSU(};gz3iPzz{1HDCuzX!&~>v>Uf4izY8+-O|)m)I4(fzScSz~g8_%L z&dy-unTxO)c*us1GuFGj22ASr=frFM!wUaW z@+-tv=vz--xk1kt$EDIa-9>f zTIv%BhK+0dl1<;@H3aEd!(ISmmgvLc1Np66iL|V2jjp<(=c-LerBpju^@lT`tlFZC z>U646FW5Wx{OSe~7vj}Nw+gUm7~&h3S%9d5Ww>d#8I?1A@uC7HXed;dB+In}B z?;p2cmI~dKh|r~Iu5aaIdZLGc;P#4v;p zh7$qBL4>=uO<&}8HUeqibne+qdGrt$Q&dNx^o<5GZ54V5s^D=f$MWwt;=m?u`f&@o zus?0<=D*k0=g;#bWW}gtF%P}XN>m?fk{Iiq3Dc55VlOUZ@Lapwe@1>91=VQyoD*a8 z@70pI3K-l41?8SK1vKtiv+{vys$$B?ioQ3$N8LP}w*~=T)e_tKx@3_C&DL5or-jdc@ zdQEpmk`Si4VpW^5>lQnVxozz_c4F7P463_Z)+dB?524x+X?2@%fRnH0?>y#nLurZP zsUb;$+0%|lTfql{qd`yPzp~t+v$0fAhQ2mK>M$1!MbFK^b5xtSL4-#dmySpOVUj8S zGv|TDAv6)j>PQfz&%rC64H0Hu(hk=3D@;T%^-AZ7J7w8NpobYxsB8@ARWKU#+>9vf zMDN~Sw5Qzsn*E2g-%4#FF$H^m?^qY^sK7Vy4DKFalD1+W-%Ye3yRLQ;$mbc?RQBQ2`xkdPXS}Q=tCt4XTFVd}&{#Hli%>d# z8r&Eor%3Ozk9~(BE7e@0oCbSy*dM8uJRUBm8YbJdHfF>Nq}|habHKVzqTSx<*_mKH}gK?%Bf#J<-(}t1#SNk(nM6Af)e&!M89#`>A_$vAod4mDn zZ0=*foq&G$gdLa-c5H^D#j(%qAdh}de4`p~A4m9!iBGOpb$m@dpZ&sIWNIpYiKUlV zm0HF&Wv3;ghsRsiHiO@|Oe0Y^wK|-j@5GdkwxY3dtsVK~2g{To(-$}J!Zd3l*9z}t zA|nST?&nJ(qkQ@Y3<^Ec?+GQ1X$QBk_%8p>;#?|B@P+!%h9u|R2OUlrk*)R=ZzQo^ ze-c|~4t1oAtSXl{>=G$8pek|FG=7JX%C$c#X;Q^0oty0~dEyR6u}C6j57QX+%8un} zo_f)cQ3MfBKag8EE~~7(*dEY^7$Pxm--=naDWZl$xjz9tur!%ao+70eo#ht6f%7=IOK+_WM+!0c>L`=!N>BB zKvBeNN|RTjSDA*IDHCGs7b1=}9)@AQt<_S!TuO_Jh4KW~*X%I(8NQbf>T=HL))$j$Aotj>FnthQH zr2>MH0^SysT9=hC424JPN9)DI6s@sF+IG=k7i0x{0_YSr#gQW^y z+0gE$UZQZv7d!RftjHy&n29jB(#gId-q9{bXg&d17Gqb!WS!W4 zUMb~0c~Lzx$C~jF81TqdUPNw$JO2f;*dZMAoJC02e#yLqjMOY zCmH^Ny2(GZo3t+w@vvsxYUr64Fy)r2i zIb96*$_8Pc6ZrLh&3}Ga3dOFB)6$MeqPl%zET5p7GjxQAW~KGI^@l$`?^`j= zCczA{zx8_l1V29%U8UWnSp=8l(UpfqCOMrBd^-A(LA(JvWzF-p@TR?(&5z`a&Y@N_ zyRXP{!SQ2@!ToRPkB$sReg(`Hgrauvx3aBM-^b<61hYoS)VKF}t-Nv~M^N=tKMp&C zZEP7kLl3~m?*2)Jc?1@0g6tSm8fOXBA&WCAfY<7f#&?9bb@M=!fyeEhL5Vr)w4cLO zi3{Gsq_fBw`vkHbf+J5{AnS&T%Y^AWPtg?i#ABtUx86FHHGyqdk9!UbHQl7J+v7BX z1^_Aw_p9X(?29P}_K5p%pB%Hw;Y>5zL>o8QkRQS>FNTK}b9QVG(mc~w+#nL{W44eI z1ALlA{6V<95mkojiDKs9GCfI|Zxiy2qWCbX#| zX}7Ebgj}R$AV@MXsnn6ZkCm=NssT-zIMB+iiHii9=QKk2)qV3*6}0>0$X&M0+2ExU z<0{?T1`TLoL6eYKqmB`6Yw=0Pi=Wp*xX8BjYfL(;xE$VfB1dOT*3`=vMLcHyGFJXp zEU`@{uA6DKVD6CX(EMDHRElIaaHMHxh3n;Gytd;ep=(BS%rI0naQSgA@|XD4ASErz z^rWI9W!jp*YzvB-&Lvc`F2RD1GpQMTBxN=G(CWK!AEvOa?rH+^m(#60l2aeLL7HC# zrgxJvAs!p#g6lPJ3LH&I+3e}vMX5^hM5umy3Pfj%M zK6x!vHecdQ+;HS zI|W%0$|%nE7YM}v^er4}QS^A$O1i;%I*Y*Ig0-Gq67o>|>R|*!V>PiWf{g@yUhod& z)pBrubV&t%>ixGbZ`gN6!Aa!)CzE+VHkE57aQW9s96NsJ|o{XNk$63wP0qySSavGWf4 zpKPqB$Sqpo6{4c7NE`}M#Q~mlT#|wZ=#TD(PhTUEJ_Hl^M9C7KYvwR9`!LSBRja#J zF2ba~fiXWm|Gtc?E8bC}8Vh)PCzNqhTP=TO9#6S>h$~V+tIcxkA@`t+htnxEd~1Q} z8Z+hxM1961vr|``&qsCL9c6{?IeSTs%YUs=Ubq=G&gxr@9&uW8i;|mr;QZ!O^`6b4 zs9ve~_xgEovPaPe@WL%BS+tix2Nu9(I64kH{ShRjqub^8%hIhz?Go;qW2@B|u6iDr zXpQF8w+f{=;zTN^yohvHXouuu0-zi`Olm#Xv!`{H#{Wl@Y)U2Fa>8IPKl*m-uwkTT zy1XSCcx|IrUkxxAoFfwwe6)( z+!K-LiKGZE)rwj6%lIY#dD*|KSHR>Y&;|f zO_UGDawZxAGy2=a`@V1yt_>r9(eHbrMRWnd%Ysn9X_#Xlx)<=uDh-o(@UKn_`onh^ zW1#{6r;T@95fQkM8cc8Zrt0aJ*z6@-*n?Q^kVif64%-RMu`6oH2oa+j*KxopW5G{V zacv(4633Dv85|E-@oo!NdNFTzd4j;^!AGmxNTA*gXws-9f?Xu&F3~XM4?47BQ0Pfs zX$sQ07499#Nt`3)UlI{#POb-4Nb2BB_=_?7SVSjeCD^%_+;L(b2Ga+$n|6yK$sIg& z2oF4M4AYS4S=>@M30s|+aIi9xDJ0L13FPwA^l!X{P3vg>&Tub~q8K_@k<@4+?Ss+( zzVq8Bm~BbN`&Qj`zCyu1BYadHe?yC_b-i}O3( z9|_SMig@Mj0Q<)2p;b(!P*S1@JwJxOZ*NzI^F8f|)I&1gR@qo0h$OC<Xi^|y5bG5DL*#4v5+FVikAs(fM(zvNt`QQ_gdN*5K}L9;5AVuO1EyXtdWy{f{0O3Pr(b2XD3G9rrPcvpw(@yg49`8s*Lo zkkiXwL5vkWsZpZ}iF2HwFvp=V7%8Z^-)-4sO%@PQ;x`QBG41uyc#+fszx|cey#S#_ z8&M$!Hw1?pX z9f@B=^vv$GGXqdy*+(j9AZN~hd6q$>v%zdD+;1AGY?A2iS zOLC}U2UeL-^mFYH`CU^a8}yM#!@wl0_)>E$$V?cjMb3Z`#d_HR4_?z8vqLVHat;{9 zf4xLXIa0l-V>WrmL1YcH8BrOk4@25yyhHKoyrC$Dl{cIqH#ZLW5c}tP{yuzX1|81} z-$x|^SFudsOP2J^JC?2Id)2IITA+Q_r-Z61J*fk#wIRbp_C%5?=&5K=5E$^0>m^R) zQ6R2o2Y#&Q`h}%BLO=L@e$O8(PSI{djI+jMUdrSW`Ahs){1vDiZfs6{7EN?GQLr8x znqnJa;Lp4AYJ_R5$B&g; zV=Pjxk}FF6T0wUUCskX~!ie>Ho^yfcGKAtEN9RktUo8tFh11-T@=fAp{8}iiQ6)7I znB z-=F8tDGf_i%94m_`Q)`HjdsZ&MNr91h)>e0UsI;s?R_`!_G6~50>aTmZ}Z^F4WeKP z5><{pE18mq_hK7|1oR{NlUh7OV z4z+_oHOehlWOyGK)AsiH3gq8vaQ)YP^!&~Cw=%V!n9Ga3fdjJmoHAJoi2 zUOc9sj2`3n24V+xuQiGcv@CkPvxy!%Np*V9Y`~n!V4o+7BfOYG49U3N4L_ z1Aq~Xf>T2Q;|>3lYSA3GqUHyOjg$AAPp>tUwgKV3YKuO`DDAjE6vo*Wdr0i4C?~=>^cUN~M`o|rjqG|+ zoYR=7RtwXpv=sQuhs%)(qs9f}{u1a0XfFuEa4g9JZTi+#8gNyx8(3c|8CEJcmYjWa z#-as^3p+>!#ONEXnKIR%Fs)dVP$?8DGMV2gdnyV-cfTp}qTdI=0>7-~+{<=f0W%(g zjjc1{+X0g;sf5@B1tk3T1@;5i+hkbsEBL*Kb2a=^!AA51KB+HY$uo!BZJo5u4OSH8 zv#V_q-kK%ebwwU{1pgN8&Fc3Jj}6FxBZ+__rpekFe(%ziP$04{M_Ze?uiAsyDI+N) z)+;4QH7V6`kV<_9>u9q|m6pZcP}4l!UOM~iOP*RI(%K;eU!bL zIsv75<(d8$($f03JH8I&Co&5oEQZM~psrLRW`550>`8Q(-ycXf#0DjaY6`=zQ;CU{ zOSTN@%d~$XUTRREEH$b;uo`b+3yxuE{PYnaGz7QKqGZDK8dhms87Mwzw@6sF%PNrl zV<~YBK(F({e$*015&BDnXSjz!q)sbyudS5W!T*qw07*fvqMRfKwFblN-b5Loo4$nj zg@UdIlrNmK=KYgZAoaZhJyr#aC9KS-<14OMVsvR3b8UwBW#MJeLlTx4#RdIED9beb!E?F@o`I4jOwJ~D*}fjQ zDqAwYb$JBN(#8TwGgUsJ7?J|8pvyZg0}t(IVZ za`aW(g#UEmdByzzT|v?z9_*bc{fXZq3o>4L=ZX95LrrO_KZb?uOY%3xCmdh<_CJk4zRGbcV5L#1LSU98uFBEt6Tn%zfArk)P{Q|oO$!q(TSvBb zyFtW^PH_TVC9TyDrl4!xXLambDPGp+xe)*n+9?z@n3sXXKQbjxv$aGSBkc~}QQ#?8 zf~(_e%vN?b+Sj$S*v-+spG&4?#5{#WfRe3sM6jq6Xsw{!7K9>4kkVd?+N)%n{m}vb zpr+Iwr{B6BbGQ+_v}I*D@X>z{WS{bR{+_K9VK?Ch6D)@@EPxH|DgUmD=YT#lo13S> zFftZTNrY)~KKHM5aGq#H&;Da`XB~HR?<+z3V%^-STW^mwgucVCO?OaeI(rk&Z`uhU z8SyKS-b|&*^f&F(syu)y?080@4D8s5$8-AkUSy*dZO`U4lL?I3s5|!8)XT=NS9XJU zIab~8qxulsBX0r~$<-lF&-jaTAxN%OSjMfx%&)i1<^|=SMa>rht4Z(bObV?Jf>e*q z6hq>on&v_A0sfsV-Uey~SaeS`CmmAONYH3qKdR7x?;NxHMgOX5^E5s5OLx){&Rw@( zVUV9@e+S`-pLUPj+;qB$Zs64UqWY2&#XJRpmGVhG(G`ozzpB)&N@UFooHdB~7)2}Sw>dF&sA5_e7Jm$)JQ^AU zCX2Dvja8Y6_-<*HZ)^-mcv02g!0kc4{BOu&Qd4KY(xAQb_UaBxqh`g6X8=;38(#YL z3Xmf{H+HK(r^)hPIRAqal=q$;)`S59dL#JX4(tDy?y|e1k+a=@mXK>c8;32)q`m*R zuV)K{4aegTBpdsyaZQf6WcRgnIBB^%9hrg!qLcqLiM>e4B(i7x`@El$OYqfsqqVlN zgCpe{tN&YmZTL*)TvD91fUoY3AO3Ox%Y6bsE9&*I7bA2_>zzJ$O+EV1GL zC?)6s4GtrKhgy7d;-5>T8s5Rch^J%=kSn?4l&=QUDh!>O^NU9Wyl=)g(&irSF=DRB zwVK)*4fBC5UlZa}1O$2^ifi4(8cHr1<;3-L1BCa(L+SSshABlZWJe#Qus!+xlEKgz z_j^u1dk80&GQV~a#Q!;*3e^d~_`)3@emz{A(KYtdj^9nZBopL))%Q@v`3Ta+kT{rf zGHh|&vIR?XGTOg!yKFqAp3R9;jNjLujShY7%7DBLBY+}`dJ29}N{T=gqe$rFA10=Q zbU_tK0M+D1+NPZhw3F?MB;&4k-gjbhQDIvdLvjP7>1H^ZMdixL_ zbu#QQ!Mg?TfQi{h`--Uc>3~!KEVy19b~3srev2w&e(>i6tOzQdlUWrN_Mh*mXfSK+4k*W&f;UOh=HI z;al)Hn2;|`w=@g_C88*npE%;j?!JA}zRDTH)X{PmFz&2zhLhYbEF|U$W4IO29Z3Vp zU?JzPjS6Tnt>O}FGnu-iN=B1Yf*BCx0DM5^5fTa6mcw;xh(57E=z<|DFnmQQ6#d7l z-Hab6^ydc^Kf%X8H+BL>bNoI%X_C0ibw5(bazl z(#Xeq@47JSEK7o*&b$0{Orreu9t+_ZR_k{)8~lwA-U2`ZE}g25)*A8UIG%wixm^7% z{YoPZngP!u%1@IZCG%iO|I8PWAS8={m5;+T-sPgODqWB8Bl zVh?FNN%SDL%iBMR$ov6p(j7$Y_ab<{9KC$~TwDUTI_$#@7A1~4{v4s#F1Y(S|ER&C z9`T{ks+CRnP1p6M;bPoQ@c)`>XD+Kg1PSlpRWW=k(EJ4KfP8=NyYSB#O@#4YuJ&P#|&P$NlWgzQxk zINQ!>T4fH}tco^SsYQx>tMvLWT4fa!t)2oIdhWs5Xc;g3fH z>8Yi|h967|2y`2LkFB1gM;6tJ&O#>0_S#1dwl=NRAVLd&>~Ma#FgRo`?pB-m&T%E= z!E90m90+YD69qQ}ao|SRRnvhWT^1QJ{+4O+g+LXjz!b1xP}vB+3`@ zf_5Yae?tm45d>^N{6nf4$bge=#1~rlV|6hj%BxzH1g>nNs10vsc(e;1Ah8c;52kfj zus%Qx*L%Dek)~cas#CC@{L*8=H){dK8y0sYs{QiqiTo~y4eNs$j^rC={;(_~GHg)M zP#7zw{+Ezpm?Cl!*>3oP_J!h(s;K3m-cWVFDM*OwCWtWbzJxHm0Zj?wQ)yd3E-jV4t(G{<7r?62KZX;nzwZYlUlM)h;eF#7$^3yn#T?;+ z3#|uff{4{{bVsa9`%oZ(T-WQiA&>!G8@jQf%YHhbVR~uonzZN6?{w(vOUJ={>fxxy zhkSlGxcL0z^?Ls%j2kbU&^NDQ?m_s+>yMvbmAPxIKK|6~>AP4pcA84$HEZh_K|DQ% zkxrdp+rS%g>*e}Cw5Z$;OxG5L0o0+oyTk%VGw2V6Q6|I8!oOS}Jl$8V3<50-UH@Gm zgMAxlTBWz=-$QEY1*pIcn1u{2o=ksdMI)nbUVd73dfxQ9XylY{KMr?NLq`P|%Yv&+ z2<{y<05xaTQ^~UsegKvg7KMMrK|p^X>z#Lm;(uUw!-987@0I$U_S9Uu;ju6)O2V25 zY2?I<#HrYo8L4(W15(=a^|hEeXwCqhpL)#Fp-8*GXVJlO<`UI zp<|zyv-c|#Ugh1yfgy~a z@7L9rQ}P~rp3QeV$pp~L420#hDc5p%1ccmcw{0j4eRhJ5?Y1(h^YNqIm`;c1!FDq=S0sSTKVn#_yDn7wV=BR2qm)uW>R>tPU`{R0e z_F+?on>+`z&GXK}Il9>j7@N%2gwXWEfTEMOA#LeRX3`CE2h)%k&xh^GGeedKAOVe6nKyqP}t?4{7ceILs z3csM}yBZ*(GZd9SSBg31Q9~KgmFpa^-MLW<;t@ig&)y#aNC~WxT{y4-G;~zByH-UX z$O8D(v(^=@*bzJvt4sW@KIH_INq485v2kVUJs2$wLMb|GFLmUPR^Y2q+n`BlRBhJQ z#Hw;dV8FDg+i`y?lr((*q|Od=<{gUi&Tu+o4)KGhQB=`J+CRci(7v5A@wKZguw z@gC&?)I+C~Szhcv8n25){MDOQ_iVeNgVi4Al$e{Hp3KjYRPD`1H8p44dx4ew{cjJKD+@ON%9toT&BpdK=b2l;txVKYtDl-gS2-y zWl0$rfsFg*hdGb00tQ;L<{*drA{2_B)@6J~I)5vbM|~bxBw{s!cNd2+GFrC)9)=pN zuoMe!vO?gskh|2SB~|k0uK0>xR#St^GVRYN)PQj?kc-}%&2}l!8t&W1h%r*{xyB?+NrBI>u zOB74>l|khX(}l0mv?T{Y&QF)dsDlP(D`;@wMO<@I>=+alGWS~@hyJQ?Cowq|U>)g= zqsAR8&3)T>%0K;Qc-yObo(rgLIXE}zp21P2hdBnlM~~6CvvUPv)B7qyU75EI{I-wM+VJ=VsWrg z2x|x8C61HFKFzeyA0j-1Lik~vyFm|kMLzXjKi~GYrX|Y2Pi=4I4G0u4r(3nNJg@>* zEsViGh>4-j!qMLq<5y9hRHvQaWWWSj#NXs>W4Yv$Mr6#ZRY;Bf9UY7rZe7h2Bb0*w zRKW>v4Lv7ynBwSo2&N7yb!n_Tfu7A`3K!`!VP@x47%Jy{XC6Dd4nb4%RcAF$Oy8{y zTbnuzbm@&$?^vC9Dp#9dpC$!TZA!hzUB-0qwNr8Hie(){>a}OONOjyc|K7 z*jnK1)tZ~Xc`i$1|MGpE&cPJozcpOhuSJZqayKy*W>YS!5qI_kQi(uP-c0`xz=_jB zV^lU#k9a2X>ok$kGsV5DyQgX~*<3}rGgD=vCU_Ayk%1&1gcot3B*!dvs)-W>_ETE+ zG{9*G_^Sja`9hf=aAllG7`h5pI>MLXl2V7;=B2#g;7a?h1i~7^p zB9!3mfgNe$l1)(Jdg3m3z5<2G8?v7N40a75HY_WQ_-gT@WY#tEOmT)Ru=XC2YSI)s z$~IV}jb<47yZJQ4LcpB)$T{iYj#0U_wcH!a)3AnaXxKD9+PqH#cN&q`^Hccw!@kW+ zPj@>JE1+{N?(7iO^VIDKwDk_ruh0ip+>yil`5cTp_mmP&7M5oJ@_`+u3-fe+;>nC&`CUr{Gb(ypU zRzvjh{@ZOyf&r4#(4WVE6oSdo*4#+fcCkFfv1?hIB!QGCKnF?e3%~$HdZ^6B`xu#2 zQ`2fl9;UsMPuLqf&z;x|Og+KX93lfftPmKITY!zX95mPl$yIxoNEp31)<002hPuSc zojl$)nzkNkF8C}!^|yMs7X_dh`uO(4DATuP2$cX!3+sY#9;cOw8sVUqKTI@gwz$<7 z(C+DKb+%NW;TSGm~b=UZgqv(D2c)P&?BHi(`^sO@q zN!rq>RoANd>lQGEHc%e`6as~^mf9~GxlykiM}nL!>=Y7ZRHbC+~AYQFkzr&w-tqH2y@UWYRy6c8}`{hP&as#_}{0fY4E0)T5FI zq=UIH%Y*2CD$KZ~8)Epa#YmQF>8UVuo{`F(cADwosMtkzscmyAjboihxLAQr?^;~U z+&H$kfgR4;fK}kGk{Jn9ls;ypmw%Pm6WQtWt9@l$qw(`BPFBmXJezM%KjcbB4z_=h6qYn5G;!DZvwnkNg-Q&%n zoVrD%DKPND0n?8R3tv=Sg+NOho(`cUY9I$cxAGKS8Uv@WT(4P6&4CT4CB|_hAz2tWL`j}AyM^-%;aLm_ zbzic?Xiy42ao`v6W8TrcL6dNM!fvY2L0}Q+hH^otjE;;_sV&3w@Hkmuu+A^k><=%I z)4MO&d_)f;C|&@@hF;G_C}s*VhBO?=2}x0d21k5kZlo3`HS#IHo*g8@ONKwpQrhw+S@Ci$M=Ow18tC*I^9lC{stMw25ZEUa~%q5leVmrL5n zqFo{t(>d754m@~Z4Q|R9y;t)%_MH8tuHh3piPM&<_UUG5TJnsZtvK>hq=!4esYP98QjrVl7xe*`Nkipy-8ZtnRT_};DG3t+$ z6ITzHY-F|)MYD?mYC@xvoLR|JGS!9^oUp(DdkGSMc1sabt9-(i3=71&qPZxL-I+D2h?frX@oW~C zK_89ed;%wX53bk?BeVv7VUin{_UPQjxoPYhUxi1>L8@DFrk_~!$KN&T=6is$s&!-A zDcCotVOkKj$1wyL0h1F+rpUT9>-3e0R$?0(+UKB1zVKC+PJBf14>}XJ%a~%tVk2Qs z(y`ES^v$09-#7to_y5#^2uWeF7&v}|jbDtZ%~G-f5UQy%1qjv5OZC?w1Z*u%dd$z; zzRM7Jl4!GW6wSlM0+F=&q0TeAD?V4Txs7T@9Ts3qFWIRr92vN#GrwLhEB?;1y|yCU+*yI ztI5rW#P-3Nh~eBZso_u=-SxFrXFdKytH5#jiZM>L&h(vg3n|ytE9?HTZ)q{cOD_U5 z`OoR95vn$$+;k0gt#FXtAAL1LWI=~}pv|asDN|J*p@aGAd1lF4>};O`R9&Pft)yHS z1dK*qP)5YvnPGBUJ?|NT+)ft9<%r;p2Mfu8%%mt?`GMD;u}Mv<#s?c$oSyzKC)J8U zwuOGJ`le*Hq$+si@~A7;cji~NF3%q(X^D?i5jD}BTk|BRn!3nLy0*Thpp6Kh{%(~j z=84B^PWYPKbP1Iv!y0PRUwv56YGksFnYQM~=Lp>=qv>eFT!%@y+y$WqfIM=>H5#1@ zLO~0?ZI3<$3jHM@fXblu&wo67?q%SB5%YbNReQfFjSC%9JsE^Vt-HcA%|lS@B8_5j&oc;lj1OURiWn>uIG`K1GA>7A@@fW|gmgItP2H3|Aa%3wIF_ zXJn;ivBLHK_?BRUo9%A;%=EH@B;__euF*KA3jgU9!6}y7*E)ndgVwHx+Fg~%(eU%b_QK=gRj#hA zf&I|0{zh_p9E@7dFk2MoB5RuUb(YZ-a%V(E(iAd(+Ei{e3XXjHc-dvnVu#vPk)mp+ zEEzQc00ipD%()-TY}1PUFE2yyamZUv@KefXMKX?DW8&gl^kN5k{##sQo~e;w4;8-q z!=}&G`Uuuha2>*kfS`1R?k|XsV zc6TLhy#hJ+%mrL4#QApZ--b$>4adJ&7PXaC?Cx-9CxZjMb_LVj>|?1LZ8A~?(0;tA zJfysHzt&Q>US#?a<>$@kM8xD9uFY!@Jp&@_p&V4pmRE+eRpU9{L&t$x!!Vg{R?M^! zh~28<l^S zV!yG*K)z?HP~%lj_TZBPiS=gJ;|#(B{3YMvys99?&@kA`(``y;1pqlC}Deb1Q3 zWrqZ=hzJ8^MYql?l3dn2{SWDzbJzBEeXCq`R)t@hTjhHKAsv@v8-v!kygpL{6=fI2 zq1t7Rccja-gGEwNWav`l%E0mea$oiO6WoEv@0xm69?!no>1CXk9AGNUsa5zT17>Rl zxcU^^D?i#vVTu2N!$&_O$0{@EVn6*kdj?ZmZ?;A_S*>+)uc{_6h9@-dUU={6$hW<+ zgPciq;pYKmgh;D2pE2wZ)H#zq#Epn$8$jD=Wp(e8Co%uh*VSbmHV}pT0h01~eoHz=U>jDbl+YJN|D*G)SO?9~yO_6TG< zPe~qfp8~m?UWx}~#LLApWh3t{&Ghg#{=#oAl;=+%SZxQ^xTbERt*mWN>Ov8qrvs8b zT-AX^$_i~{&xDGo%Qa8s=oc+b*CWPZn_l^d%l!o_Jq9U2JWQ<)MDe`W9~E02dj91f z;c(@s9-z}`6EFTN*4~altW6Aoqgqj$_vLmtu;|gKp8}23QjTGVY&h;(v2b-pUz9wW zn{Ak(^Bm0d2~j`$7yTz{pB$X2A3fKnVpA|FRLSoQlb{EHle}EjfOFle>{Xql zE#-N^y;m{0klkiq+dMt;clz}}rHwcOZJ%ha%`*Y&!z*OcH32%Me67%N-OB1w;#}9Z zj|UQ;Jf`kAO#qei8emyE&ax^qC#xHcgFEM(2`B`tXwwx-WQJ?5+jr3*z7J^iQy*-v z_fg;1)uFuAlXrp03`rKr*j)7ZedpRnnWGecet&xENv*0Xg&17Kz~1leL(B%=Q6JkHsoKu1lo$# z@?kM{p!E=rd@A1JY&^ypr-(ngYGY7!XYiykeWL{cGya8E0`r`$qIIR5ZBb7JB})h^ zJD(k@+VwOh0uAcwLA4t5h4}?PGxUqgk}~-f<4<%d-@|-*(%hz)FrUDkwBBlom4j=S zfu)tTcx6B9j*4jhp%io#o7o4aHF+Y5xwnF~v9W7=jIm*@t{i6}+b*g&d4U{*JY8R2 zl+VMSUeFbsonbnscp`o3CkB;-w=aI=#2HO3_Z>vbwviI{{FJ}ghXYr@EC~~{KEdGa zwCGf~9Hr-FxtQYEb%cd!3~yChohcFf*2+WiYljcP{nNU?GgUE?ZB7%!VZtj0Wo$z2 zArI53-M}?3GIEE+4z2SwYlGFL$G2=}B7p-pBppH1x%KAe1sL>G0$EbWXYR%8*0*>5 zGGB0Aug5FY_du+AtHWilxZV^4l4F%D)O;*(w2IQYVa=AP;1VS{abSuk=73R~WR+}? zSx1*_klj_H=G-)I9>wE_qXI|e*oaXqhb&QcuZmKwAwht}aMFH-#Gs{dJb2j|ZsrO9 zFo2`VnfeyHdI#H=Ed!q`*SoENuppBy@#(@$2KR_Pr2}&cb!k4P_7J$ceT5wtjlT>M zKfQAl1_&7l_z={my(})+*!S>p7NSOJ`j7O*1>|K%1&>-x{_QpEa$FtF3hhRdVrHsq zrfN{|1z_V$7Ebw)l`0zpW4R0u&37ZvwkR36Mh1DC-MLE)9W9pH5OG&~r4yF8&IXby zABIgClWJ|i8qQ@6=S~Tn>Qgg$T;x|2qU)+XCuk0W9ZCEisBS+SHXIl&%jr@xJC};P zYpBFJqiVN0^+{hjS||OWwf6MlV$B&+_w%D(@l*RXT;YAc6mj!YaJh=QKS-nA8&30! z3V;L)TBvwnK%!$r$u&;9J){GBxTZ_e$R05c9thQTM4C@$lVZ<$%#SY@aN zh2@r^bL(!^qEq;&{S>9svrPA8tNhy-a%G(3my~KR!x@T%hPC4Df@FPxqitwYq@fh| zmL6N`Za=WSre@_KP`t8B%H&yZI!Wu|PMNFQDj#OeR@wA0Id^Xe9K5HN^Z!UYhcHc; zHOPKt+qP}nwr$&8)n(hZZL7<+ZQI8D_nG}{CYQO()r*W1!2r_`_-0KjETreHk6lhS zqex?Ohe<5)EwPTNX0~gV9**-{9#T+0U(bV_S~ttpCBXOW#eFx%VcAxu1(GC#I!Au2 z3MVtXXSR!e5+=s6A!H0M2CKJ4VIU(%b1}9lP+H1cpz^ktg%?hxdQ`7K_aA~9wcUt# zDg;gcBWm91NcKL!{R&-n5V{oRe)?3bBX0&_n0xzr7TkS(i2Kf;GgXxIcr-*9Nw-AsXn%b!+{X4v{`x{fZsu|H$r{Qn83q8I zC%lAyWLgNr=mdf|IE||(jAs9*m!=Xcjbk01V}g^9A^bLlQM3kKdSn_wI*ONuRsLpe9c#yUP71pAHS>^@B!9eDL7Ggj$3i#a z3qjhB4#4chT5`)<^qTMJq&&mMAM9NYRmO?Ly~jG5`NnVZ?7*`Nj9Pr9A4elR48uwg zOXYOdl;$*|IQuE46xpR8QVt@8=VixEg6dm1on`VjVz4@@f zo%DPPX1KU!WIKc=qhHtSdwVFM%bXX38w=Ix6FiRT1g><7W_HW*V893U`jdtZ%~k!|MrcHCEYC0 z1;soS7FeCUbaO77tU8K(}F|JJ}^B?X#rrj(C(j~O*_=S&_^S;NK1^r5(fA=;@@~qv96oLX*_u6NSGTd zoo0BAUvx7<2Bc=_D=_l=zPbK+!|rHL7+QZh{Lhxq4q@0Rv3ShBxwT6XZ_eZG1L;gq zi<77M@oGJnGl9()Iq%WzFJ6i>Y2i(-ENbd#+)uXoeWz40W-(YJyB1t`|5bOzqT4d| zkH;lmyDsbGjiL7ubn9Uw9PCpJM5-2XT74SD=;ysL zq``zPaU=DvKd$Z%Cr@vK5p|h=#T#duq8_^|Bnm5mMu)vJLtO6ZXaA|0qAH2I13{Xp z1(Y^OXLbO)n^H|Cv`6;_czra1eC6sx7Sl}#>(6%u)YU=7pIB}{_T+7JzAl6C_>Z+#!9_2YU( zzXiQ(OTym&NvSP?40S^KI0|q+DEFjl&9#fz^}~33(6yDDnvB9Qw(+J}g4r`7g9ksu zNm!bgODe{wFC$Km%?kmpjyA=S9T4JlAQ7!kszJ2i^#U9K zISY%vvnusv_JJk{UJYL`pS5xm4u=i{1=K*N0(mdk1=+V5?o%-r3a_7g$-jZw4=M=X zo>`;iBv}Y}*U=i7w6~Pn7E&%VSDABp*IqzTC6|2j6JJV1C}H!~+jQX+AHZ@X9*O`nFz9?PRotO)4zECQQfEW7wKwFgu`O`P5e8^$Qp$l5GIq!u6?Op1e1X;pNJ-jh zKSL#r!;@j4&XD>~7Zn`%e^ieA&B%&O3;XU$)!9^Km}Gc@(CV^|(|XP|YPbm-+uNaV zsY0z+AWN)@BC?X~8)YT3lHbbTiMX*QP;?TsDiG?BMi9NfV>5B?ZbCq3s@tzA(`(zJ zKkBP(rbLCT_sSbxfifs4${2O5@WNA(-F1AaN))h2CMe~i4yBpaplcBo?jP@bO4z}u!ZO)xi7~6D~ zyo`?B$7bv;o>U)8^P~0Q-+mE~Fbo4A@wOcLbw{vsW6l$B>&)X*977{J!@+?ksunQz z*iJJ+N-IP+`nbe!{C^FdVj72!^I~_RJv?4sJi*fJQ_B1BDGmsnFQti5n;Fu(l9B2o zElKFH;%8i5WKk6;Eg-H8XD=y17z}nW2U0D?q}3DFGF-nG@1YpgcTxXS{)_eP&vU7M zluf^2!Q5?q8v*_c5X(_OSe|$-2n2h47>8^Em(8 z5uKljwP|En(4F2qNhDz$pYF0FXKwV0x6Gy;8>|BwRT(XDK&{a5B~__?`S232x2A|& z+mA}@lp!)-^}z;lv6#iXhzI8w91*>Grde0W9Mh+4H7o4}H3J)2;0l+^L9Jxj{U@u^ zfwsYafHWUDJ7%aTPMQSe-&zF2JZF@$eueMN4i~%c@sKI~bAU zC5AkEoly94wt7W7bmU;snWUh(N3|$!3ey}piA}zclU}JC9m@bMn)Rl%Wt6c%v8ZND z`HXlu3GP}d;bv#-96L6>6^`{=xEMSdg|+u_Wml;OmOpTSx5fm%^*&-gBwazvKn1oM z=5CwP8r)FwRJu{i-~0sgu_J!6i*kZs$P-E1N?=~aYjo5WoiecI)S#sM@=#&A*8_2` zdStwGyK?_{V?{MBd$rPxK&*hK9ad?wg{Nx1VjdM5++^VuGzk`O4x z8&Y(@t>Yhd6gIccMd)-zt}*xvB>in(cTMh(YcW-7LHN|}+NxWfHLMGQ#|B^M8AYNv z;t}RGto>y$IqHc9frHJil*A)EzRV8Q;B9rY502d>dAiJL4c01msw&7zF(%%yvR{ZW z7?m#wt->wA&_2^Sfe*S@g=m#+X$K6i4^m)1)W8mHJU>y|OZ)AUcigiudsS0eQ7PAo zLV--m+urpZIqR6-3ip-cz1#hq@5vZvOQ?rOuA19{j<0ky=ojA)mr zvL_r`CnQ7^7${7foNHLFKK+RE1+aK_mHg`wtWa^xH zIE3|EBg+iT0(jr~{DeA-Ua1Swapil#?M^iyS!-gv5g)zC8)SfK^D%$IbbpN$=cwR; z_g|_XmEeFIXcYfZ@2SKQvwr*$su{RtdqcgjP*Gn(*E8$`EEcS7HR})H^{N4U?LhH`ou2R58zuOX^0C zVW*%g#zl*+*ZC2;&3o}aUu#ipnKvy5@pEdyOL0SbeGOiQnFQ&DfzN%00X1^(@00-g++Ldu=7kW)fSFpw#H z5so%5fX1>7L}t2fOnkJLV(A%d7<}^@MsU3w(FH&@1CsU8buDG}wMPag?8N3Ft{cC-_18uyAw* zyo$JCwk~{WSGMUR%MY6t^2GVS!>X11mq=Y0xfRDBUb-l!y+@!0Bw>@0kmpsabx>Ce zp>8K+ynFql!vbULt>`)lP|QH?JQ&FvuU<$!Vxl3!`tVu}nkLWee!_Ly>pdW`s(1czo^-*x6Zt zKL8nMqs{*#{G?;C=!UikkNn#Hn*92(r749_hyPDL-`{1s>8CTi7G&3|Qa8h}ywO8V z9#L1jvo6Hx4fn8euS~Yf7QcaNT#V~7Z-!cz*E$Bm%*k~5@WLkUw#m^`d2V>4wiVoG z&YrL4o6^_%;s_#?Egpko&7J)`gm7J5ymwN?uR#_#G|H|r26_Q#Ch|etleg}r5q4Kx zR#smvvD3*jX1(359EsMxeK|q+Y)r)u{?Hq)j%{j+9M$&4XvkdEQ+a2v&7^%d1&=OI zi&tf~%fw?m3yHME#=-T~jt8<`Fj6l~^Yo{3978uV`zkQE1a>YmG?ZPF?iiUCq}yyv-9V*D%;E&kGBZJJJC7SicS7R5x>YiM6(F(?Yp zuuEzJqwp0D{5M%h83ukMGqTOK{PjF9`rw!Udir!7=q1JW_zYSji@OgIwtGqzSe7Op zl>4e`s5~1+Xe_z)obbUyN|(9b@>E7?DcIRjlqfrnPc!`&a?C;6JgX33$?zl6G&JPt zig9 zZydP0Xp+7pUPs#R#<`7JeLjr>KCtcOKstMREPt)8b|w#v9vgSd4A<4@TW=#f8Ii8- z0zQ@}fS+p}kFqG%;O#Si{f0j1LnJd#&*0B2clGDDT9&;{=E&roc-vn&gzF~w`zG)0 znVuSk$2#=r-n?bR>PsAN1Svfy@#%pR^UV4Fo_r8vw^;M1#104Paq>GYYM0XSGqf|& zjAt5|Zs+Be4)v|;4~|2i^FYJf?W_hSI_o{pt(O5jE6uY6ThH%`J?)a$%0@Utsw%Q^ zDGgoGN!@2Ag3?T%Ld6&Dw<)MUJ=%XT8k%^@bDk46mqpQT9eHA#<#Po4cokP;3FGQ7 zAmq{cjo^Ip!+cBp*cHzAvB+49lej?>wJZ%Gc^yr2XK%diGQ!>P$OyDFkSB+ zlHQLg2`BC@-uXfrAE+}Gd_SUOxqtUvH280rMg=_6UtkA>7-%F-9YeT)R7Dj$``0?w zP73d97X<`i>7UzfjyV>Dw^Ofv!vuf9{TSLjnL$IR1ZEE+$?kwr2l>@px@q za7Gh$^^SiTjis3h0}zW{5^02!qlksFEFy!Ys3R`uL$q(;{rTwKS3ma#V;?r_2p+c} zq^O*ZD{tZ}HMerk|2rP9SCgj(eq^~(gGGny<2#@0v15Z>j0wk_L#I#n0+Y9qo-MV( zo_rbI$hS8`O4{QGr0}cCx?_$x=2ESZW>B+(4Qn#ULWeR+W6J2O%*^#Ojh&Gym|AAW zBtebz#bZ&l$!1t(G)lubRH<4-wL!!))|l>TgL}4A4}{%`YFzB`J9+p%oZvpY1Ua_^ z1U-wh=i6UTSH`z^y*)`}{9fR!VaxKKz^d0UG%}CRP!{6gDqQ2uk zN1I#%{-w*G$r@6TqIySg^|eeD~zwy)(4 zvUmb_lfj$c^85Ttzx^FkfTKF1W3+>&aL*Y=!gI`Kpii=-3$kR~-TZZOCwfT8SE*TK z)-Msf5k2FK7wr?cHmdBfOf>tI5B#4$)S@R9M1;jikuPA|c zqXZ+*+K{PefuenNL8eY}q6%SSc>xN>SvVC@Llf7oKpBe+@aYf80CZLPfm+?z{PGyX z*TzXe)9%Bjl^q_$?jB;O7|hjkl*_FB`fb10or#l&DfnoElO+hyj9D^#Lfl=q*mNO%#5Jj&_n144JE44 z8#RomrpN=~3+oK_n6BpF>8DWC)0}Kii(Qvt;F~=^$d>TD2gj#xaXiI{j#KKM9P63b zo>QeyGa{k{Bt*zTrkdu55fTu^-Ek+{dK?_WGBDihVA3ikByW^3O+zMBn42PTjFJa3 zh$LG@lP^>G3^G{SJ3xAbiv8iuJGukwD1}C;rH#Wi1L5tE0mW4Lk$zW^8cD0W@?D|( zKxaaJOUwonc{UlqLU0Z0 z4JqKy0!rAt5FBD2d?-J(G|fPSK}b0@&;g(WzzRjfS%d?1;5gxq?gbgb1cyu_ZYqM* zeoX8SrOQL;23v-1ky|QeIQ@L+vv+PBJRE*jVs-!O{aNV98{?To;ViP1Y^4VqI_W&> z1r~;iiZngM;e@ThRKLnFr3am!38?b@MwsCLKTwyd?qxTX{?UKMit1iBfV2I zLu8FSABLd`iu+G)29pXxGHfXud$PByn_WnTzW~sO@P&@yEMu7|i#hF6zJz>Mg8yY^ zNGMiP1aoXxX(<%GLzjeER4ktWh=PN8V@;A$k8>IOlHUv(aX7W8e`tT&05<@H@HoTa zAOy3o+s==LU2?IZIJrdFYDM<^hU@|HSB4=Bv0=~um3SE$+=lPe;SxS)9HG&FW42Za zSdkdUjC~<(yXu!>$#iK48R=W}6e9O8HJ*IUhP>~gX49nTo-!Qjgp9yW(zK3*lZuxi zsFXA_76J)+I>7Is(scD%BAhGicANkoN`S*(V^Bni1CU{siGar(7O~iFKp-82sq8Qy zA3j0LBlo0Q-F;}$!9k*2(Ic0<4HWY?N+ML%2m4#2v*e4tL{pH>a|nwHIeH0Qd?34x z8`B*H$pJ%T@^*t6y7`w9$)d>xacHt#I1NA?Bn+-`gcsj0-AL;J8MbhMx5DCdKX`EU zWn3=tWj*h)MN0U*zjOa?d(rKt3M%ln6lP2~BajPO?-C|Kv8Us72UtK7O$e95Sa`=2 zabxHO5yb5KhWi283(W~ejLlab;-_2 z2v4fkFr5Ucw|xU0Q`ss&fvobE$VqK~l#3Csi(dc&eq6XRALV!Q*hSY@be@ri0C_}q z{Up|>AT3T3LEXKzzkigl*lunb3`ex?mi`u$A=meh$}J+G72zN0!J6i0U4M>QWP%#eeueCL zz|UL7Pt{d|MDKu$2;^>nY6$v7lLg$E;g^*l>?I8%z-#ax`2<6Smh|)@_S`szGX9B4 zvy?bIHU`@n!}A=-T?I)l0_r+A8oX~P$RDt9XEvC6oq5?&h`9wyY>QwRy?18V7@{K7 zS|;n~V36;xVV_lqMTaQ!<3D$ASdyRT>l!Lr{wx9jxfmTGhUV|eWO^ zFoUZk(zA#FUOcS^qXW0Wf&_b6ZcItYsmUVc8-R8k3N7VR1g-ul04@5-Zx6qLK3hMf zz4A+~>dT&f12U3eJ!w$WnSh|&H7qJ;S3QpPQPKA33UP*dKOX<{lkWnx${`(+3cy|r zb#zK23H%RzezbCVCTnEtMcOPR&CA^q93i(F@b=_ztVQ%A!9+yuXegEgvn< zX*J7o2zedDau@HKGP|yb$C2!@^~VdY^+apr=W>Q7kc%G;1qlKF5|#j2I^RWG4_v_d zcM<|X5cU(I)+AYX-v1<{V+lPuvm5xsZS&xNXrHaZ>lMpgEve*UPJf?2of#Sq{ZrVk ze*y4_oU>4T*-^s2jTbsT(qx0^TSTPtW5X!~$Xaz1;*mkjQp#{5YYWAw7FrB_G9Lwb z#mJQ&3wIo#Mmya9Q6MS#_J7nQx{xJnBJ|pYwA~EmBgwXUsKpp?jQ99~QmWO?B` zG95URjb9ochc42b;vd4;rkab`X255z5BxkHZaQ z^e#Jkc%Qlstc1-jctnRaH_a`7JAl|zl(>bbhV@rFHbLfU1+MtOQ&X%9nca@$*(#c*6k|L8~XbC6i1>GND6)qZL#?8?trK9G>AU!1d3)f9aLS4PM z?iiU7clwju#ZQ}5f`KZ=BGbIs`}D>X0gV^I;D4vZxwkB+){9^tx7dRH)SeA7{4K9o zD?jVZwD&l`wN1aBwn&8Y zH$DvG9sFDZSp-!L=S2)Q(dugSgfVD(Qei`0Lg zRl9g&l}hO64X&(d^ibvI+5iaNYfjLb#O|0$rt+E$Zc(G(Bw z#9GE>=Pa~l>2wbH=cZu<8;TrFD8;iWK_J)Uzy&$o=Emtx8t%%}P~EB3TTx372z7oI zwcILsRBjU}Z==4SAYLUU)yzx9L<88`rCyTMEZ2Vs+|MeGh(7?QXmb~M|ckfk4d zn6`-xu=EnCj&lY`kqniN_I1zT?i$Z+IXK;^*`BFT{0H^0yPsahk}^65{Pp?qyqDNG zcy!A&3k-X`$jIf^m_84}xmh8J0CX~%-TJLHOlLSCkE1taz5=Aulky{f?!pEu12)>j zPu3vIb8tcLqRzrjFY>*Cqasdl@t^BSEC@wE-d)BOTMop(HGSo2WDG~_f|sfyuaCM^ zWNE8rGMyCzGfRE;U^It%bWoZb76$9P+$+BI+n?F~yF*d~DHEAlF!W@e!Aov}{j}!N zbEknC@=U3h)2Op29iS9Z6H}4W;bfkfSB^2m2#l~mJWW>fGPVdkfqHs7^X54tY{%s< zs(vjO5OSrldm)}|t|5iX8uxupo6^@HWwo=A6xGYU)Xk}y{mM{;sfl6hPaLPS@c5VU zwz4;X$N$)>Xa}2@OWE$D^Q}SJr zZ}@be<1M4kDOD6E7Lq`9I<@46<6^aJYerA>%>Geo7%vhr%LdWwYD+kVz~U*{Bm_m3 zK_YM+nFr+*PfPhrIGB3F{3c9!cp;BGEn^%taN4HL7^N3{i z;b{m>AB_mT?bjE~$!TI~KAI(NN0-xg#cJ3z!Kh z<(dLXAHy|DEG}(hK)VapBX0!eFUXKrloangsrT8^;j+FaZNi=%i)p%@U!h!TtD45Z zn=jC-AEumOVbFsTTu+<9Uj?P?4iuesp$E;VS={m+2kNic%L zFaa+pny0MR`vXLtI2c94B0J51hSdzaO6;a_j!9T}#CFpnl9%3lUh{m2%{Ok$xhQ zEd1*GUk^El%4Pb!=M|4JzF#*g$lvZehr)iu0UVhc13F?!Q&W=-tXrf~0Z_XOSq)wU z0IruK(Z478wTyt64c?=Utn3p56?Z}P5lV*qCMR&^3#*RhD_$Z;lAeJvOOSmxo5O-95tO*q7be z`^3Xx#bp3k=p%gn=gpty4F(^syG}hgjsP=Dh;^;a_ozRkn6n4xfQ-4qR zmet@_p?K6SC_@J*OiDLVuxf6Ogbj#Gm*;8sEJ;ZVXc8IbajJltTg?IXKxES0)RB-y zqyaA;k6!9fAhapEsukKc8_Du3^!MAEAENp2`fn|0-Wzxl>$dA)R=BtD-}mdIy2TSv zF}xIO2jfu(nI48p6b(WXcMEILs#&q9@Fv1YQO68Ns*nroUqKgH1K(B(B?pJp$X@Qh z4wmkjCSfghhliAW2vlJWqAA?IvZ_#3{G)LE>u#>4HdF3$CQ^!K5sMdx+HigYG=t}z z8i<&LGC97;rw4J44)^P<;v+TeJ8s29XbX1qgB^$duL9QvrF#peo;2*G_RzoBl=u*H z)Ve{}qQm9=H)-EVPaU`HX%^MTCfchDzlQ^Ye!_O1@qQoeMxqG*| zH}>~Vwg`u3R{(R89N0=<2$Y>vf9Fa}uSvuo+_w2-3<>2sdkXqyGjwb8R8=JdJw@bF zi&JJwB7O_LlIY=Cb0d>$VQ+6VTx zwi%Ifzdo_zW3P;^*W}V;G;g%NwM3XTMPjPz9aIWG^L1-UBXnxl)bt&tCq{yV6U5Dg zfCRA9V~G099cw|498AP*;_-`tuH6!&4m|=NLXp*V!GG}z*x6&9&2-{;`NAX~h0i1< z^p-=AgoQEr!pWQBbAuOn-%zp0ZE8*=z+0~;=(zJ!U0t1Zj_0G)r6SsI9$uL%*-@mH zmScktv~8AH4*R-&@3H}=7)JzYm}SCn^}3#8VF_b*SiNJ|%HO z21IrL3Jz(-tj_E6C+}M;2V7rJ<~Fcn8HXWnFxJwrn@>tqF*e=c#^?xP*$9`di;~vp zb?;z`WSw>BtmvpO5lcw|dLj;_Cv-s;bP7=UeDi^ERovE55Soj1$e*N;mw}J2vN#Pu z29m-&e7Uoe%0k~5^usyy7lvNXyJW})nsb>#cGm`%zAawz!L$YHYvN z^lnq1ane-Gt9;#9DaVOALJh=xlAJVSwi9-4LC<$mTX`y^VA4$_-uN7d&05#sJu!&n z`oBvGfU7J!k9m~FE+iosqE^1Esd00}Jq?TdhmS`1rN4os5N|*qpCF|#0VTJ4_{bOGg8@LeqFZ)E@_EISS zZ-{f18li=nA_Kpt1HorlBX;4fo&0Zy8+oZ2F1TIQhD5y|caQ3PvDTSN^!-?D`wntC z7s`wG)}J7Q<ttZ?>um^Q3whx`w$gOZU^Ep=FfRbZ8 zOa=GlpPP=QYP#0nr8Lcb1FqgSAURJqm)^qI%*0->d}hr`q#ex;B#OZJwEhgoS|<41 zW`>T6X3xu&$k!GchN#`o7!kz71RiAv6&=q3uT@XPVyqNY>;Zz=RkH&Z&_;0CC6X%Ke-vk5d zv#+K8!#_V6gzU!^Du?7qa2A2`b~Fv!7&flvU3mI?rP4WyHrQ=RQ?EWI&sJcO+*wvW z?8)3sXGL&8+7ugnm={O>@}nG5{&`PctWfwVX&MAj7jn})HQ2m!r zr7Sib9rnKwOjie!jeUj7ZlxLTzovn&2)#-lF(}=5$=!QAw}@WnmP>aE5_iYC&T3Qb zmqQYT6sAAfW1mR#*(kD>toY$%KN#k8+VX8|Dz9LbJxY~t(MLiw&B!+jyF*Z*zO3vC zvhe>f$?+iveHS^SKUf@_xS?;MCs-}M{A5>9lB`lcal@_+E||4k^Ho>r!M>+7nX4xz4 z^FwIvLLu8;V2SMK%KF&)a+(ploSR&LPAih)$o6AKfr$i{zO zFK@goNrB8ARNP39{Y$&b%67MlaNG2I4e8vs|DD6p+k4k(C5}829$AeJf@xokjB~@G zPewP~D#**P9cMllMVAHj={U2W>@Y_TdLlUj&Gx`|L5hgq1(xXEJtcgGste`99c!En z^IJS}nn`7w3*kbc&uW4HXFb$8c=!{K1eMUS1L8tLP#$JK^0zheoA;=2@QEGN!`p+c zBLHRlMPfVar^L(Gj|1x!q6aD4jUUX|>V!4!=#`VnU|V+XRSiga_`la_?eX~|?xn3; zdU^=-wu_<{ViMr~^9lI%!4cI@AI!iJ3Y55^#d)~jI(1>kdM+LO zR93bhGS5cZ!=0g{(tawm$^|PRj2u2hi+h+LDFW|!oy73m>oa+0jV=N+iH4U8 zq}W^$*1+VI;+*b@CTrUA-ouhU{NQ+8{Kx#hx^>AvvM;c@Om?w{^eh}jQs)ZcXZCJ15UU|G4sXwL2sfJ85$?O zD_ZUSYtPwx3AdBD7dOAmxh93^xdt=cSTO$@V zE7*7(m?NTDGtdBN!mPk@8uA|H7%&Iy4`7wcVikjHI6v>lZ&U|a4f~N*3_-E z1?{*BOF^kvJCY^VQ#!oY$ec>;tU9l5C2$2At*O2GYjPQ^!o>iSGJOAGrr*? zd>1hY43|BkDQzsIYd=YDClS&Zm<8|wL=6lfIc7$gq1S-#Y!ED`NfY5^x?~yf#-6>; zau>a=vFG3AuI%m*2;PUF4&=FK(>c7?TX1*9(!b{jwh)nEKlomj(aHIH8uh>}{15Or z3?Th`20u`P)R0g!f@k)L!2zceM~TCR7e<<*=TV_pP8FoNdce7zub1U_y)f_ek;x@U^>?U_s#F+4u6$y6sEhJY#<9 z8$fRE?o22I{dngh`Zq8i`&VuGIRxsXjtQbbpyv$+g<)gUZ>IgHAX8tTAii&A zd(PjCpC%#E2;L0gjc_Sa|ERftVbdpE{b(mvwBH#F+Ps=OFAw_IHh}+YbrLU)zAWep zE%yL4NR^fz*mk9ZPxW}EvIS1Bz%LqyGDXH43emvMe>OdfiI+v9(#ey_mMhfzHgk?d z9@D6P;pD*)(cVm>+iILbOBbD&d;Hqm?ij=3`@)%o(=UwnU?m-Eg)|t{NvKq3NU$3e z<%B{|PH71#6;~aM4f8H+sZ9I#3QQJpk18^!F2VfsXpFj4=E2d~BP1%3xE5ni4_N3GFkOspC&^KQ=E@bkJax+M)HfO%&5E)ggtE%^{EAn`i+V>#aW=gznsK^2K4 zpq>tb@@%m|RuzriUi^5TfH&sZT@#!;V2jXDfT?REj3O+orLY81?yeyyCSUP53OJny zE!`TuB69YSGqMF*dJafd=c~?kK7`N7ugJyBEia9Rt6*>W4||5;E1rdUha_LyvmW9zw8a~{>R0|d_S{qBtBbXT*^w=B4`p8Q1VL-(pDe%1Pu7QTeE`vH2s3NPlYW!7a6ucHSN`s7Y zi~IV#=>_52Nj8_eYH0b>-=;#pb9m^_D3Onm@EAQBWxK?nX(IoR=(smU>=SlsgAK6sgCAMVcvbX1kP9RdZ@GxE-jk7aYWC zj?+Gkr0-`8&#CV3Qqwmyj{Bx1IaTXoZdhY%MSnjO4lv%i&|_qBdYqsEzzya8Kr89? z{dX5R52sIny6Xz%} z)l5a0zv0+&RX~9%7jdo2D-FmO_QI*@G_8}W*Z(pc6gw**#$z~2iXwO4oLLb#sb;`T z`|F5J`bX^Z){7TNkJE7^laOLSGw55Ua-yJvM_U(`fY=*rS2i3>J$ZN;LimQk;Gaqy z=HP51b<;(aQ>!}-nB0N+=+>Hg(-NMrrRY;*0_9`QXG0_)?U7cSrs1~GjcF!c`#9)A zJ)xP)f1fh#)lKkL2#r#-P0s86HD92^Gq7tNVf-j~$mr7!sS*GX?9(`n!oEBIPJ8D&dLIhhVO&+Qx-v9wnEW%Z&mbR4zn8cD;m zEV2snDc0eN8CLU1LWEj@LEX5*GA99io{Li;B@xtYE=Ca=yDHZI@s z;wqV-GPH9l8?(M1isn0+UIF=OqpwPq9})uSNWix8Q;5abV^P6D;l&ikCv78>^0;{? zgor5%FyD3=2azQ7yS4XWkc3FAtcV}fY(dZ?z+2bL@0d!bE%fG=osDq9~=+_T#${6|PFGt@V#SNv(HJ7KjbV_XJw|6q;WxzUoHqF)~J zpuhrHTou${+bSsW<5V)zivQ1~+Az+#Js3V+!4ZHPzYHO6Tu>)zpGai@gz^GZ}J{+ zq9-J|9rzq1W+zpjq!K~JqEPtslPPRZOlBr>s-{s|HEQv*{hUcb!+B}oNri4vlpzw> zW1oxC^HKwpO?|akshI13ZCGS*vs9kQA>4CaAfLJP)M)sU>9D0ZfiK3Fcrd%+*|aub zx!K!!@ym!xGrUM$QoTcMvyC)ubON%K*(T^VaCf|_k*ZLW*~QGPS#j;-l#XF%&n8Z+ zd(hKrKxeafkuXyvwJ%VprodfhzOsDO9X2FVqwdL@?YMIe-S$3m zvK}+N@xq2n+#?~q@&&y$_`s-~rk>=E^ah%3kAmj5ymaM7eTBb<>ne~Nm6g|9l8C!n z2V3Fn5{FMg)2JbjZd>wGDH?^QvqtIf5i_`P9gId|tZMZ0t|kX<>1KR(w$9?O`!(^% z4avn_7~;*fP-sg8x|3RTA|&4DbJb!J|rdJC3l|HagYDUQ{5CbEhZl)wf< zrnHFppAzfn4ZhRT&*@W({f}iDY(z*mw*5+{^l~@fu9Fk@Rdf*~wBupWtqD)+3w!Kv zf(DQYcZl?}nb!5kszsH4NsuY8XOSJR6b>mg98aD`&y8-P>#+M`tyV7?GaQPYst=yO zDRabs2~#5M`0>#8eqD5ps2go9_1#RVc20OUEv?BhC6i8j(SR;2c3dwWzz$r(R_6RB zGbU?1&&S$lA1Pv)sI@5AnY3Hhae@`m0B-kPV1}VoDe5b^UYX)A4#@Iu?fD@^wLAIx z3rwKB3(+Si_4SVFhuzn3rT^71vzR`Lv8!DVpZKb0+axAzE& zNCbJatZJ3Ry!tAibDm`UtYfHiOD=hz(zv~1bfwv&^b*g3In+qP}nwr$(CZQC|G zxBL6;H^%!BReRT}RdW$h9gspiSq~?lR>xs}szmLaD^D>>>HJfZIQkh8&;jl7ywmxQ z6W908Wz{M?06^rw|D{}DujgWB>*(P4YsJ;_Qot6O|KU;khC{A~K|;i^JSl_1(9sLX zDTM(K`3m?N*jo9}s1&bmFjHW;5b)%q)k$8+pupB)wtVQg>DKb-th-BniU?K-S-XvI z_{ZHzHQtG1(iwa*;MAOP5=pUGxzAKn?b=>lmUY*zw@{9wG8Py$4y9rEWuTlgz=C6b ziTARCc_CBGmU9av7W$&t<~QD1zV<}SIAyL~NagpV;yKztIXzz}7Hd5vti+a=9$#tp z^E9{p1_<-$^z(Sc_Y>spZSUy4%(KZuj0PhpU<1ykc;o0X-Jtd-r+FD0<#WA?Nz@IG zdu+ZNjAilU5;7$R&91E-t6{d?k{)c`q1D87Vis*JmD)!?DSf z)0=dXnH)$gC&IYK^JBgNH7b{(%e9f4MD}F#Pa3Gn3oTg6z;RIyQvu_GeRUm*jZ+qc z{P?|(UfhSPkfrCd^g1R6S5gH+RkQ`a`MNkMi;?~Dj)pSfCf3-6mD~F>aN6*8mGI-o zFsqk4rtgXR0Bb{Ij9IJ8Y!ucX$K*?zthp$a1XGuyts@<{5bZ?!TCyvsfS9q{z-`*H_A5H};*$w*qSC7YlsZf?QQMlb z?V2I-H2Z7~ORrg}hz%fry2Ui~oL7pnGNV3ou92Twdh$8+6Ck3nU%D&=n>Pt-EtHRM zhn##HZegusw~J(qDn0OHRkP)s&U*4cTYzLZIiy^$R4yvSgs>NM79bahcd>*e#+=8Q zXK-3)nHRO&vr4a)wz|0|=o>s7oGzTpoJ^do)gY!k8|DCt(ytGb0F{nipR1vAPPmH8 z99-O)iu=E%{tWd#46K~&9!`$lt?0^b>rS;NkDo^qUkeMiyOCC+!9W1h0B=!({*oNg znT|`1C>}%jo==pW`iSfml>l{f`+ho?D{6h))31_}XeezI4JhZ54fY)KS`1g6`(%YH zO3Su`U07CJt50Q&S7aALSy9ljAyiSZZiP59uCO#_%;Uk3X=G{|2CQ&gr7@dGRD43D zW(opNSR#i;8kP`P)fCuS1jXESdc6b z{QJk9)X_el$5q9bgfja}0Ql_KUcm{#YUN(iNNeH#uv!`gf@T4605ZXvk`QGg5ek45 z7~U6JhnCFFHvbt2<)Shx^;OV;1p%PtMj)30LdcNFm18+_G#^8dckjVXt!>FY;|B(m zIdY$DQliglzPPC!cnAo9FjBYTgI^Zi#;Ep|oy($$pA~GpLZg zV$VVM1t51DI~_$PHNRi166bREn~C!v_^U?qW`uK_@YV2;AfTH1CvdzvoF}08&Q67o z*);tXn7bAZ9L<^k+er!XmC*)_1#{+?GFp`#jN1Js+ygSg${**|HNb3DuNT+E#CO0| z;G@n#D$2L^;?P#T{D!tukl9TsL97*0Mjep0!iQ)`Czl>h8Y&5yI%#1PAvER`{3p#` z^oG<^UYX@@Sw7iPbD~n|O{KpOj;oLxEHtZZJl;gZKCBnuB|jVjMClNQX&jg6c?SIy zm+@3a=AnN+uM`{A!?mZ)uKH(Jm0wgsGX##rVJ|{=x#46{+>vAqn2xyOVk7Snd)#n) zWhzpibk^hS0F|o!T0_ysdA%G^eEPQ{l^RyR z9#nX5T_TY6Fwbx+x@36j#J4uxV$%s`ei}S`p-uQG_H+qMN}~Q|g9~Gg2oM}>wN^L&XGNW$*=7D^WGG^=DM}HI* zEBFs6n(z>YMBbqR6D2eBJiITl1yr(wZheE|Q)(y`K2G;3{!^eNw)KP1D|S8gv|R~w z_zl;i$m)R5>kcrKY%AHOZpZYB;u?BG76UaoMY_X5N`ll0g0{TTTgc7oxfM071WE4s7$EIJ&+u~loW z8In$Cw}LDwgR>YH8D||EYa#07L$(Y2>N+!pxGt2Nz!mraLagYCTrv?$a{HpLthV8Y zs&i=M2bN4FR1s)(#$Di7i!+R%GAW?A@_iLGwhDv4R8G9)&Bnx({C2{v=VbTxam8C#B7e;~Z26OQ~YlqwG?FC<=gG^e+BejYF)1a+NHdL^_P%D{5YU-7~w|z*U zh7g)ozO-FR2=PqQe&CeahQmt=fnXZ_xYv5n3(F)p7`DPRuR{;%75xe)UWJ`ZkCkd= zYps@zW;c-31Kz;`Dax3}?do^c6o2`DmZ?cx>iM~3eP2dKrn>lkY%H|?RH%G++Dw-rs!Q)Lr$0$P=74IvAjUI_y~#2wgbv+;=ta89JYr_! z6{GohAloXTtHMj%Clw7iNoD1|O4~p_)L*=xhsH=%ayH5}jiL;zO}|;#`-Qg9Dp^Pm zPa^iOGZK7koUo_wbu6~PG{LQRG2&I6E<@5a-LH}#7n;uCj|M#P22s5_1yJi`ZsTl( z_+i%R^&(f@ULikrqtW5zV{HAP(~tr}u|%5NVwMV5BuGEqgru2;l#`Su(2Hzrf=&26 zRyax2B~BVy1UGVU)xeR^+QL-S~Ku z?Sbsq!9hYnLjm7Us|jKZNO0v$yTM)|l#>_T0ITC)OMdN`5Utm(jzBRx_ z3rb6@66xANYi!|M1r|pw#3>&U2=k+Et zs|P~AxkqYttBD-ri>v=^1~0J%n?OT?Csm0Va^G+rKiYA(7@gb}Va1x{42=0#mI>>t{!rtTUv5bQWLcklb%UpSvnXsrISo{x>`EEmb5@#xe%dxy zf3v{9SPll9S&L|}9iPw{KFc&Ovc0RMP}fmEeWtlbpI2;CH???pdcSkA@^^T6kQ&Oa zTvTF&@|@;ayKLwsbHU4-&$;TkZ2ALnM#WHW1>*@3lO^-7N%c3Oa&X-Un$Nwzw{K~H z>)XzAWRuPtO-yXxZZag+5Ell1J!i~>P0JceSDmrdHstFXGLw&2owHLMnn`1u2f1Q^ zSIHv!CGdQ|5*MG= zd`R0*BfEp|5QZ1n68pJkL zRQ3WnP{or@;p{N*ZVW37pWQP!JjxncLkVe)E)@X-RKwqNoc+dX1BGy^TUpeb4qO5& z8&__Tg<4L--+Q8KrO~_C1((4=(;~0>Lvsj|a->(L-f2WNyez@BM#zjhTDc34{hhGM zh3_DgBej%79|GpQn;wQqLtU?}57ii|CcmL_buf9pzTkg;J5nBsoGm-+MW0AH^9GUY zF6zEY4^((TR}3umsT&CVsl%nM_(D%mDd91furAs+)N)TWui~uY$ZeVq6&Z!&Dmke> zmmSl%`*1d1->jRA@s|AQc4-Dx(o~~SL7$)}M2hnQ@``-&3;)R3f5ECO7InK4cF@Lu z<&b(7L!@Ln@p*v<{~}V>{=~;K!kN3v9RumyX~KaY2(26e?@Jbtr)malqIRx&JVDn^ zDhI3NHVm?IPCESe`fVxDqlkj%+Ho0im4WhSG%!b8}q3#qBElJMq zwPE25!r3v7f|uW~k1+x8l?nCdisku<;@e51nAkO1ZRqT=MEdjcW@uh>sa^>J6)jkr zSSrn_6n7y2uFHcY8A8(2BRbpUC3(8lOE*DnYd1~B$=E7jnd7uC{zf%maeH27j+nLy zZ6Uji%W~qJIdS1QuPLH|ux-?=j2L7?ynMr66WO>VN0{w2fh5c?tY!Xj*1dJ`Z&B1T zE{B8vXP=eEq)zR#7#>x=_x>%MnMSVn)eN$lK>}?oRYxFxd5o3#Vr0cf#Vi z^am-`Ph)pBsTQFNQtSy_KOHhJggxjT?z4dNo(iEmW}kHdtw#WQw558%e1NdE2xqVc z;9)?5U}AUB7$Lckbd}F79u;F*5W5XzaW`!Jvn&J&2?>z`{%(QCrw|SS(_gG7DDb4f z@fLyaoNM_fVN34dZUsxTZtsX$subm(oK>cG)eVyjI=j_>xe|oX;BwvYQ~*gl-%PnV zb#}P!keh6@^N`ZU4ehm-K(!%cV0%ElYMGtDG-mhbe0Os5sJm;{hH~L-){N#Km7>dU z2dr=JZ(fDcFpB{b1p59ll+ZT_a3)V#zW|F^3lg7)a>@2+6$1H(ir3AnCk7?ish3Pi5kjzva#L57d`2?3iuU~070%!-ny~{^I4qd!i zG#K}3OlML-5A^2FUK{KnsE4YPR^O&RhzFjAw86FgNWeVo835vAP(REk)_r5mPA8QD z1=c7^f1_9eHcGP|ltWkAMO2LgBD3+JJ4$VD2^LSob{3s79!hV^7r@GCE-%hCS0XdF za5{&8RKXsT`WONepyj)~AT*2KYlU+{q6Hu3e*Qdr?}#7%Pm*=$ulrGsVYD@|Nm&-74&&e)$nb?((Uj zFJ%JN85~k}VI!79YIm3`0mIIiFSfzG*faLVd!ZO z%F%G%GP3N)!Xmxh9Xc7$Ciwsq33H~Fw4S)bMVcBzKq4vEVHo>wnYuPfG1pz8VPBc) z!?I)AjWPn?(29wrk%3WkL$F;)B}VVAZRTPZo`!PzyaDMB{CAhn{r;(A&R4LGU~vw* zMG3(mE`vNMZ}vqjNTc?#ie_#4@lQ!n$dil&NP4pST8^z0A@_E5C_Je59YN2jS4ZxJ zO7O;vvwF#3Fp81MreCa5UAP<+q_stYZEjLu+rz7QLRJd_a+!mhNm}RM!o&`!Zl`ejy5S<#Z6&RP}YKoxh zK`^9%%}YUuEEDj@;iej?4h>Si3s`vqABe_r)EwQ-a;mN&uj8MDVDqL8U8XI!XqQ=5 zVB0d`P#{v~Mp}P*4j9a%wZ9h4Odh>BmesVQDe$WO2}-xss&P+*7sgJN;vN>pEDn9B zoUfjZQ&lpUK_B>4h+Az2DUeMhchqBmz4O=!0N~psoj>aX3R?Y`CA*okGvC1M_lf8JPKe7pi4%H`{fK2 zJkt{qe`}_Mq7_AT5Y04aq@#{W>0hX%nQQ{LR$}v(K)e|24~_R*jpa93#>&bGmA$?MPf8HqM^#2e1@nHVfjTYv$zC-c_IR}8E8piwMcDY zI3?{ISDg>o=H`%}XquxDnG()uGyKLJ^*FlY!zh%#A3xu~$>{YX>`uszG6I6m4m->* zQ^)S*O~#<^BCUk*n8MqxLDK8kdq!Z~Av$NEt*i9Ab;Hwn%>yiSfunM;^R8zGMdZv} zk_pj!<8}N+Y>AucR3Y&8(1T0V2Mqs}8DAt9Pb9#U^(VlsaHu+KVvcIlb`5{5ULXc* zKtrvdHVd9eci?XGOEvfgb?10NPO6-$rQEqtzR6YHaBvCrG#H!=D`xp3A;D zil@n^k%%6{KpU0hAG-un<9gLU{(zp~_+uHcbZ>Tcg`li6W|AsTINPR53 zOK#d^)sV*aa=Q9zf56N5;kEqELZ2U}hX!OWqc|_8ZE$?UNLfhdFiQ~%a8X|fL`fk; zA9MG}*DFdsiu^U{qSK`;2h!;NT{3(ho(s*P@@uz5RX&a>(+K7+1{t&={?-*M{Yi|! z9m554^KbQGb?x$T^*;X*Ctc0N{2FKef>>8mJ04H|=UL=aq>v7D_BT}rvX>tiVJ`MC zy1vF0SAlsbg+SJnd%}M5B0C-3TsUwe9V*>LBcY-GuZ_LhxtZ|>rd7MNPx*wvrC z-se3JFt`a?&V1q54FXiBZf%nh!VDIbo?327GB2z&K^}}spPjz)7A$t%l74*tvy++{P!{CE0sznm z`ENU^|3Or{y^({d&3{%>Maot-8_WpbcmzLt>4aHFY|$I~80H1onS)wE#PxeAUTWZc zXyh4m0_}f~CL!*3JPNmQZD5)I*c#ryZf-fu;CiibbNMlQ-rI=u-C8e#3q7fuFGO9n zZ*(MYbm><#`L*D4e|iGmxOd@cUiF~|m-`M`KsjL51RdHBl@33(LJLgy;m)JQmE#f< z@8S~mo<-YZNPCJF`e*1GPyLmFP2hK-T)3OsM=NN5Fj;B&R%+wMr9JkhOMmhUql0fd zavJ{{b7jZ>jau<2zZyR}8#@~_!VV6kyCB+E(r&+bwsRp&g3e8Q@KC+}lRJFvpB&~E ziZb;_Mn?M|;zOb=tHB1fy5ow;lMvq&gH$$cd(yBOqW-fc&jvw%wVww=iW^N1THn(q zKDZQ;IGlOJ9lJaNVm^CsbDme7W69>Oiypz=oVW*F6Y8p5D99_aEyi-9Ic)HER2lZr z;COcIGD)~pIAgw<^-|D9sKZtHSUe1GNi>Rhdm6fHY&gIILSH;)Ys@2T zbD!Kim_&@hGteghk7fQ;C4gUMQs}iA=v}pryxN>2V5!6>RkuMWdz68vl)QG9*N#i$ zL4uupn+V)DhE&aPgWO2B&Q^4dPmLf?I&Cqac{d7U{%VYIRzo4XFO-{@I2;sFX}w?n zwBDzL@R3}KWOe>N`6j-^7_O(I$wTa&5eFH(@sWmvbSXt;an$5<}Nf5y5alPx%isy|W@U@%RS<5vijt({8Cifcm@9 z+qR*mlV(#_KTcP(_K?Pm`>^w->^!;qhI0~VcycCCTq%MXAqP@K>#bZhZXV0%up(h} zTqMo?Zr47}T0V3_<1|`-A3AYEzoR+l$`)1=6w%wGh?Q+m{wBq~BwoWz&|6dASa=UzT3!=Y=Xu7oc(5Whi zb)vhf@=u-RD83SHVl7)V_g={k<{m)*YV$m$%GO)zQ5?vXgqNYQyd5uRg!`me``~$A zs~+D}9jvP&giFDdTKZ1(reqPQCH86A!n7CmcYTdKk*_h2RxblgJZQ%Y5ep^CPPjG( zOo-*m%yIXB5cuGyd6v4laSgo-v1BPjJ4lCC63e*I6jO!ibLULKU!^ap*dp7dW zn$wv?uUeG30nD$y>R0dXO=u2?oe;h~7?!1tJYa^P-(EDUNysa-YTHUJiNf~-W= zSn)Vt0n>|={PAB`>!U-wSZ7`u0;CP}t*8nM`p@TFfg0uz-}W$Lh7Lg1#Dk1WU{RQS zV|4hh6n*Zl(vS(_YzT?1iRGS@M z`twC3eryMcuOXK{UU^ET;rs_iP_!jwp<{39>(rB>6EEW}5Iy){Z>T2V%+QsowQHbp zl!3Jd0zeQ?0)*73jT|!H_GMSZ$@mMV#n|Z8-rj^n+=WD$kUZ*54rusJX6@e*2JkW- ziL}gVL84s-Ny`gxIKO(tfut+}(!*GJ5|LigwVQgu_Hk?A?H}3Nl^tRTIE_L zJahAa{qnMfG)S6ci-|rDttwv(aUSL;9lar=7%*w06qaIT*`{r_AurL4+KXC9-4NV{dA10J0&EvT^6F0GdJ@J!U-*7w0;p0+2_7BqU;&8pa9zHyLEG**uH30^LdCEqrl6d0m|QN&RAk7Bi9z+T zW_0~gYg3;di3($98DS}oXgMDLMUkkZgD+2n>hz~;2Z9{N2Q+`x9^qnHdEI@3UEwr< zyZq76p(TcqTV0}AQ2*51kWB!j3fu*Fuy6ky^mT%EU+4P>y)I4KJ#n_6e4?#IftGHB z+IB4dfXhw7S|dOu0e{YMskmvQO$$^38+v)l9DXma8Dt6rt!{N_K)Liir>#KDbgK;u z{M?3~bE34{R#UY3#zMWT<2GHw`XOgAjiIEfOTloi8j4e0DP)0C#jQ%Z6kwP6uXw-m?B4D>IVh=*aYeW7voP1+(2Rs;GSIZAjjc zBepdO17Z_TqrU}ZTW`$-ZmFBEI(VrOS7Apr+Jy{_#b0p(7;L&oQSF?p)aB6bD6HvH zn#yGWQt4(}K!IQtW||DkaFv@jM?Iwi@rOV)fTlC^@cf;*AkxlGO5t!_k`^^*`pF@ zVaii2Sfw4uMt=o`vr57nHrvk$%7)(d(c9^?>j*!(k z5N*si8K7&oppMCi5yrB#&4*Ur+Nfo59`{$E4*b?a^@-bu-;f7$RHP!|iYBA7TL_K@ zrzQ>F`q;De-72=faM5PQ>j#lX;?EXPvrsyG)v_9;xcZ0GhEJmSHQv+&)$jGgB^lgq z&QBURM^O9&Cz{wsblpX+wG!EqMiRudDESdqnzBs$fn5iW!N@J4W1|P&g{jI?lhzhI zx8qFb`x(JK({q%{noVraw{f2i)VIcUz@fQ~PFLJqj?a9U+c(-#)jyI+s3<(hZ^@8= zm8q8@13dhWOte}awNMgsMW2(`-7KdTIrdCS@viZ;(c?-dQQAJ>?nH8z?u&&wmrvLb z>)Y-O=mS3)v9|QE$_84q9jAJ{qn2xmL~VQZ=8nv2kyub>SQWlA_9ur(8 zsSdGt8{_D2!P2^|_h(btAL#$gR_q1SU=QE`01jyX?HfV*KlnyCIvV|Fv|7@1bJ!40 z{@M9;`&mh?kr0RHYlbB-5ZR0&W!2^fR1hir6AK3gl0qUv@U;syW?q}=zBz>^5EV;k zHCJ{XTwSG>Z3 zg0HNPfzHqY@hdT~%;$`VB~J3E3AF8?j>!Ej^`c=&o4C{l3tlEmF^UZ(fW9#zDHbES zR~+Zvjn(5sR+FFashLbb2lsE+#@TTkn&O-sVi>!&r&rtCp__)L4X-s)J!D9Sq7C7` zhM9?xN%hD2wXy31X2l!PK$*(+{}qZ0O^Y--MwN#V0Wt;yPFIutA$%xaKu|VKcJOv{ z_Wngyl)Sub9}#*c;l#YGccuAhT-XxIHyN8jS&V!+(#D7}moB`S6i)iwA;-kn*n00E^I-ZpsEW zQu_j_wb8bLn&kMIyIz%`f2Ty+VoKahEB%ZD{E_ds#;)CH2eQ!O-*MxZvzHy9~( z7;0r}gTsu6wqcPD#I}4L^rJ7-awrNK*rIPgKUkj1)eHb%&68WHnry^zA8dZ29XI$N zl-GGgXNnH1AtqBuT|kZ_#CrYTFeyg=d!191LAiNcHhYSz-zF#vsfPC&_sAeL`^RDf zOC3}^e4E14c_sKp9}_KIq*P96CSs$ZA^Ozml@I^VCos_6-ShsTv8&tOs+wW`ENwg* zsB^QUqoJY7qbl@h>D(sX0piQ&gNFa)T7) zW8Bc6PKL-v==q=On~|U~!ycyfM}VSW%vo;8?)b!VG+C87>U^A5?dwjnwY0Dm%I<)T zdP_;cGc$W!q{+}G(!L7=$f@Kl<_0^mAoLK#Fyvvtmi`7yf>7E}e#mYN($UOb=Ov*W zyzJZqAR^!;01)r)2h?%#Hm(P?HUfZ;J#pkwDmxMD?mVJokZVN}=i@&ZdP=~m1w@;e z=v`YE-+v+^ww+<>Y{t|wyaB?b^Xwom(NpzS*?t?hKU2ac%D zM%>+t5pk&$KHrkwV0lq_{lBo(kWSQLIzem>p+5Qfa%U(L{q}|}KSy3rkv>g#J_|?B zd!p5J@;1KQ*#pkZAzkU>KfLApL<9NEF2!jqz&#ATRvM&H8A)Qz54ExtY_aM)R0J>A zM;IDF+qpD5inzqx=yu3J^drMdwnZ(SV0KJDbN*Q3JJLAOZG077M7_&n%BTQP%5^Qi zZ?!%(jcP8q7;~cF2b;-V^tx<-5p0nqu%T-KH2e1=oW8pgur$K{T4ajOPK;I6{IDx! zF?w{*&+c^JXZEh^3`~QpXb7C$Mil0FK9aHi%%W*x;S8>xrK4YZ9ynOo8u&pb>DN6m zBXXSJVR)OLw*zNOukNoiesy_vwJ02?sbF(VAaa+wKjn+Z+8~SD?ccsdUkT&X$S zN71$#ND=uUNFh4--by9@&#^CqlU?Q0oDGs1PCw2?}W+n2lz4a@$r3Z4j(>zVz59oL7ubcvC8Gb^C1s0)X{IniS1{ z0bqx`AexCSO%~XihzMwXi|rw^`kHJ;lHRKrIGm@WBS}@t3`O=vTUC<8uR83yyeqPh zWL}9^*PwgrL31EkrP}=c&KYw1X1a9z)-NuddX&9IkA~FWuqkGAUa~|-Zubu_pB?GC zUm>uij=87tkcu9t6TpWsm9RAcf?fcw4Y+J#;q*`j zUk)Rq`mr-c+SeuS>rjLq_=Wkqwq|+^U1+)@=F0ls31C5@%`0g!kq&z!$qcN4=pk>O zn}yG-Ly|5fj}VYLIs(7$4YMMAo3)RF1&)c}wa=9vNUGrG1BR8UEThDl8q@g7HndjIIC?JdE2lkVe36JZ_1si{cYjj&kOkmNAcz2xEq=Cg-Fl{;j_50v)pOVC#Ra$2x}q zDJ6@{+Ok?F=&BO%jE(cBTv@;^FZXY>v&1`gkQVU2U^$kCSzgs&SqIkB`T}=R8Kt=Nf zG=Ld(u&&%<%NQPq=SML^Bjb$|;6~StrKz*6odu(gUjr8KGrY1_R!=$KK`%~bT}08= zN;GdSiQub;W* zm-=*YH5^X)?a!3~VR9+?NiNKZk$r5p{2DOzxQ(4$gpIj8$e5(*LFR9`+${vJ58uG( z?M9$oy`m5`Sk7yafU}y#Qe2A-z7T!1qo^K1Xf=TNJD{ku$@k{4L^n+6>EwG9Vp~Oy zs!ffC&!veH?}Sr;G|Rh3xFdj#NR;A{gvIB{_ZpsF)!Utf5u1K48ag{%g2U+?+C8T> zR*(5qOWZY!?j{5_;_0&_LxTe37FghHw9?vMu}69#8<8k5iGcBCz)|e6tw*QYN7_m7 zKQjN@4K(rBOlW2o;;h7b!)*HQSfDvWo1TbKA1HvT8q&@FU zsF-$mOGFdU-zA1N-H-7}F@ zxZu*TN@`oHVExE`QjJS4aMw!>>KqLk?Y;^P7eePkG>x|-t?`2s|LR~Jo8BU8O!1;- z283CtBluitDjx)xN5{{*g{Cp^B~7|cWY zMSQPK=g2!%U-bz>(wAFjVs@@!k6Z>D7pDu-e3``h+Njm^6lY?_7RH!*&fJTq6$74j zqjgD_e)tr=k@DfLzVVhsG+C^0ebyl4SkzSrsmV7zOf(El#fuc~BG`!h1EZR6e!H z^`J0K$iZg@{$86>AhW9RA@$GG8jdG`7-nMw9FA*vJ3H<(q@6;`VkDOlWV{AfT9oxmvdkdFXo^JH=l$`QiG#R$EFf zyUC2=?k(Fn^PO4WVJAwOIy-fp(BVWxbya%MT~bLXO!4G8!8M^JUkELM0r)UNDP>%l z@ZFOWoyl?O(4yX>uDWkpn*FBj)~bE526sfP%#k)LaffTXl^Unxr_(OPsHzZjSmfp& zMm8!%Jw1xP+t1r6$8Q&LEe=0PS3W?5LD_JY=0ust1odWP7vQf-3k0}r4VYP0q;~=O zTZ!zvVNP+_e1O3$d9UYM8Ss1a_S3a^cjgv1=vML4_F`4D!hEcuK7Xg=SyZf7nbc3Y zsbkT_YG8jUP&otSN0+wlD&2wAdsc%8#H>p*$a~FQ>BIrs^@sUn^pU-Ai=9Gb1Ca|i zLKU8VNqHZnfUF+4L|UzuB<*|=%yMWsp}aqJ0Kz#j*JvrhAh|PDffeBmGStO^VIJL_ zzU)BAjbFtA_BTOpGdmikvQI&~h*hM9Quv=4Azwf}Zs=N&A-fQ1Ww?te1S{1n2|u=g zTJMIy6j>>NXKKbHL&RiDm%EpC*~n%STZ5go3XwL~JQ(9CDK^XElnLXK=^8d;EB{a- zDD;d|a^Dmf^F*tJuP-cL(}y|3i|4_q)Aikea}G!o47HENFUH}52dyFy%jkfbbzyvr zdC@QHPADS~YoQ%-A?pjf9)*MEEcX=t0Q*_36m3xs-e5pJJky{9G5!xAs62h^+Zm9@ zk1UPn5btG()(Vu zmiZMr#DJ6`eGL5lP>HG1VEeof<{8MdvZ*zJ`r}y*9AbVm08#c7wJn2zG(V zenN4MJzK4lnVWlizl0slryg!@0?R+EF(-8Bo@Nm*H<&|?GK-d#^ZcJE{m{yWdNf>* zkYt#U%cohq2M9Y};*v6#^g;qo00dNc7z*c~oGvV+!4<@a#eJLWWAT zMFM}|`@;E`vL_;0b9s>nP>w{nkzb16XU>10h^imAApw2i*KZp(<&bL2OjDc4tg zZ?!>O-6_zIOrluf>_5aJ!|1>XxDMLxhN}B3lCWJGq1sNZWjS}}5a7AyNeQ?ZSE_rm zy`Um#l|KRj&%v_Ow$_81UK6cb^6Mfk{CwcG_pO1T{W~@8z_Rewk+&C4OP{(?9`miO zF{H+lZu*w{!rV|?A^Sh*Vqb%%Z5RUBG9#_$baPGPe(Bz4ZPt%?Y%uv(AHb4d+y|6`Jl9*9%}lJ2uNkv0h@V zVy0yQvuTm%7Q!7XKfw)o3)+%<(1zWUD*`ht!(a|pBMUX=y0C$mk}`e6MgyRYJ#=_I z&UIZ_kda68=Al!FB>0YrPEu{~Ba!^L|LOsew5;U&r1D`!QmlJ&=PGOTh&Fs_mANhy zYXsy?+;aGlQ#Fg)zE;yD3ZW;feAC@1Gdr5{o!gWx9Wj@Pl^puYwe+3~1}ERBtQrbI zkNjz>AEX?^JG|x6%s=t?BbJDaLIp_w-JK_yUhM;0UR`WoJPX`0Y7$=6NnhPH(d`2H zTNJ`&F%hYWCM1P`>s4#cJWye=sfns=S|E$!LL zsA>s$GQ*artg!A9yS+6&nOX+FSgOT>=_EuqkDKt|6~7v+O<@#W>lSFQwA4DuX2RHI z8I5Dh8#zutrHtsHt)Ay3RTWLK8bQDx3rHu>FuZ)`6(+-k3v`RIT|@e?SCC0elXSW& zGXGIOYSDq)a_sXIW#Ev z6{^}c={fOQx_ENjh1EEse`>Je?uT!j>th)ZObu_x-yr1f_TN_W=CWs5V$)UUZ#XB{ z%zKPA=~k1gq&vfttQlVRCAnjSZp1@(7?Emd&>4k%u9r>Rq_t;k>f$;v=Vs^SBY-1+ z8TR&qF-Fk-ta|$8DF4GHG~t^ZcFw|mGYhE$MYC6=w zEP79!>&m&HZ(S*1lP&hxAd5QN3v0|2%%!=N@Lq~;DY2IWpD{dmLdJ&f9;Ot0zYmwr zTQ*};kz?LbIKyUr|8Wo)_D*}*y-Ef5{RNfv?5^mQgWSFttugsjJu$R*ed}@J;O1m& zR{=+@>SF2jbmRvc-)tf>!{yEvcBR$#h5iz00T#XGeSLpMVyU?^zKrjAmhsAc#C~2U zJXPofB&p|MLA;otORAS4v~5Fks!^_ev<-fs!)a|RZg{St((8y+k<=~Fp|dS{$>Q9@ z0smyuI?ZldL`$|-*nY!fe|Sy)KPDWQF!@O?DgXeV*#A=Wb+EBDvi~K*X(?*SY|x>2 ziR|-eCZ#m%^G;v@H-|LZ^{MNdya8B2xy+EA%wdo9hrS6 zh9Vu@A*z}|vG)Y>C+5FWqe)dYbIv}IpjyOmclDf*_Wj(f3Sz4w8Nw(jJmRfm*dwQgVF$)(O`uNs-c>Kgd z%wFK~zvyDKmYowyV&n)m0Q&~fyJFHVM2Yc z_J>P_5* z8U4`h#pV6Z56K3i6}kdUEUj>-GV^-a!olW!QYh=6 z(U>X>?ElaoJn`(WgQCod1e&lfl5M%qBAu=4wf4I;CS|3fg2vTa(3UPJU-O|Af?4Lx zxtSFkj3X;_fVW?*>+VKTP)U1+IiS# zF#u_qWQ93p>m|DnB2ib^SGX6xd*L+=E40NNXYn}A=Eqk*H{%!JA|+H zVk22j@B7u|99BH9YXUrm^v({XldD7GBh-DFkxb889ZLc)SLfQx=zIKKnB=&UmNOj1|*ud4!&ER>8!ZPb>0>M9=D$xyLDorbA*I1&I*ET)> zI=+MFmD@%C4{7HVoC(lv?bx<$CvP;dZQGjIwr$(CZEIrNnb=OweBaf7b?Q|8Rb5@x z_g$-Z?fvvx#Lw5>+5aj~%Cejx(6j#2^JNqE&RjUb-xJ2Yf5Vz>pGVJa8Q<6!_IkWt z)c+8|&F(oODi>sA-!U20n;4QUaBe%6+VfrxQN<3tQpL+Kd;D23?I!oMcAqAa2|;LA z$X}2NZBLhyNhPcBS1lDR#_2WH0WjHS?7hfT5`{7o31E-+0MoYCPl%Lz(5U1E(n187 z#8bD1E)%epMm6uOQ$a*sf=Gh|`y&Qu48=}Rtx-$Nt7Q`DXof51`%`wMlfyMAA>fAQ z|CL}-J049J#1iZb2!pBuG4vlZ=ohJvM3&6I>z;@Ww9Gv+_uS(O1VZx-QzR^HI)A;H zNZUL%;_A&kt)0wfk#UXH2Bc%dq86J`(9J=`ASBrjBo(&iH*Pbe zbm~7}zMm{^qc>ZM*pWpy1pvv=UD5p}TxJ!b6Er4~s?wwgz($sr;l zAj)wwY1REoNi;yqRu*oG>v94Uak0I>i`L>X&U8%>$NduM`Js#f(}7Sj{+NWb>wr46 zp4o%P)MuG7UXI&2sz~q`xGaP)hIEMpH&7`jXh3sg9XU#5Tv=_p}8-v~-0>^_KW5B})?(G?CyBVv6B|N`^`o`yZ2gM9U>I4gmw`J1H zLI8qtHih~l8iV%itaDa*8?H&bTPT2X+{3_%`NiS_c}UP_mD zV|IA_Xr^Xmw>}CZP&Y@6oIPm=-rq(ddY47=WH{hV(clHThf4(-UK2>hbi@d%ofwT# zWM!w3Q=s)!rP@bwVB*o1PK-F^dI*h(2ov8&14VEF=^0o7D-ezGy31cCaDvYO#i%x| zNPrPj*=mZT=5DHh-^QgxQRh&F{b7p?$~y>DH&Q66_9=Ngotx@2iFme`5$gOtgQZG zG&)gI58J#f{^h06c761POE&Th=8t#quY(jzG2=t267)}ZGv{}*N>16nOl(=$HOxfh zZ%ZSg{pN0Sh8}x7tD`5U0JJQd2!m;LumtV(sO0?RL6-|=Uxom4I!Y^mYqyY$1YJsv z=i604iLCa~Yyos`sk}y>aX;vNlh!KYTq%(ei z{v&-frBQDs|3EaQ{}n|0KTMGSN#B2!Z$x9$c9Rpy2Ql6+-6mi(ma$7vtRCW@d59Uz?;zfE-NR({COWaSK*uw-Q6lhB{%lASqz(qjB z{0k)IYdZ~ulcpDE*^iJB=gS&^Q-&MjJ7M+j?C#-6fO_^|cqZ)iWA7p?IvRab(WrYZ zLO*7@nC^4unWKj^VAn%t^V0Cg2m3m{j9p^{wq>rxSCgi!Kd)V%nKEK;=!5AjSvMb# z#%N#Aj^li>%!8gCwnJ{tmpqBLQNIf)+YVPZyTbO#M;eVH#pDqFBUG`5oOw=MYy%06 zWpWR1aLFibg!>NQ%B8)riLu-7P%z>FUbQ}{6D0CVA}0h1`KPZ-p|Iju zll^AV+T4YnSl8TOQp8G|E=q-A)$s}1IWJ3J1C#je3999@17Xi{6kj=?8~3Ck;2W)4 zGR>f(6{}p#cE}bZqVofUW$`>(?5hd4!-@I1m;*peQ-X}32I2lFX7b#JvvZ^w)`Pda ztGbRDaLisX)zy{nf;7y?zz;g>a0|h1%qArIhPL7hz9QK+RuJtl!D`cImzYBFeYygR z`#r_7U?3e(4Gi<~1vooQLVS0n#FWP(APU`ZBPPX1jv@1XaC(}6JbBak!hlc@;;h62 z4v+oFXL0PV0t-q#!SNphX}jGe2+hHJ}HqKA`y3V9c(8yuBw?{AL(8G7Dvfmg<9oOx~a@z$^XA`E7Cq@v+4O z#0%1IZ%4|k#KD@?qV0R?TBEzlNV|Z5;M(!peNsr)9*B8(?mMN1&TkpO;XNYX=4gsS zU(w!tc`CK&7++Ckul>A#FsM@pT2`onPX(XNOWT9+x5VhnIXmm>$ven0zRKU25PZ>S zq6p46D)%{g(V&Jv-FNYsfP6iB5A)*wGsft%n}MI;p8TLlGRrsREahvmrz9yt%zMO7E6Da!*roX>b_Po>&MN7mwKK5Zoq_68F=eHy9D>0R9iS@ zg?W{u!yEGs7s8~{$lW1@O(YUHo+6V^fiiXhNwms`nH6p>VHUzp_pE3}jd3QJc!_a^ z#wNsCj2gF`V_y#ad*xI|dm)pP1MIGRF{UAZK!In+f@1Y+ryprYg$Laa%gYB6Hmqqc zgEU*@f#Z@@w9YYS@Y7h4BsarR0IFYD2Jdsjhe$W`;nD zku@IBvcylKB`0taL3XOon8ytHJGfe#%MxsfZS7E{pS}(g-_Wl2_SQLZ@g0xjE~AY$ z4@tt6-xNnlK?_Iunv!}=cptKj)+@Ay8?tCN*_v8UHs!4gxN*(R>Pt$pD;x8x@W&e} zAHF^v3{z9kXS^$T(GyfPxB4X4KWg9qC5y|OguT4Mfq;Th|F>H9|0d|pcGe8W+ZtZ- zn-WMr+!AjH$~0`uE!V3aw*RTHSuIgYA_H|5Q;>Fc%q8-7Yqr=&Am1BH@C{`1|Yf#rRR*W zq_HMBdx9kd3rwK6LWpD;Oll32%TU+&e{u2zGjR!jJt{G|Dan`+fRjMHi6iTVYfyB; z+m{=Xu$Xe<=0Kb|vzKqGA|BjarpRkkf(fjPZA(hJFf{N@G0k%M%2%%Gu57Vo6l85AI7KW)g ztoUHnpp+$*p%rz^)+8wHXuKE`h0$v)S(lp|#`!Hce?pP7hzW|({EY(daix+%L!O$t z712`6z) z6YN~Daoy+9h;$>`V~Pz|Rb`(`=#6jO$z+OD>TlvfrZg!BK2yF36gq9^nSufF5dk7g z^+10kUy`dO0ofrnjf=D8ERcb~&|#{Dj46btJnU#^>jh|@BYtuYtTHKz*j!vrVfje= zSuD1p4_NWuoer(A2(*a6hVJ`2r#EK!=5U|twh96O6Ma~;VjVHGDUz(n7R7F)h^Tou ze>5je$<7~_Z4tzj4g!NAs+TKDScN=;nH~2hHZKm9j7EGX_BwxeM+UEMMXo5aYz;4o zz;MQH2RFoOjaSmeedIe`ar*N`sJX_*09Cljz_ir3nR zJm_xDK{`TZ%bwG6RJOV`&hw{esv&jY5ZIZ1wS~oD(JrFHXyhr&uJ6F#@AG#s8XfNAqmp76u5 z6CP*#ZW=qJ>Og9&T`B9KK#e6$MP1_Qsml0$t==IIyjKknc^gO%J}o3s_iqvlQLFj4 z4iK&w)jwGF?1W7Wn}Q}rP6tw90R?agV+LHAP*x;^jNz5h{5 zS#dpi(2db>n`#px%P!R9%Czkij$Z-H@@2K0q?d<0@lViX*s_d~s%|zV-*{ zijUigW&WUG$|?5X6D3p7mlnRZqZzR+TKX5J5Ku5nrWT#(SV)vPH_YJf>yyESZ5XVs zCHKP3!7vh&IwYX1G$teKEbJJW3fqR$ayt6`wgW&`U-M+zA&lK2===UO`ysu&63o*f zRh3;E@Pm*Byv(HY^!th(YL+R2mwL28{-Hw%bI-_8N7Y5yh;1{M6>waw!J>*?YZ*;6 zb;Eq$p~;!aK&78L`Kr-zuCZ?L?gm@E$Z}ZgFqYte&+cO`-h9DdfY&zL<&W2P8#_s| zLo`WJgYmuC##m5F)_i$gJg0HkF8iTb$@5mP&a!O^yNcB!^IO9g@PoaE^Er5%cMJuF z;AnOqt-bFP$b3CwX3;S6z zj@Sc8HF4F-*|lB!u1XYHenZ|eV;c%>@MKu5t+46(f{}_H+wPMa5wj_*^`U;|NBUKI9c17|8vRovHHi& zHlDqxyz$F4n=)4Tqft}Kk!bBCn*Q1sD|Hr~Jbg7&r3(im$4ded_D^&{`FYul^8n3% zy0?9{O^=iT0q_ENd3m@0E!+$FUX+Ui*_Ye=wwGrEag%?Of*y<5Tjrh(`BRRl*8>*J zteTZpcNfx5NdkJ$yE7J)APeV=Vg=$@7I!|&$ewc*g*zF#LOLxS(ZkZv<(!$ac{-^* zQ-qcddgjd0TM3zk5ctl#up&ei)k}Og(d>u^rl?U8+4AeEZ!1;)Eb$_Dl(<12In-L_ z_TYPlSNqJ8Tk}jkb0a)?iuu6Y*;8dr)c52_I;l}GV9NziWtEmtV=WWe0&$njkkdQX zSv!%$6Ge&-Yfyra2n{pOenW_$l3e?BS5$+uwnKO1nEP{C;Vi6LB7Ie&vdrffy3m(Z9RIi}KI>Qs-1$<~p_98=T_3;NnRL-CcM;O?$ zi*yG8{B05G>SEkwe_tPQD%n^g$&_^Ve1jwAq8tU+0>SPQI|QQ z%?^9#$4!gP#}IO61&%7saC~EZme0&MPhvi7iS&gM!6L zt--M{Fl23*uN+WFlmCFEgaXAV6j^DLy+frlK_2|kFKl8tZXZQLj$rsLWxQFp+64=A-AuDomp zi3_L9bs>nT;_M6^Y)@}Q;!wllkpYVP<|axxM;e8(qRTd&p@RNXFl>UOSNv=)U~P#sp?Uf6#vn3-MH$ap8Oi+-7buB!MlES`U~RG>O%%t$OZ+cGNUdhztWU z?+n})Xi{42XZ_A!&6pY#PB%@fBN?I5QiyrNW@O!@W^JhlCt8$&-$YioymX05Bg(}u z$0@;t)eA&me+id8o|iHCReyfWQ%{~?m_7WmdaeGw(Ci5SDry$~SwsaV-{8c3Uzt#2#bajq81A9;5>T;9qxD8bXhdL#nDZiKAu`; z(F&m6i5zeabbc)!1|g~@J5rCTRn-jY9Fpl!IAWNdDA_14!typ~vtj$=UkOjc*pI*;z-<2##W){Q z12ND$KAOkaQ?xW1&;Oc2KYSqj(*Z8&&&4e@$Zk1g{eZ6CW_X0U0j`%AdEQUB$%4Qb zE>6&e#_-U$R#l8!xx>JLp(I7p3f2J=bfs$flWQoXdXxb?R^Sw3DK0(D5Q?%{N~>J1$Q4QX z0BQ`(#YepF{gI@Ua&N7A+M@YDqV?v-ULHti^T?&ayB|70a?a$Q&Pc&|QX7u#iy~`e zVNmPj_((Nm7i`rxM@*SOMVmnA&)ZApKn+f)YDINi0tmW(R(?HcC;RXH%phFs-9Ur!pJ^`3$#VBaMh3pg?gIg*M znps^7ux5+#&p48nx(Y9FCJHKlC|Us)hn&EC50N4LIC>4ndO3p`qW~H50=QvPbgU>X zHCq22@&-Y!Gw4OwK*by%nnq>2Y)5?mY$2V`nkv%gOK2sY!|P*v=sMqPj{hPV)L{*O z(PSds(DF=Qw5iSmkc_s3=G7e_SrN&;a7Jpa^NUq7I0na?M&gn?7^PZPRxvE`qtZI2 zlC&%r%D#OC5)W-@~iBM3D+yOSJlhnEJe74Yb#}+UiJfkQq_`j=B78&zcP;h2nw0uB%B7=wD5E{s)}N*qxVwh#xk5}dbLiiK*Su{F<0 z)6YpG?)248cP4zv_Qk_WQ$$&bEQ$5EPRT8PM+-7z=0WC_D-C{nW{FNiYCQ6`QKg+ z#da!9>tWp51I6KIIRrX@f6)h}*N$YvCew{8MB!C&Ky@4GUB)YrAHD)D)ac zgDxq@J~o!V0ck&N`j8?U7e2J~XBb;hyS4UjK^J4XR(9M|W`ed6%!qxCOwm}uWQ|}B z5HuQtfNf(JrGaPno?T9JM%+WD%z`Cl@>V7jBLSwNFE`3Bz&tXa+x)O$b!L-{Z2_2@ zdpF1HZzu(KR3E>3x53>Vf+q<6yVX^%8_;kjurazOqqfr`&@d5UrgpedRq!p z#wg;PwrOS!!6a+Pb0pkv!QpGAc)mtZVSf6hQ=%s;5lQ40U$aegfmgqy|L|cm7%zPi zYr46KRvlV;R0n_NEe0(HNp)beS{m$Fl0j+YwvPKApzf&*(S7fh8&CL7_t%RL1}!(V zuvZZV^?d)4?>&%>rj2*3e5ZfPuVN*rdP(ayE1fSK{pVptg8SiuP5;Cvz|Yl+0*?A| z(%i;>M(||)kkVkYJ>;zMJAQgnpSCN{`=fO7%wpZ>S?+nK)lFpR@xj2}bKzo2oU8%K zEZ4gPGNkXq@_>D-;I6*0(r}#y=#o!x8gOx`Mv^!4n#13AM*`%_&Onc!4g0yL7$H~yeu6pKoNrC;LBTL$AiIxbW) zI0>MJFi-}i9ytbDARoe3IWw90==FP+HQ16<5$R%C3SA{LtdQiqDUyL(hP@NS0Et-*I0?vP)g4a(9D+HR z8n4h@6HB%~@YNF^S#!)~gMWLM|Lo;rg+@n2z&S$C=S6IDlFbJeV@PxjZup~W1l*t} z_Jm_vG@Qml#Iq2W@z`@y6{4omMcWagnA#~%uN`$yGNSfnG`D2(H*HwS#I_B%f4bUP zc9Z5ovEPiWWTr{ACRlOj6e!Ucd^5Q?p~J44xIG3vjE{&8fPzfV@uW@5{Y27XmhDeB z`EqrjDpr|rv1NG?QVoB*5o?jv95VFyGa!E7@YC-jOQa5{QIL0yUJrcQ*lSd+MU3RERk;B zWtvx8-PihT8p@lRG)RIa@}z@h@#yYM7=kC}d&0;)j0xJGr&#D>#!*lF4>D`?UV*QZ!!Im<#qt4D&Ucf#Y|JOivU)rJyR zu}IcC!uq-T6+_)%;jxal?-T9@q*Alzy=D~ zCLY&L^rUZ)ClxEYCX;&=VAPzQ70eO{VeM`(8_7YwN`BHuPT;v3x0P*1#eM+#>D<{pC7fwvizy`^pX!%!eZVRk$IV3ag3(qqa8;Z_$m%DgjB-h|K1Jz^5Yb6b) z1sjE@-5u_U4bhm_X0~)z)eh&EyyK`ikFID@+>uPtXR^681o*G|Gutw;RvBZUcL9&jmKWI>pJRsU|QyJUh#<(EszI~cgH4S+$0eQb$7a*q{1k%neSd5@21PO zT^(VNQP$=0qBtT2hQ(hBSL&mVR>v%@KD22Bj?ePV2+fFpq^Eld>)0;p9HX$H7Aog2=z$(@NfHU=9_ z8pk=WquTlJeeRCj*M<$+jc4H<{A}^afQ}Tl3ugk{(QPGns!jcZEW`~1X$Mhb4%~I4 zrG_b*VL^VIubx({eOrkgK?}=6p%!znYB{v1rWac;_eZA$SjlneYpgJMD5IF(6dcq2mcKdmNC1;r90XLZr=nl z`8u}sA;hRh(Uz}4%!c5*74!NxV z@ahF27m)o!m3GhnI8?LikBwhFW{AHoY5+<>;PVS=(!WF*px>L2!p)jGCNg3Ax-5g`TAUlQw9%U%7?)iqB8`4#`1A~g4oFj=z!@Z}B%qeWL zjFiGv7iwM+bE795-fgLixG*loQ&=;E^j}eV>J)4VZM5>|H|{I%`D*j}%DXZyoq`(q zh;SVRB_sJ8Dl)t!oy9gZDdYhZ4eP;!)TxQnc6xX1f}Hcxebi z)A&WLiV7vUvOcf`K)SaOg0ej)Q5{4f>djFMhs^ zQ~m(SJOm9<@@UT2?Mrr@xt5VV?=4XQd(!AKs$ewtg}yQ?>FxIJ7zt6C@;Y0Lv5}Up z;@SeiVAC%gun$NsKdGzAwv>QNWHcOPgwoUi$iQV8#hIyMT2N>+ka(1Zefp_x7I4Ph zWd?JGK@#HOFnK#*ZVox=8vveS=bEh1fqhnPCG1MsNWpVWEZZSb6ZL8JQl{4rbyZ8$ zWV;qNTBpiLeZ9J^yCLEyN>+_>XV;gD!hcUSXtPui*k2C_Dhg2}%Ndl=ol+Gn{mr#d zCh-h(rncs@@W#@>2+Nq4JuAxeEW3Q#n9cMic4JSci^#ECs=mAN99wAT*&otnqeGUM z8rKIjtX{Z{faJ%A)fOYHO-LNpP1Mj4ZBQZ2rf`4D(qW9#G;#_E`Te>u9LcrtPEwI) zT-0=Kkf=j#^Ez%^`YT6UA@QWFn9KLk!*+$rPdNm|1Z2mk*s<$V@JKKd_(p& za+59In1S(XGKKhRb)|PijW(@*Sh{IA>U~$clh*;?=n;Z>NY^nT*SI*C*%K!)c3AxA z9E`DiQB_j1FLR_WDk|A-U$*p|O>fme(@RnYzaSK|9$88_#tWBY)`s(R9*jFbJh6`I zKogGTZUVkR<lggmPQFPiRiHS(SK|;h2Tqz+9R;UbW=|Vv+H6qZLrkTBF8?oY zP*wIGrRsA`4wXYHxMR?okS_X-A~OBPl)^yAxr{?y^_iy--~#%cNqUL`P=<5M-tZIW z4(G_Qoz;!s$9Sn*tc#9N)fGs?#La0X zI4}~lzw{r}+iV(0i7kIG#7Ff7WEZ{C;8a;Eu`eT`yH1DxR4fqB^;%XgKlBWDpbta# zIzwul6SE+RTCAa0zg$Si2d_JX>qa>Pg>0zdS8nb3pmzFloj`GWgJ(}AYIEuNkfaFe zX7eYf1<{F$g>5qtGnJEiYaX(Yj3SvnB-eT70IIahph*4QFMo+M#;f;w&|$S3LibQA zEZ(a@!){QA7pX64U@L&6Mx^)fa z&v&9JOZ|43HVVOo&^*%^ovvYdaQ7PPV4`>|E8u;D#l%ke_^I@8+}^ezbL|UioP|(B zT(*JxyKK(0SFhH*xd7P~mye4%LUw2qY%(}2W?E~%@CB9g>-x}7U!%d=h1WhlWU-7&QIF)?^o%9nEhveXWi6D#wH(!)~2Nw||p69(^&$tikGU_@3Xg5nqh$_{uO`{2*TDObM6U% zgH}MLbna-+fR7py;HHz=H1Zt!ch^lbleJ-5Mq*c*V~Rl8HkYeE%*|vn$()lUq%Mi0 z6^%eH(;G_5*J#Iv-2Uau3uRsWJ@@`zfAjX8g7*1l%$e7oIl@fOJLM7lvjlgS@*t4D zTU9n~O(&X$xh^H#iR}3~V#siPMR+WHA~x^v>H^-x;5om@{4bUj5OSa+Iu-B66(zXb z{y3R$@4A&&`YV{14*00ihtacNShLq^pD5S!Q~Ie(r8>jB!;i4WcB?svz9r3MPy?&J*m@Cvb4BVvQtNah^G4WQjn>(b*j1umnK&MN1AEuWL`9eKApW4$Z`)3W>{vnwbqj%4}N*x9c0hSN%GOOhnXR@hgkaYN6f=4;Yr32BrPi%#Z zsVxD3`({9Yt!R^l18`>HmMK+ungz8^ZOEcU!bjca`xDgORNKi@sV_b~#@`x`o)Ufi zuqd$bjL5Uq&3Cp-%sVP0p!cV?cQ%#|q0K)}7Y@$7ba0p4wD&QMrlF)_@r1%-duPJU z5-{}Gc)(@aXnMGKGlTA(AmZIx-HJGPAyc1?3Y&Z3(B&xNiyjkTSa{^~E^0vEIoNBC ztc=~?JDH!&;i-h#xqmS4&@q@Tm@Tr79*lN3AnYX1y@J~5aOe}dbzdQz?&B9qYFmZ% zux9(c?Di3Y8k>2RTJySYHore^wqCOS?b|Qf-yeiqFPl3bGpQfn+CM&6(}n;Z_?4Z-5q_>RWl5$&hs8Bla;s&6&+q&kpr+^Xb?yPM zg$jhCp@n1Wh%%4>km&~Z1UhrZ5!mXlL>N5pVvB=L0oWC3)SpdjYSV1~dmrtdpMuY? z(sYsCHdj~np_N$+){IM;!txf>SoStn->aAfge?wOe)gIVmTUWJjeW!{VcZsSR7o$E zg_6S;ZXr@MuGQeED6N=ine8I36|3%OR6Z(9rQrnC{9+f2Ccey7&2AD?)HjZd%83ns zkTW=8!%SuDo~f>2@)b4Nawpe4bsgq;+KU<@f9~Zfis(ktII+!^OF-2cx?%2U%luYj z%zYLnQ|_)`+KAru2CLeS5Y!cOiCNmYBiCq&FF}AiTqpSMpA%vDF2X!q(sx~LlauIs zE9bxOLZJKQTAoJW!(@+zSDx1_pv1{*g`|ClJsq zE51BWkkpXqNr?)`iRR-c)>S?pOQ6djp44;r0*+TKzSu78K2&3ZJmD%f)JItA+Sm`N z*J({f9v;yy98_ zF4dYK*jAQu{Mib!%k751EFx{k%1!Aw;V?CviojQH8tb-fI6C0v6=`e}-X3r#K1*nS zmG8KjB*(=TMLHx;-_^>tgy2K0O>UJYu|E8&$_^!Cbf1Y8!8a6L&duNYgr}m+_XfwYozwG?`NcyOWt95z( zw~9^A%}3xzLXSJZ)K!J`mp>oErIopS)5fAhkAz9?DVkdemH*x{0qTA^3tbZKMg10^ z#>7MN_WgPKJFdbc0uD5?-lyzlSA#VPsJbTNjEC&DsZ(Cm8x>`zds)?%hmiL-&~j0n zElX_O!5vF>W|ek`{}ML>dJPO2wNB9mjd^UOMPjFIMpqU*F5jUy@~o8{{i{Lz9jB() z26}W3=F#s^SHHtQWs@bK!3z1C{zK#}ni^!+&{W}MqC=PI`|))T*vk?TNd5sf??n!U_X}!3lY$@t+~Yy;>R{&OHq}$WpM!Xb~%T-Y>Xu z=TU+xHn4NzR|J3yFO9cjNLvikjnn@GJ^V4E5&WC9_~+`0g*jpULj5S7E`6K8B5}V} zn%#Gur?6|&%juDOKW7ec(XUYkg%&=nQ#M}q!SxNI+tngxEj90=JeUH-uWfY84A_a> zJVKu!BFj`lg%`M0;_iIHRbP44)OQtAJ3SBJxok7=vG2D?bW;FO0BZ=#@DUWrk{`+n zk9$NDQJFhpD+o=O&$`!31!SGIzFn7p-~?JJ1`>lU2fohEgZ78J3{;!b3LM^61*8#+5dV$49A)%#$xaEW6TjTUaiK_UFHM z45!+Wh{FG5x-=(KTk7a_<`?Dw5q>UkkyKG87gKd%4ZaIM0V!yn)i0br6$yMy1k;a*=rqlCT13W`fk$ z2o7Ql;8_3b_*&Be)30zzW?krAl6{`cnDelJ(wiSFsS^k|3e0Hgbj%n+sl)COP7Llb zus|Derg$_3RAn~7M^j-Ew=@M;-+JyKVbF}o=JzNfc~r$qT+rbYz&kcJ>OKoj zry^tX42H+@(lD)|QC_Eo;|T3Ea{JSw+`}4djhyNb!F)15{&xj8y*KQxeen=%)o<<5 z0P%)}clo&@@ku{Qzk97RO%CN+hgCB5={(^vL30Jr1+E8_Oi~M>hINcz@@I;Ergu&s!u!GlmhU2K^FrH&()TPC z`d-Ugv6t+=q@Ixb#j@d;ZCz{Ktg3ikyH(RE@Ort1f#+xCV(7t6-BqZk)$49g?sL!W zAk2>1*4UKMw_TUfwuy)eu~8F|YB_@kcU0|cO*4F#4+M9xbxHX{eX1y1i%Djh+|8vc0l=0FJvQEqvWj>oF|ia z*+(e^dk%k0zq4k<^%8TZI_220ROabZiXY|4IpN z3^j19I zuORZZ$YGjBcEg_}l{gpathiMrFH>m|fSxf_&QKV{;OwF1@`B3Arw%VgB4>U{$?C%I zx*t?so~AIBd6bd&R%WFg6j3+VtWGOwJigB+`hesk`14tMLz#Q+=!h58vWBi!GF=9~ z)x=3t%NCc_RJ8EK)btdp53`#`n;-kvle43%o&2~6{5AIC)dB<`ZJnAkO+~a{NwjNi zHUY}eaXoG(ltZ*c4~4I5;@Y~kCdJMqTEztfU!Ni$6If^LRO)SPz=s?wycrlY45!>$ zd%ZYv#lyTAknD%RGcVP@5S?T&@U{kV^Ib|?TE&CbdjZoZuD3u??bCz`IV;zoe~mNa zK2}o=BMAff^?1-7ySh+RR5ZcYHd?b=M#}E~R3kLcf|Sr9X+kzG>=)=2f2%ef7?Exl zn6zNK1cE|LXt*JtMAf>A(yoeEs$)?S-5>BAis{8iPNHv%Yq`ZiH2IjP)2?ju60Kca z6D;SrxW&D%basi`xNUF4`q8fFh8$V(yMpOcW2O}Y@{j&JXP!I8^G6R@>e{tsa~VQw znzGO$HhhdqkE$hU8ZdX+8499Z#gb#=EN84ih)03Q`cA*y%b6G?q?T8BXS&ZN(2HYH zDoCz{B(K^EjirR`?3_eUlv`Y48}%f?A#Og1vJ!4!laYl5j=3v$_*<$dOhkmCe9=q1 zH^o~eD)>Lqg75^&*BwyZO;u>UYEx+^uEL?|Vtnan0? z>Kn^C8c)5&P?nS$nM;hx9cGD35^rS>1@OVKBKY71chL}XxryvfU}^g(rl05>HtIK7 zgraOVO-u30aXgp~J?3A(S!G}>y#Y#i((Wpz0L50GD{u3M!F@&__bDX1 zq7Ycp4x>?RK%uyRQbO_#8;Fb%B<~XW1#P%DCfA&1Y8Ke2hGz8J6 z8-afKOk(h8``&RUTsCduiP;JT1abk^TId13n_`oAc;!_;j3VPzrz3SHuI5VDWOTKq ziMt8naLCw$DoNx8<)v)SZ!0HJe)fO7Yp)Og2KpD1l^6g&DM$L=9seyqkvzWmjG-Q< zgfFwW_R<1U8OioLF?JJs3{s0Xgx&zkYmh4%sgGN6Olr-1o#gp|0w$xT{$w|EVC@1g zGJTLU3EqiMzt~;MtAPJHfFGr)(@NA-4F~RM3nL+_0ngCPy?Todc)~#fJa7m_=eTSeSE3{4kImK%EDxuyCbq)*caV! z%%o3QWgu~`#=qpR2rWS+%|cChWi+j==$}K~E!vAnUeOeX{gE1>p(r6|cjBR;ENqT| zgD(mj-Pn2e3ynJhHB}(@I>ogt7b>?t{s5||WQ}mLI3#xINyko(?_QdG?*ei3?FR3C zPFrtazrt>R&jIDizzUMCOASr<7V~LdC9j%;lw+M#Vhl&`b)Jv7#7^l@gt97>?4FC* zxAx&aR$R=&y9*ee!OS;LaFUzsLK*Sv&eP}DF=Jah9~?g;eVJj zl76PMKFj#*`F-{h?kS=ev)I;we;{Wv=)R}ZKN%;|bT)|tz;969WD;hGbrhW?JU+qN)AJ*vT$!|Q|0oqx*M(`JzBj~e4O9#2*#>D5AO}}gN&5M@AoFE=%}=7&UN#5f$fyh zv@tiPoUdeT=2>WZfw;be2mHOLln8g2A5%amCt?$4(!?H9GBdH?FHEPsbAPqsJ6xlC zji7{ZqL~;i>zA3mbO&CNI21Hr2jkAn#6##E-(mYd)D!qzQDxC381{=1(`CFcCDtGt z(|8`7_Uh;5LYlf_e<8Lv#^MOWitShaT7d~qF~K9%2*MtA1#V1);Cqgy`ypKX2l0bl za8KuA$n(67*OKdiZ8xdY(J#!h>sW=H-u{EJ^y=gfKXkdJ1p zBGr))Z2^D)$UQtt^83v?GTo4h8NDwzSR48aG{N&ZPCh{*oX1~o><%kQf|+NEe8Px0 ze}x%pfh3|a&1v(0NIS%NZQHhO+qP}Lg)ZB+ZB3thzt2p>{Dz&e zGct3n^}vI-bq3d+?Msl8j4kWYwiU`**4#TI#`)G-{6HME#-LQ02INY$jsB_HL8($n z$fAk6{U^(;gzNeGe<&h3D+IzqdLSUMk^fHi|LcE_%XT(!vicYDpy~A==*ABpfA5f} z2+DXua`6g*W|i&Uu&i7;VF0aOZ95)VrnUsEQgQz;(hJX?8Q+KXqr}8bZ7tAU%IM22h7o~G_pCbBkPLdsr}quJKKycey&lh!ZR!b$%sl6PD3rN}iKMJQ>=)kNU(eQ`BXN2< z+tMSLWh?!FtwrO~%jfr3#s#ZS<3`1SIJoUn4{tF)>zkz)-r8o15^5%PvIa_D^ zt+Op<>&hod)iXJ7{jajihsnOa?o7PC0V|tkKtfs^A&>9lJwHBq1f@)_hy|^Tm-qw2 z2QR(-JS*APl-jv#ktEW!hp`PBJyq2NN{N+}l4^9OFgCDs&_Q zI!;&rBvUxH@R!kXoTs@0GN_tNbAjEGk`~z5 z_$o=CEEkCehMJf&AKoo8&79IvSk$Pi^ph?FpB!|7zci-BR$C|s@~@V+DZrOzNRr-B z4eV5D?E=)~!B*XM(Hm5o=>%PgS@WQMUzaNAwfgr$2u}c1RRxwj? zr`B18aiu>>>KHxkqRGEts^zikh1wBbb)|GB#*AT-dFcy()nQdelnqz!0t%h+ZK^?% zTAz52f!febS`tA`J%Fh+YYUk=St=;mq`?=P^BtP$xbKoA_%rd>Hi@HJz1^)N+a-$x zOCZvLOd8-KWV6kFW!tFamR#C!u;&Yi9eHhR#`S}^y-Dvx$)Ke0!#pDM^)uy6$Af~t zgXl43K=h=j0GDxGKor*3^vgiXZe9+y9Zj-*~Mj!;T z03V@y1iBy7NjZD{<+8`WPYl{VEIYefTRYmIV@jOyUnq?9@TkK?GA^KO(mo#svXC#& zh}c=cxK)jYv?y%s4ptY(ox5JEaA8umR;X?>0hgxjr&K&dS+q9F5eXR&YfR7x`O_)a zpMd@aPz=n&q#vwjavYj8#>CGH^+o^YFdr-tnu{I4v%#X+lN3oYIh`$N);|OL5ms_u zh?iGR3WL{z5b%OU<^T%>BpA8&S=x<5Aly64R1;0Phj}6MvX$&z3o(Pw}0OQm#nuF`1 zHG4fmI2L6@qXVR)6kd*+LPGTe$(?E!Np6{wj;22pX`WHt00DX0jT{}Hc6e(4r;^Lh zlpe9yF*VXV=LNG!v#vhKHOTl4zFALc%j%LoKS`UoVb3f!qkXY`4QUXonDv*tlef$L z-u?OT#w;c$%jA02#Q5R;=P}R2h_$|DgQe=BluK6Hug^dr8eu;Rb_!oXgl@1USn`v! z?JskenJj0Yt{d)v+^k2oVyRwtMwsty5A5E!KJ<}RdUm?+Y_-dzeDLVjgw5K`>POTi z_$QDmA&tj)(bV(|H&!N$c@ABdUlLdce#vCHl+SGV84>QjXUqY5oEqpz zsAgNSU@JmtDItYew+n|x%V%M#GNu@g>rj|z)U9(s1}8YvPUNh{yBE9RN8i;rQ<9Qn{;^Wx-=k>K_E~^a!j#-eoGti31wMXs za~E6u40bq$@In_`)Fby&&;u+NZO@Vn)xS@~bRhCk8o=%=FPybdMabyJzIIUfmDJ-c zTH|Zb^0UaRpruBCDPiF&hF32=Dx6c*9zrxhe5qNDS@yO$-Plmt`}q=#NWB)6vqAe) zsh6AlIE*J8&a2FNIhE1;?%ds+c|M*BA|p8-LKnLtLX#*DmRy?d>SmaE_(L3q`qrfz2i?ADP; z$nzlFQiN>8v6KG5L4*|3%no(AQ7{a0m zF|PygiBgWH)f9QCKWt4@p-*_f+md*wyv%Cr3aoBAdm(G=HiTC*d%HM!Y8bUH zeBtrPHG+fi&7lotaLu9X)6vbfbsotYpLnsAa2voFObCUM|9K_&z7V1Xp^RZ`f)zKw zHF!bOfI?qsh!T@Ug85<9K+hNa=Raj`dcgTZqO##Lvn9SwXCN!Q_~LtB=(}hiNh-VD z!iz_KJNl#teDs}zvjr#I#xlHSwHx9Z{Dcub--R9I$*z^u0qc>eXr^5lvfB95F=!6f z5gL-*NK=k?r4)pSdSM>i;lJYhg%EgMNg8HvLr(J)k`h9e4?(9L`!J)VSr}&6Fdt<4 z@-p@m1VBa-fnlAR;vH%q(Xoea0Cf$(0VDULD5JnH;ldLyqTli3e<~XF!6C%A3TK~F zfJW&Et5#NkSz$(ZBkRY9(2@0APQN1_YFZ;G6uPXa(b>pHYOcTW^?kly_{C&q1cOG{ zwHoLw#S0+$c?%LTOkjnQMi#~g9@#|bg1-HVoTzW-ISqB)Qj!B9UyX!@^A6bQJ%7E3 zUx02#=JK+%I*bx>G1n2vh)59RT89Ww9oz(b%mnSNBJv!fyj7?Sqn^59721so4dsnu zF1)Cvt#b68_xiEn=Vj+SqkFUWq-%d|R$V-n#L}>0N;WM{-@>)R&vWas3?qg}DN;ix zIyE|I!Z(diCDkH)VUBcg&t&Q_@>S9oEdNQGeb__eTGxr z{5NCntB8!E*m<9TwCa=zOc-T+tpA0DUQ;o?zET zZt_8%%v^6?eZ_?TH6m(Glw!jI#PkKdiVS`=(VeZkvBoyh_E5K4M8AIMk+3D>4K9Ym z3L{SZKHLUsol(>UhAbFOap|kb<{{vQHoCDsW>HT{6Ot8zmF-=5^bm9=UOY&P%s!Fn3{Ojr%&4L77hINs?*N7$Eht z>s2aXzKNCdyKpPja_(y7lu|jt7^xqJqkRC%x~Cdj-_DL;{cm5dHVRVzwwKma8)`Wy zA*?S9?YcsFE02dwy$TIHetT#9kk1yxA>2d+xfn~z9ERpuMSk@Z|L-a&CsQ!qXhx3> zvrLyr>9E~VWZap>*SC4CBgdiRQ|W{U`oczsT@n}1V)C@zaGi=or95p;B#M{P4N8^M z%bVrDYG{IT$;1qPe?K0XcD&mF;d-jBZu&#H+2e#1bpF5p32&9`5*SVx#?OpBc{p;l z+rC64kR9{ONmbs}QYK}=%Yhnr{oMTBf14t5f$X}`qWYU7E-j#jnHihU(BTcv5Bzx3 zL}0&A_I^NxogW%SIMX1(_v=ap0M)60wmS*dSTnEO&#SO$^{W!^nP~Ouv7J<=gdJ>R zF&7=LKvu$W6bVMn+sw8+0DwQ01^B|Iciv79Rg;7=Jx6QVa9G@V1Z^kvcLz$;e*{9l zqD5)R+qqBIUq_2MOF!?7AcJ~FA%IjvV#Fl+fN7V%63*LI`A0AO)5~rp;RI_Z|K?~} zn0C^={39AoO>fn%uXlM>$*zs_rkGa(zH3v^`fjC=iZlgn$UQjSzhb`Bc>#VYpHkG0 z4022q?jO=UJGnwGAkIAI6-$^Ci)$4V4_knWx()sJ2(`VjzVm^^tc!)S9r{u7F(35- ziXB?dC;6)I-n}QF+}CVhsfP)61eWFnp*YE6yd5vFx)A(w@&K>JdU%XZsPGWK0-bc= z{ZjAgI@KZeJZ6n{(jwhk3DTck{u~%V&W(^!U55`)U!}vRG*VnZ7a{oN z;Ak(h30odktD+J9}biQ?#FcTD*PfVOuaO01B_M1# ztdigD{N!{=kACyDj5;mEet2KId zEUx2C?OUF4ZA&UuR2>N_kJ_6pF5aurWn#uB^2&d<-x`S@ri((C%#+tce)X`I`rsMJ=WZj_^bBTpvx-ou5+GH(LsMr6Rip z`LwAnnB2-&<;)#Cavs@;R^Gon@_BD?$Kwe9f7D`UN|`GIA`nn3-G4WNQ~obTa3gy? z6C-mwIwJs&g%j>*!;VhL4}+>C6MsNhEM6SLQK9&lK?VqRV00d8nY@%fzis0?>tunS+{lZH7LwSW-vDb%N8|Pkib;w&Bje8NXV0%m6_d9TUTGQ{lcQ11x9@XC z!du*RNNWz6WiGJXOZtiEDb4kRV($^s_eX``@qgk2v*qrHe|Tl@8$6B&^1qjSICSZL zOQdp;ra3y^aI2$f;0B;&b5>BB>!11hx;l8gLU7y@QF}LjoKnBu%&GNBJV>-=OWv{T z&_p(FclglUHg)|9ZR8Cj7o4s;a;7RP^engJ!0Z$&3Hbb-BXa~7V#>|_ez10=?`%Qj z-A>CyX-fI|2Y8?(HE?|zNVTCl>zf1Q_0E``lj}X82<*Xt-6j$xOOaQ1*+LcA-xLom z&Ouk(?3Rx^M9hLN6-RLmLp0BSg19A(4aO@e67Nl}D*; z$wo1vyIi2qxOTU2tJ2OOxq8gb69g{2`j;XJCrec7_a}lhMZ+HNcSREpWxeX}Ecv=@?7%`y!oz<$SJ?70 z^Xwh^1(ahaT5@RV=;M%eglZ*yZbjw&AT$Ze0GQQch(AfdkFsj{=xck3K-wkxlcl%K zp|&RXv!Jx#WdblT=bYe{S>yikJv;<)5NSn8eQ?oYKzfA*X#5IKNQ^Tj*;L;oo$#5Y z_sBe9l8ZbYa`QAD)5T95)6I%3kuyAL;O7fO9beiF$Pkf|swJy$r__tP6M55+f~J(} z@!8p-?DdY`OrH;XXX6dakGz9qA&UfZa<~O7@w4uzSg+P_l)w`0X?VLub%$cNha8VG zz*l1@*Y6mclRgQuU0{ekx$bGQe+xbPq$@Z4dMN+GpQ z(d)W^vu*irQ;tDc2GB^QKNRyL3N0VM3t;0q+N{SgQsPJN;KhP`P!3o1@bvBNot>@C zx!XH9xDMdB(!`t1bor+3tucN(ark<cjn6#AYhW81g%ocyae+0`)2-_d$U9;zIlxOu$753@Otzi!T?>cbaHay zM2i-1!!(pl5|6!?)1@VOYEU^v=K`g0P3>)P3)q48oN<<}BC=SX=u z6UGrg15v{%LHdPNwI0^8(Y_1=9Nz(I4M%fnL_|A^WztVrq75{yvJ=LvE$FXVc-F3) zIxE)}^h1tvxyB5nT;@b54Tsbr5}J(|x{QVDK4%9Sw2a>1p|8)GWcW`HSzD6K*nnmu zI$L-GftNUi3gTv&)U~=8%P`*?oQCAjkCqmcHovIJBL;Pq7zWjC{D&P(>El1n}QqnTk#39PAjHx`` zlW+0>9vJmPj0vvM1g0v>;cm@jc9Z5v39m%XImrA^%iGvp9n8q9@74LWoSI%^AFnvm z#arupFZg=9p`|1{gd@+Cz!;qA92T+_$T{P6n|jO1G?O~QSWh!PCx{x@|IUmJk3JtN zpS2ljfgECh!c09-zBu--F$Koc}CmC)ie-PEY9u@uh(zA=Eqd6F(=voPIzkRBa~w^tQp+{M@sF=?TzA$Vch5 z;#i-hk}^v;%;_dGpNC{%CO?}#Tex#_9$ijUdT#>H@U{XK0_U&I~{KWfTY5`D}PT zC+}f&%XcDr66bd|0u%>K3$i-tVH;CMCXk?pnO|Y#Bg0l`)$0l{CfpxM(zDonG5t(% z&Q1b5i)%I!83q}~*T)?ttcsl*aJzA$)3%wKq``K`Algh$4tF@k>6>%)v7tHE0Q?w0 zKDv;y8=;p{#thd zggcZ~1me74!`zdbq57q;eg;v8O{@Tt4!U7#GP1aSD(#8yOXUtfXKIsi#uDe$=qUzi za_qV0YE=>IL+Z9w$?OPHuCL}5qIp(P!>|}9qvjG)goV(JSp%J&R0Ib~emQam4DXkU~7Nx zd-yI4B5JN19>Z=i`k{<|1+k=>WskOYzTgY$L}7TrEKi#c9>VB_X{s|2YxdDVpuN$5 z|A#p&3O5R5?n0K*s?gL8ZTi2p36?h6-cGuWY13nZ8r1t<*lE{Qom9r=ompPHIM%u_ z@`1A>D9wjOOrWr{I4O$dGT(2NKPT7;K&Id1clcS4k?O-jST=khgEa&Ymlt(9D6#`O zw4Aa154Xb;X|3VTz3BmS7wpt2^i1bd%g#n?^k{HNv=LZ>HrJT-)-vQ1aGRRHs$eD$ zWc983nC0DS8XA4MguRWSCwA2xZ^B15*Xd%XT9USCQrZ4?NJL+UM?{VwAUp!qQZds! z1^W&8>pG=V2Or%EFb<~LoTmrA84-;z3757aob(f=lsN9i( zE*BuvUo6uQ7|I1IlPXWoo)D0Z2P}VUPxl0)|4k%2ZGl)I_NrI*)_h=+5fuX8>U`Kg z*6tZ%X^1&V0a8FU`6gg*icvX9iw>L7)cE_DxBE-)sn_Y%)td=V`&k@xv}ht~V6Q88 z^+AxS%!+&S0WXscSm~sJzBZ|Xz-tFW56-*F&gjEzvo3=#puPF?keIyI(pmzR5X{WV zN^AG#?w@y_nVp-r_cWqxww>HL75Mwwv$)^h&CVu#owFnyGS5pJUPMlF&*O_~1{hT*PY9g@XGlT=Fa(OjPdJqNBM4qc0x~{^gixkF* zM@pQXB6Crm`wT!~Le4P5?bl@}Gpow?1oL^@Ax}S#BKvTmJihb`BO5|Nk!J*7OMN^< zQiY51&Z63vzd6Q=R8wvUcp_3hPLlrZIB->=BznRG1k2YsXQG{)Et>(yDV1T=GMlXR zVoH6+@4N_+BoomHUuT;HX2QcN9;gUiIAV}j+46gLc>y9yhNBI8WBK-S;iOhPdw*Gs zX2zHa$5;3vs)mI%PS~9Y<&wc80qP3#y1`qQg%Y(|E;8hICF1Nk?|ASTv=8%BV{jsZ zC!!MYtV+W=|Egzgt1J_4dg0|q0 zw52WU8EdTHohsXZQ^~Vhcr9Yg69+aQAzRFG@f6eB6rYX#`S~$ds zFgPfDU_sY`(wU?#nv!-h0Zdi20|npeQSx<1Uq00w@{U5*tfX<9jX#mS&^$D`?lY0+ zia9jrH{cgRQ|-#oLVo?=baFYK>yOiv-Ec_otC_!al7(R+P#}zXC~m75>MeoKq;~wJ zG=Sz!*{PxuT92u+OVT8(?AMdGwM_N@M#VerqKNu%u8ew`Qt!)!zN?gszGdjqKSLJP zoI|n7IN*i15L1Uh$7}U(=ZrW`4BX-cna_4XN>VIDcv9w-C`mAXsSEn?_d?p4&`v!& zJd{SQt!k7C(+EMQX;PmJqr}nH4>TZgr&J9{IGWeuij!{mX%X%c^a^021Rhc}Doleb zk&dCM=md`0mc&>vgU?gx!~C#?M|c7~L}a<|?2eMFabmh;1=79VsKiIDw)O(|i&Suv z?Z|^YT;ipFo#W4ZmqaLz6nJwxIIL%q;GkC8tei+X1r^LRCi=4gxye5MtG1xj!qAG@ z1)M}h=y{Xe(o>YY(4v>>>|s~ir@`XDvlq%$(?>3P!~aj+C0otCou!F0WpUl21tE8@ zb5Nn2-Mr~gufyz|OuEap_Nk`mK{<;$xzSbvw_^X_U%~4DmjF|pi|K;l01^{E>Su%@ zrtFlk;@e9($*}xDac(eIgj8(Oj(dUl645kml)9j4Z@Gk!@$HGJ@t<*-`*$rM+f}OX zC;FNLy(V}y9mj(kN_`fYBw<@@673=49SbO0O`3=Sj>b6zp0Z$1x7prDM!&(=97R`& z{044GY9RdJxdNjK3~g&I@7~u*8kVQm#6#vPIPq%9$^;(`4Z;a1`oX7}qTy3ivMK{A zf!O!3fnB`c&nE&>vFmi0NlO+wq;M8T8Iy=29w!-75ZPJa&*10;2}mzJx>-lTEs0ec zVvPeThU8km^its=X7h3u7R_xk7eBq{>}T*rno>?CGTV(Blc-qM5`)R!D>jQfaaZY# zLU8g*K+W3{wDOMoj-GtanZtGh5$H}aV8e?S1wxTzYipR5W_tG^ZTg5_ zEhBnVms`bPr(QV_C3~Q5x)ILnf3Vz`6vEy8!3j~!>u6WYDmZk5uocMu)HK|IJLmk3 z+e5~2_ahW4HT6(@mo$-buGGvs3V*Zz)mYck?s^~r|KhAoMy3P;?K!uk)SXRw7Y!5L(O*Jk`?0nMEf%vfal1DZVm2x$gHshI7ou3@n)eQL~7VNw8~ zOC~;9Y$*YNp1s{*?mlp_&RY5Wr{i_OMq4ht85Sn|i`MLyu;^@_(OO_SL9Qdn`-O?bd71CPT%YdrD-~g90hJQ=vx2y}12l=;WjSTtxeT_k~C6@w?(o3{Z zHgI)|#!-LEa%y+O*EU%-6N%1 z>-4ZNsA;jSvMA|D0R2}Ww9SV=!f}Dk8%{LtuWpJztTK!X(P9|Sn#)i9U?!RuIun#K z=r-Cjhuwa`D!H;8uoI?=}Yd_oVl zCm+G~yQ-VrYdp7lHS*ZexBa>MHpFtJUB((``&l`8PK)?47~GH1l|j-og=<3vUhH#Y za{)`~x1F)&0!zx%#)^R=Dg#6*x|V@0DI)c-mETP5>|C5&Ka`DpD4TsIE3gB&NTQEi z5LjEmf;bkatkW!vGVdE2WA#x+e?J;3Zd)p@AA}^Mi{JKRkNWkllK?>fxQ1r0k>I_r z=3L-CJdnOKKru81)h)~x&84gZEZ(y4gfq{S?SoR4^ZneO{l74{3%`7y63NZV7ge_s zlEZQ1S)m0AwrShU00d%|@1b z)k3lx?nyXpB7EiEy9%FKNu+%l^xgD+$d*OolGh5n2oE6cKwx|9}pg`uCe}VACM}L2em!o3X^ijk3;M!%OZq}wq zN!2$MIQXZjECgTqbXQsAj*CZ=sw>R{+}fYAxO)3s)P}y(0vtSXpCdP{UuzVO)LF{s z2J17--6A8a;!A&!*}Uu=_M`{6#<^Fk#J0ph#AG^0TU1-%n3!&7IuWp2uQp5LTC8QlBD6{f6oi5X435!nF6}mmS(F}_*AvR zbgIjwyA-*avlZAN-^{0b%*g#MiCn`D##5IJV?ny}lUR z$VZoV+M;#&#H+sf+qdkt=(9Ju{`~9Us1O(PU-HMK!S%e;_~O1`42|QP0XM@4SxkDV zhaBvsvek)rPM)Yv<4si)W9h)6bL7j@dV(BmIFHU)*vr!k#r8jU@#b z%aglTulRN5W2}}HO{I65Z0>5({V9e5{4cGp+s37JEhwb3NV8TdqYa0oLK>463T1?q z&3er0knVUo?xITMCxj0Lmna7Zu6;ZwcFr6`Nu^{{dHAloNLsPQDc@u&BuRG{h`pE+ zhuGR(+Y4auW{4qzI3VZNToZhk+TNuiT);E?Ma}RAWLwMqoPt`$v*~R*A`HqKO-NWf z2_3EtC$o3+jScpYX%>7ovq55@pE``?wdwnnDM*dTy6qs81PZXsvb~f4Co6c|&hSjD zVeFXy*shOKRX}exovp%1xn$XV-PW3LDYs_RtdOt=IV%iraMwlC`+nq7ny7GB_-ThC zUdx*kzLHSS35>nL1jo_0!oCwSWtuM`zzySA)VV7!FJ5#J>n-yG6v*8mq-)Wdc_I=#hH>{TX@r|yEn$pO%xIh7soAG7LMdOPnk^k!@W3z z;D&EJb>N!O*F7Z64OCkV*3dmkBUtL{^(&jNg5X8jz3VSS_|&9w_cHmsp;R*A60oL0 z6dI>*GfD>ZMQmhWW0(8yd9DHDl zOD#h43m7=&AmO}(&e}TmrqZ=FXWfS1?&11)$QJ^G6XM1&g;(8a7{F=8RQ^~iHSHSNDl~{%AbD91vJ^R*7A=^iNmgMs{X!=Q<(9*B z+O5%6&1H5&4arJ*dJx~Vc51ecWD`8yL|y>X)4lte`?r118Y&|6Ja0X#sck#yeuMcF z?RaNq<4pW*<4EtYg}=#oGqrf_zfP5}_^p!x{f4Xx0vFf^<0$Kqjvh11mDTji28X%< zN#eR}v>KsxhaTYDa*?nF%^j*=+z*$|j2nja4>Oc--l**2i%9=OHZDW`LQ}vKVgXot zW5hp)BXk|R6;S0=l~bN95_LBaOV4=dyscGiW+N?T!V<_4pErjw5L2fsO|N{C{RkwM ztpZOS$jY;Ny?p3X|CHs5#}Y!(IU`9lMclxE*;tR)$8G7b_6GErPVw%ChTf-5Vl-A* zoWzw>E-FtU;#4(4YKZ}8Im_TylTQW`C_gg636^`c5}sSTK4S1&8V6ZLD^D%dehjy! z=+Bd;zF$8J#)HOY862a!#${){Q?G zS)humDUhE}aeS=4rp~Z;1Zz_;P?`~kI7$x^?)A-uKIlg@nR?K#D$_@hd<*(CEpDRl zC&!zvbCXH<7F!gyjr&LNz;bkVo;IA8SsP79mq>KD7DG~;G}1kONd3+NtO16TebobO z+{}~yVd=H)`$|>~l`jFKUe9ZyYLrzdx8=_o!xdy&=(~m17Mpp}FBQr!yArHddx@v~ zY5PteLShainC*~=$o^H$RW0#aO{~d6B!t`^FPA)cdMlq@ib{ninzKHQZ_EG_hj@m0{LMyD|z-%s%z!665 ztewE1aGHg*1&tKq%G_>Sz8}4$l$w$c418oD;~&@8T{p4bTYNkPygtx&I zqN7zrN~(?DD2(F7`^L3XNs0>TU{wY_O-20~b1RfvWSuyQO~C7ua}E`g)-J&@`g4eD zC{)QvbU?4}O+*sb(K9y3wHG?Kt&JrT#tMPY$iP)iYA#?#n?NfB%eo%BqW40CRmQh) zsxrpfT2}uS#Jya9Kip#+ZiXPTwe6Aj@%HJ_4W1ni%(glLBaGe5T%SbUk+*V-AG|-E zjh~HQ@WvdlFID_SZZ>Osx8KaGNNlSj-|QRAb8F^h`uTH*aPW92k}0NvFU2Vp1!6yR zI7w$mk&0`N`7(Gmb#?z>4E_xIem7JnHyZU;*wpBqUTxZRUD0KagR@Y}#y}i7=x!Bu zYYbeb&HsCce&TG3q&v?w{E?Ypg-T~Rp|sf_1~XoVy+}9`ONFl8yW9xiQtkE{%)C6m z7#OLD!4!8@7>bWpAz>qqb%ajx{`<*)o>;g|L8J7U9VXLbVGkECVH6FP7SFXv-5qyc z`@B;afW@n5LWx|K_9&WSIwWee2`>Zkyb(z9%o&GLj=1e}uPT1<_IiB}ivIv9t%(=H zu0eC6bUGVVJzWK+!pGwg%WVYb`!nL;9K<8JD#4VYhg?ANx_TbWagT@Sz0-}2O>d*s z?lICTl7BL-K{A)ex&->;4U7ei_vdOhBTPxM{EetZKVegjiE zTx1Moz2@Wv4HODICdW}u10koj1<=0!Dl|d@{>2Dc7e&3IWDe7*Mfba^&S-H!ME=Y< zN#al9JRIefNCxR`rNiaFeeSsiYv9@aGe$gpJjeT@f3v)eNdum&TGJa3;+2Qpvq_7) z`ZhciVbYo5x0wBrEC(+TpJl3b$XdY!y?7Kl{gXP9nvC+ZbRlDa`@xb}_MoPJtrL!e zd#8Ri0YooSjtvh34EorZBrz~ik9tRFy8<} zgd%h=qlEsny4*OXYNpiHRDUb|091T4hVz=hs~p&i36Kel0YZ2Ju}K;}iQ{B@A|v!t z?|jQBLNbG1dRj!omYyDdc28Tgw~B0V)PdP zwNqF`-(4VwElaq72saf(v!tMCnhkJG06$yx~pYU-3~r+8Tkdh*|%f1rvYt zChIVFx9oI}dBk?my;YYlfP;7z(x$tMTD;SI2JV+BE1T9=QCyl|tS)QMIV#A*?}{gZ z35>!gFNeJu!l~t_+B0}MI?Sw}E^_{$yP1S`>^!6^t3c}J)D7m7JxjXi*hukY#nt!o z=cEE1>oUr+^4Rc^TJ&~N1Uy959yOf;%cT)3HZHIrjJX;Yg!QMtx+xAzDe*n_{kMIo z!KLY)yKf)1{9+ zZHyp)Ut|A-MKPrUMI@J#Jvk4H<7*Vs$dW}Sl(W_p4fqcy2!n$l*)va#oZH=8Z^I%G zQH(p3T_sPi_HS)(Z(ldjyR~21^!Wl>*EC)V7r1&a@fZf27!U5e-GcEKJrav2XtJfj zjdofzX`gM!I~#U2=<#GYaBt_BWebf_?(x>ex-QuxvF1)_4mf6b@A)4{eACp*+AtZG zOkR!;3qPit_4Kw7I(w$4fTeB#gNPvqtm@O?-7%*e@COlWv592;YS}X{PO#sebLAKMzj2%{{Zb8)Anc+A`q?<7A=bKCSDZ#kz~OGk=+e!mw!LoJ^)&PHN(lz13M5XmeKi6C5qbp;oahIZ%Zvki@{q6;dL>uJ&!3Hr-Hns*8vtyQrm0;TQ5NbtQg0L#55SH#NGo8g!YoDXwLg=v_+YG4b zrxxF*9bh<%PhrXxmD;UL_ZO2O2(cSi104S20zTj&ffJVD-iE{WVuo~3 zj4&1Nc}zP^nY{AHMtQ@CrD>lg_}n&)<98w)M$t%^iU0o6Xrf?OPv|!VW+*{kogz5) zp3VTZBoycbq*9DKiN3MB!8RC^0oAH%^Oxch^@%gpf)!yKL#b9PD3fOHDZ&WAN5R9C zWmGeqZs}_GFBoZcjbEtwZ#HdgkLPfQ^H5hAv$Th%G&BL7{aL5x` zAb5a5Wz-Q1diPHl|22$Pt*2WQ^KAYK=tvW6`89%2jZbozrEMfsyQlU@A+Hd@_sPWc z8*9?mZ*k^c;9DlNBpM>+4lmb-!YJ5ZgbI#=R)qx!<~?t&UyYJq!LZP;+GWRZv@!BI zZK$(WbU|HJJ}eCF!5j`8B$#&8VcX49_vNq1`mq8QD2Yyti}D`ZM$w{)aSwZdGOIz- zEh$!!Wn&|P)jcZbdlm%|^VxgZthvc6kwCx!^f2z2E+xAn+<=Hl6&XZqQwE_C3!c-i z`fbIkaODnFn|FfnGzE*4_cGJ-_nnosl3t+I#TYv(YkO)HjKpMjf55Q9Zg4-`dor{F z+2xe?%4ZuaXDZH|lwJMz)l|pI6=7bkE*Ee6uo$n5;~rBHj5Lfa6sKj229#}4*x<&r z>@Q(rCTFBA`6HCtQCFr7w9X7ruT4Q$(S_l}LgELl1~y9u$Y*AC-7W(I?d+5w0(SmoX%7V~wAuv3%wF z(Z4Fc1cLEFzo{q$YXw0mhr}|n*d`ZRPeLAK_;`T`uY*M@|ky-uI0+fyKC{%JXHk2z=+@WlD8u# z74y&)aNO`Bre~@(R&Oeot+N|ZE43p42-WKdzLlE?Omfwh46mQahlQ)a!1pJjtl1L; zUIm29qB$&R)wV?Y4eFQechxE(!|umNO5JphDqsASI7LDRPZtD_^8x~ny&mdC$qzfo zuSl2W>}JVKb3i&S;_<62!zS176zLu8@;Ef>M=k~G&iMg^N1znC@jppuf6}PG z*0Ui`pjAruK(*x(Vo5SxK5w`zh?r-$x#&>3e95n*6c0aiJ~-*riTg0O-wm{mU{r%w zvC_3VE?-^nG{bC!9$xOBpC`*|->!c8fBDpcY=iBKZ2JR|dPBL5b2nuiLSL??1K+p8 zkbIKPqz;j(4Y)VzgX=wm%a##)S9u8c5}+fJ zX@{r4o1P9=$E5|rgg43~^VjE@MB&4FtCxnH0iT|B#Lbng4z$aS(WO#h4Bz#G$~^|| zOz|9m^Rwy*L9Wmo7(qaEq$zBe6M9kd@PZbN?dut>(= z?sS4wXy2B7#%FmEwrGZ`27KMeR|Q-&@AfSqsTU&uHpeYBDQ}RZl=HLH=OAXL4@_#v zf&7jDUun57W5D#s-K-AV?|)uzxTgwVA(&t9h?|gBcCPHdK1ZP$BPuq5qx$eb8!KW@ zNhH-vZVci0!;g$YH2oQpTtmQWYMI|uRtmOOe!LbcTlR~qo8j(HbtX63HqFerr^DB+ zdOGB)_CwgGC7rA5ddQUXui&cC==Z_E)0eB%$i_QA!zSe}o%t|4>Yaq|t}wi1flikZ z0m1Ju1olTv3NfD~N1ue?^YkLoIL{3ak5AYon4p7;mz)9kk6Lg}RW5Q(Tub^NdEzcB zT&+dl$AuAwodrRqzH<6p;2&cIQ5Ix+)Ci4A26pfhdXk_g4n_p-{C^W4zYOZyYzidr zl7hqjUg*-KpxG)Fh@b{w#23o})o>EC7wTz)b#R~;_%~^ek%mYUCw4k@Mg~od>lhN% zx(Tv;7r|M+jyb3&s@9R4$fIuC3^i{__09=05{qN+E(L|6yWqz$w53>HjbZvyK7r^zrVU-UMCvy%|FrB$E)EXkH1pmd)%s2*Bd@96B3tHFM048XUr6*mMP=+#Slj zfBv8Z`mJH+uZMB8@1s9YPr|?7C>ky8`5}=g(2@CJl2%lXj7A3yE@DC2@LLR^jVk-3 zxX`$4R!VTKk^%ok+Br380(5J(jJIstwr$(CZQFKr*|u%lMweaPWo!C75i@gl;zXRh z%72hM_ugwgeL&N5b9&tk6cF}W$G=?l(rZ~YqpeyxCO%WAa0*i>{QPO1bU@X&b#*_0 z)=-i@Q>*$a%ASP+hizPH+);%i!n)8l3K{B4^ujpxLA%(1d~`7w!J0;17X~2T!cy>$ zN}y-qD*6O@sO1bZoeC^CY(kxtgnNzBR~hMgax6WavgECbzOBb^WVgJ*HW{)rH2L9K zG(p{hI#(??Wl!WF#9S5v0l&n$wG+&hMKc4brYT};fLc3sQ2d2Pf%>I_iFRL3I|Z1= z-zA}}wh9;X3yI$gOF7ye@v@){byI0QA+`ndkAVfT;`mK<7SpRW;8vZ+(EVZa>_~k7 zC>>4mP9q{*exT!#FHD3ervVRb0Cy_`YdUoYd#c8r6dhQ<2JSH)efQ!qX!P}~F=yn~ zOYi7;tXk9>kF#F6g!tx3p^4iMu_OQ zcT7+DHk|W$w!o*b^7>)lNMkpNQB`bCljo`fnU-uKm*6G1BdGo`c5-cJ6>;j-iV<*W zURrRKqaazR;MqjLu}BQMr}8(qaByK+r1H0e>4EmZDy;!GnIP7q8HChoRP0!}HVBt^C@Z$eRANSw=xX%1Ayj8z)W32ZsPmSqLO%AB{1UTmF2Bf-JV{5|!G zg{kL=|7NLx7;J-=Kox>d2f|Q_+P>%sogQqmgvBMJtUlUMx0DFw-B#K&WvnaD-SRrg zl|6XS&6JHYf){(TPBJ8Kx+<5Xp6>|k_j}r@N|tT5IJ;&mQf7v$f(H*SsV)9uZ~P^M zAw51W_R@g%ZII;dp=kjpbVWacwS&M3y@*8rAwck)SIcYy0UpK0C1_52;a5y*LB>Uq z3i@9~=n3~KaO@?$<59;_m=Hrc*|+5RuKJ%A$(_{-W_jt7acLDIWkYnVl-g-DhQ~UcLl5-fjekynl z*i)$l&HPkjIzE&`ZI4cu4ohg9Q4D@+XkvOwSv!$G$NC`$zG4~CCz$X zDt1h+x-SPG&ahKrR2Bx;S!xZM%_fsAoNkkzyv9TTGcfM7DXGd<$yB3z?S+Jpn9F52 zv39C?SDz$Fs|&wM62r#c2eBv6BVmgKe4+1F!c^3d*7*y%E(=U`@$lA)gyX+j2j#KZezz#)P#mQ)dSk4`f^+xhg@k zN83p(WkX`t#_~2aJ|QyFv}7FW^$nUtJ9C(Jk04_h4aa&bxP-A?jEx3xME=39q3he- zVaOlu{)2(LJBUcA7@p0bfWMLl-D7{-9gIAAFj<`|g>mySByk?P84!oA5BCZKzf;wq znNx=u5|&hpo1T;4EU_+6JF91!g)GL$pR7c;c%*}@YJ?C0Ee>O+p{rpF3lsaRgQC%q zcfA$XQYglSx3{=Ntz%Nh-Xo<94auI0giK-|GRi_-(6w$_lNd=Dr$8(E*DLBds{Xt1 zkj41U;XxPY?n}+JAkA^LD&WNLgP}x55N;&7zz{U_W}Q}k#YsmEXea68Nh#wl zFl8p?;1W;^W2bi3hrThJz20sCEA@A;o-yE;kW3bLBH^U9v!#@E*&iSsx$XvSebH8c z$f}KYIY@<#p(CZJtSqH@UA0DfBWk%K<6|B9zV`=F42Q^Ut%=CmQ!7kj*pyat#$Y(- z*MN`b{VD5nZxbrxvVUl37E@;NGi^+-Qc0maQ} z-y|?^?-RZP+dwrqJCp{kF3m(Dr>qfS=1duEgC0`p{4h4blZ?|B7Ub1fH8~QmUFAs< z0;fRZy_hv_ekw}dumhpE!C1BBjG|ixm zt^v2#0Ec46{t=KaEu*e#M0yxK)@$YAH8|cAJ5^XZmJqd)4Yg_PunH62iv-~e|qJ56Fl+zb{fQG3v zoLNrAwnmkSC^iDaert0?yim%CDZ!X)Zd;=>%NS*nOM|fAVD8W`++#H+q0*$&6gqd+ z9@u0#Yz_whvT}1|K;H2W_oGg`)C4b>g6C(;qt_{G20-Oo`(}GxZTmHO{N5W@`Xf@w zOZMQ*aauHH1tGpm>nrC!cy~Apg_(l_0K~98XJgtl*QHaZD=RDvgU})o>8k&Gm^haa zRNY5+V?#biib3GwhRvAPe2zrPj``i^deWSd=>@btes(zN>u)w_MWYw5$MeAXop+w2G zF3LWpB+)JQ!`?zYo7>`cVBDvCpw~f{V4n*oX8;ZGUqfZb^lQnjH0K*wtWAw$r1rp9vLKyvWaS}2j9=>4xJ0q(+N=mjLqGUZoR}{~2 zDN~x)AoDaK`a`rvmaK2UUzNDUm7S}01>#^9P= zAq7IXA{!8S$W`cD_-zp_cWU0L${pcA)`iv_{VAUg!pfKR3^5Yfx@aTyQJkUuL9j?S zzFka+wmhad*k4RbTSv1Vd7!r&Yw0lsaOn7rz0)Ld;eQ|cnVH&SS6jawU`~Hvwap>= z)!tTkw{;w-9n#v;ar~zHGoYrK`uys%PhrKv9jGs?8PKl6uFH1DWH27HvQwnZB z_VTwt0|8ZG|97Pz`Tu~eclEOR2iC9h{wLHvc~9@;hw&_RG=efZ6|LWri)>nXh9=Wl z>XE#&HwOkRoOF#a5L8f^xBmOX?S+>SG!S94uOO(xxpM!>q;_1Cut`e^k?zAVd{-`(LRFwdoHUK0n+8Ujlmtgpw^W@7g;BcLd1 zUZvxvZPN;o5j(Xhw47JV5g`d_2tg_NO({b=BVWL*7>&mzIS~~7IS*0@)gDMd{1*1q z|E8q!NdAm!o;ini_R}`c2|doGN!|M|uEee#VO}x1ocvF~T-{q}L?8qN$=`&+{(Y%S z3z{C6Q?PGNY2iI9lsW+Zws(=u-#4rD*J3W@`J4q4LE;CIbn%Cg6IYAl2>B-CK-Y9; ziUZoy$(ea(B3g8c#i5rD$QDj4q~q8kaEm%~;#g*b!>Ka=DPsyJ@+cGqB%FiWQ>XoI z_=1s6JVLJAZWT5&N++I!Xs;xmeBhUOa?W5XltM6;fy7t&z#529x)`uBX?DC97fd?P zzj7TJfr*5WR;+XB6PHU;nd2C|k;Vh$7%sU3I@fRt{11Wkq301mINU7yjfyN5Va7%z z@u`TpypKg-717A37qlRM6z`u-?ZaJ38GoCYcv6F9rd(JoTjn*gp4JIG>tP;)=9vXg zqe}C3SX%)=ESnFyzu~$&yD-1qz5V9)KO(NG`=9pm`ppvL9roXmc<_46`kx|h>iFRg zJ_xQqUl7*MI5zpx3f>srhk<7%=?#Zeo(~?qHv~RBy}W1neS5wg z-CXLPG|!o-ykJ^+Aw(V}{P!&^FReSR&}1tQ1ULZAqyP|Yz25JFyqw~!Ai$i6vUJba zc~gKpe_+%epRtL+ey8@Jqb_JxV1wj`6G=jQCfkDMd+0o|kC+^v9dvFyucp%9RzaaM z`Ew9YD4FbACIwF2vI-vmF=C_SPCJCj6=Z>#v6);7pd4@-h@C)yIbq5pnGdWc!QN0m z*C)&^@c<3tp$W$KsBjzsqzgnvQ)r4*kQk7y!hVAAKxb_7JQX&L4(A{)W!AXliqgyL z=G_B@LP9=Tq;Mgj_^X2>8<=`v%LuR$Xt*n2&ImPd;e82TiJJF`f(QU0{H?#+a4^e; z2pt~fKPod(BPfXV>WWGi%tfnLij@yd8YCb+5Cy!(q$B2{?M=FkKoQFea@36UvJf|E zG))Bt=O{MN+Kw!_cB;%8*H+S;3)A`;(4sF#P#3)InJkbq*~o_eK}Fl42lH9ebpa z(2Yn!agu}x7=D8l8gm*L_9j8-)mR^1=8*i3PGQ62_r1LxRKO?rAhNht3AnZ5{45T5 zifW`ciIAg`OPxrCWD-$0PwClKVcS61HH5c*k>v9XZ8xex&>xf{=T*6i6fP4(^^kBO zu)lXapiqjWFD$DCDE%BK3>J;q{zH`<&hq(nUm%BJn2s=SVsP^9!yOdr1K7?z)6DT@ z7xMbTv-jV>8b^x@5nnHu-++V1gIEeX$TJ|;Nm2iBD6=-v5z7{Ki8{Uf9O)XL;}h7Z zvYe%VjR+#7pbm$ukP$KMD-Hl7?nbZ~Q()^LjHgUH4|)##8gwRBTgnfPBt$l9ScDNg zoOn}akz^Aj)@^1SfJR1-eGoez)V;@DvQ5_+2P0!j)=AIP#ob3LDdi0hKm4iMQ?JE4?0}=hJ^iON9Uh|Ytk5sFx;u~- zNPR#`55k_zEfGBcn8l-c`*okq7nuL$#pk=D&H?GKv1 z{%5za#3i#M?)UEdDw&7#os(nuTl|6HgB+lQvHYf+;Uu`>j&|CCpx5+ITT*5|f`C54 zfZQQ>Xt+{fW9)#ckR4LY(a=`u1j0gv9$CECt00mgHOk!PP*h+Q1JHbnH5Xr3$%SOt zD2pUoat(YX9jq-BqARHM4FmxLgUPMRgsM+E zu&lpLEW?LbrZ2<|1pbE3=#TLM@GGLsjM|dGZ@G7)uvZurv^A4otAR?{>mnoWHexHL zHor&>5QDz!NY_RUNHk_|%`F;UwGXU6wMUX~=`P&Pp^eW&X-h&lnkQ zgNCsH8-X*tefrlYnmCCIZ=tm72!&gw@MiDgl7=YO?SfvE$D9gxXX3J2=!dYvl|>PMHxYBExh z5w?LF;<_$x89ZI<7$*eDzL3re9did2iO=Q(;o4d$J3%FJ<+}|IN;xUyqcBvsFz=!1 zu&U`$sqCnJWT7XizFT5DI4J=*D_tM>oT`TAznl&k(PgoFon@7kwQPi~3m3YT@D!~h z?oH{$nGhdcVXF!8Y$r|rc~j5`gVUZsG;vS^rY;9OQYVT?5A0R3EU{l)XE-IB)duVg z^fRYubMh`eTLl<&+)msR;aSpEXS29r_R~fDB}6Ac(TTXf8nM82{h>bW1dfs~(9uRk zF95>|>?h!0QAd!kCC~Y}S${04X;9y~wo9Ww{R=^w?B{C-;y|M668<4w=Y^H6BsTc8 zPDIU=0OdB`*jNBw!*JUh#j;L^(;&qNG{J|^La^1ctgi|gn_h-6Gb>t`@Tl?lgEW$W z9=8*NML2b^tMr%!Q?__e1bqBllI3quHaa-f3RX8!R{k*t@F|N5=w#&(pnRjJY89Y4 z!{?MGJ)_xM1p#UwumglOzSVzKVWl?(02y%|A}Hh4ulHa-$Uu!292QJ7-Y{5SjuxE`B%i@|3NJ33ioW`HndN za&9iKI2Nk7;Zg9C@Y7_h;P{XeYEDp-DQG185A1T>u8|z`{d!D1=R4H-%X=$bUHA)U z>`E&ds&^5V`e)EOL?8Ln0v}hCm}K3&0mN#&l?{O(Dtd!qv+}X$=LLyI4acXVwSjU# zTdqv!jBj+B%b}iQ`D>PFQp8!hI$P_~%_K>nZ{_T&D_*2aYsa&)f~F7dI-!B`&h!z? zGBa2XWMi^|zW5On`qLuQovoQ9hFS0_usp_NOP}NY%%XCJnFn9uM)Z)WLi`3)LL&%8 zb2%b?u`#DtYENjKBmu||yBxJziuYQH{_NNlMkw5LJKE9C5NEyL=)GE@8(oV%FkRPJ*9jet0gIHi zTrxU^6F@oLybsPs(Z^~E)z=97r}u+m^MY>E)&CD#-C1jR33*3t>umyL0O8P3dy%c2 z$CSI037ofuZ^UFq&DsEN|9~y=?nv=B95?LP^-RdMS^UWz!@o@#lyFe1P*6dLU8W&kUsxWI8-fQ^l~=iU^2{F2-X5;?NwWc}>#uK~J78=mK`~y~ zVREnvHh|QWW-4KUzVSq6ImTZHw#Y_hUgkmQc{m0Q!JQ{wDL z-V|!VK(2cgyHZAOQGYtcvCqB+3`oNlC`<6FxvakhhvaleQ`DCdZx(J8neoO2FgPimL~rGa!_;b=gsapfn!r?j>zr0}}x$+Zl; zH4R*74YE!42_%ABBot=I%YW0Jn=6;NT;dnKGzxLI!@BhEF?(93TH}z)S_%`n{OGu9 zLNJ#Zns7b@IJe%ptm{=~#G2x)QzqO2o3>$8@d4Ix{06&byYwWq2#y7v^}r9VR>98X zOZ!xhV!Xbf(+a7J?$MTHYS>rLbe7Ooeb;U?R|fs& zyXA4SuBhSHjdOO8{1~@ZpOM*`Edo0eedZDZKRXR}-6Oa_+B+CM37Ep=Xf_c$0X#ME z=*~#X@_@F_{U!3ie_u)&30I54y)Wx9=$`D<@o+a0)Zr5KUG)6l>S5@3!V=-OmTDLdzv^m< zuSn*?Cz_T`VYU(IjoSi-;$w$Ki1MaFD8`QUqaujv5Y##7vA$2^^KX<|&0Z_8U<;HgPiS;r zwjZ0tV-MNI{-i>*LL~C-q1}4Y?AJmo?mE`&m40Fy{g%nn*#^k#*a{MPE+Rp{lZ z%2f2Aylgve)1@jR8G=2I^r9&pE}@=scGZ!*WtBT)nfL?N-vF7wzJZxG z?}L2eC;#e=!71^l+zU>x&ptfBXNv^cOy;pIp55@-lOy)k$jxoc-_~Oi;95ha0*iTA zX8#@=kp46uh7Aw~{tNLPDP8933S}QpIkY=G@|qcHCG%Ya@~dILLAiChAn6q&5YI-e*a3iS!GtOuE)#OB7jfkTYGNOGH7$hI;^UdZS6@2f=O z#%Yo8e#v!wUrIrX#&Ug3IZ;7MW|S-sRKWDD-kJ{8Wf<5MpJS2sHs?W&wUaGz#%4H$ zeT6*ls_8Ge6ifa^S*hivbixIg=0z{u4i=C2Sr~K-^V}G5p&~j8zJ@L^)jM%3X}oPD z*w!Qi9ARi66!#gLd(FO}8kGC+t-XjlD9n5AX1E_OeDnPF(y!_6b%slK@m1zXsTo=(o zwBn#8&sOQ>RnonEWj1FAQc^#8ARYzk46GmRPX#szQoN&Y*q0ipHfX>fW>WPJn+xCUO zSm|g%$j5*aW0|1Qe=QNdh47Q)nYn8BNYCC$`pK9Kenx`i4Z0DI9}g z-Aa-I7GVbEO~7K^tIEqsN=n1QS(b4a385Sovg#dR)$Y4h=XV)OWG&4d-s|4}I^O=a zdr~ z9c@-ukDzW?0D`FpPk6$nzLB+TE-G#?U$Dkn08~NdS^A+$p#i0sm2tg-EzIu16-dt0 z_&G%nWsQ+E>gW_&0Z-9pC0BA+mF>Eksh1zirk;?{w7B7lZ|kgZ#dvc~vg(WrlHP0D zIMMt`wH>;h^V(VGeYyhVJ&5`Ku=<&kA-$E_dVy*|7kfUp*ormirlDw!p~Tht)PjrD zqsPjV+`A@usWy#Psc}=TTQe`hM<4c7RX6#~+C+)4&S-hjtnv`{A2g5m%-?qC;b>z! zY5FYmt2Q*hh1z}#e*f2oLt`z+RtP!}kh$uA*Vg_YC}Z7B|F1H3SN9+PAfEi4SM?du zs4Oj+T|`EKV^C78(j-bzlOk0sX-DtYJsKQY7>NwE07O|!e;4r28T*0-RFpfdzS}s( z3_inZ{tqzA3)koWxrceq>BZ559WTF$7`Mf7IQ4Cu`he*X;+VgmHTjo?K<)lGj1XW1 zdA)jYK=b^Z6xS4uab((fXba);FT%wEMSti?EI+r5s#uGR#&a^p2j3=|MPJ=k<+xp} z#eBNQaQ*C8%?ySIu6VwF{JU+-?-JixmRG!+gJ?`SGHLLbrVP3zFo=eS1J}o8%paa^ zY`r=06sGLK=&7m=`YOA@O}8E{6p<8V#LaYGbG5lOrDV0+1UpZshKc4_hAPr|&E&zN zH6;I==6Jti(OwD(WGDaYRU%uacx zQl)jNb7|bttcFRaWFBXpznU=X*%1e~A1Je{iKK^5vw7umVd!X*6i$@db~#<9sH<47 z=qWUsm)j>+B=ir{ei``RonRP{Z4&Q}<@_PbmeW`LTE!oppFXplsg~&&dVLQcXQC8) z(^U7JJ&sjY(H!%gR75LpK5!j7hNR@Jxle620}&|Mv7$|!YFBFrv^J_YTnE?0nK<31 zmXaY13_U>SrJ3Y38E(#}aM=-X5vadl8YrcW7vwO4WU#PUDsZH-j*5nd%}AJI2*<~A zKaTVA;rm)8c&G}W^JVuI08^@B+9SY^&fSx^K+i}E5(^0$H7@5LeMgwVryE3EWPx=e zSwg8PN;dNX7vA5jYuOk14b-dH3i2WUaNRaO(B%m}jq;f(Klg3&e07p|=NxYz4W|nz zzT1;$5I=Ll<;cn12ZF@z@U5MWNFjYD} ziLg_x^AE_zpz`i#?Gy?Q-+{;#MOqN)cbV7l(pv1gg|Tx_+2?o4yln=Fn9UGzXp9Ch zR_=q^`}9`IJJMMCOb+4493NIhgM~b|T+Ou=?2R_cStLjfMAIW{D)pK6P#S8*;I`(8 zIzLd73Xh4o8&a)1em}cnTT+?q;p2ycrkP#`;mIA3Dsf~mW9QHB8=W#bQ?}RUOKRSG?smq`b#$u*i5|)rrw3Nu>^2* z;^(i^UAxVux_mOZoN20j*SZ^7V5D3iYAL>?5(twU#D*Vj`o88DU)XBXObr{tBjzha z96c<)mUDSeI?7W9xN5iH2%-*eofUv+HkYkiSPWNcB|mYcdh@Rag3TffiNm5>iogv> zweJ_-Ro&Vlw`#tMbRYuT!PdRq$Lvk)T5*KIpN(jN@fvVTUBqVGx1U>0xC2vnxHvAE z>evy+*LrD*w;N`(a~+a1PiO2=z|>7xzNkQH93?B|b&YHylE~;r5sT7G)m!jLAix>` z`hw7YQNR~6aUr{6+_Qi7@9*y)CJLt2powk@QBASl70eOOjSeZglf%}EO>M@pqdx{>fFa7hi_ooSvjryC(}yPfcp1y0Y+}_ ziB^Wz{JZ}z@nj%#^pM{^*Gg4v_E-8y4ekM#Q@rtsSzZBbSdsJKqL^Wd=oN`r^QF@; z66HI@)C5TAgE8yUCqVK!WSpb((+Ulkf0~dmdHl8EM5m6ED!uTwGCk-QljJtU^xw|8 z!ty_8arHjR3Lq-57KMl0@E-J#SP@?Kl3Rpd=}IT^#n+F=QpT*YtqCb!v9s)>6wWq$ zOYVw~_=BPc!d;ZT*vi~zR)$1;|0J5wNrL|Pe82FXn$_G_WPx&JFPsF6IdS7J#CirB z34jLi@}T%=Ux8^mJ$Ls(QAl^W9ji8AvaxoH0-i&#%g%uVF1H{XKf0nzv&!dy6qn3{QjkpUJ*vizztnP=G ztCwFS#%CG?9nS;5Mp*PoV-`oMa9qWY=vf~0@w(YXA4>cb#1u!d%!k^?qP6|2 zU9wpuiJbf&rSNf;{l;Icw-}~&z9n+gjWvQRkPanQ0~Y&-iZBq;&2MF_ma2Zj!CTTn z1%nk}o}@{O(^103zbQ)8DOJF%Au6|QvXz(OP5(s*Dn+b-g`=*-U+3l#eUk7>V2U0# zaHE!w2@~JB;t%p|IH3}^_ z!&b>R;sr0eccwBa(bP~b!3^it0_K=%r|i?3M!85UG)v7T{A7`(<>ifG49g`6lnj@k zqUNgkyFnQI=gDqI?omc9p6&8`QAS#eIn1z`c%fR@79foa!m9Za4391uf&L=@WS{_L zBh~=iK}haW$|lygQ9u172rG2^j==KadWH%JAVrtfC=rf&Iv-1WkPX*;lF@bz@p`KL zml2TXo2Xnjy>*O7AMwp*-Z+TsqKN#SS?19#m)+5xxX?TLD+Tj+syjNY;Xx+vPs6m_ z$@$4GbzCU@hi{I<;xhxUg;ze9Lhta8!jB~c#HD&ysXq$Y330?=OPP=}?*TCHVpJ{+ z&9+$WcLGRa+ak@2xj`s4t?qEX(zjlkMy<=@e65GDNlE?nj`15uJdv`EZJM+LM=z)` z4gTQ2Z3Tyr2t;!_jvN5^yPNC$+IwsP))?k@Q{lPKh{J7dX1*;e!^zhSN>~XwyAlbAHWlYLL|MZnx%@*_sCQ$X+@h0F;uPL2~D>P;76~1jk(`?VnwFzRd z%_^sm#pNbRTmr0lnu&^RRoLTnCd=g1Kt{GIk?Uj(GLC0-T$<UD;c9c;oP z)3x(5PHO`wZZZa#D;JHl`;vcH{{C#rYc)Cad%9zn7UbWNm=Z5?;sBQ zeXh4Gm*9|#vqT3qQa6`2w0 z5SE6)?ES!Abm7-&&BgaS!cTw(9WoWCV)G)!bZ-vA;ad@9uc0F{c!eF^#~lv3Iup?$ z_Ro(yNTlF*3SOY3GPG6~br59PLHF_7IKb7L>3OzVo53q5?-JsLvPHJvY08-nkUp;G zV+i#EX`={SA*g(d-8HkHBIzpkvMQ8K$_7ba4uNWWOkc>cLJ zmz}2m;J&$tsKvd!|DgWriO2r+t4wTW?NwlJ@K4_FO}w0~`V8UJ1lVk5?n_fMmdk}L z^D3wGMQU`VtaKrx<;T8nU`P#*Ewuo6Tyu{f87QB27s>;v&;ceXv4lmavfTLU-G)ct z)p12HTujp=D+M5 zyoPVh7Uo0eE@8a5+pC^#bdT&W!-ru0+8%1+HY)SizYC9dVGW)yDu~Ncb#A7BU$OR; z&CZVbNDF#rXyqzB{2$;xc|`+WmGJ?~*oZO_$HL(3V&{Of$s?NT5YL6`MoT8` zx0|R~d#$ zp#}cX$;t_Oo7THqErdRw%y>6FCV!4B?4jlQKA!x|t;>J)_|pcyNOqM_kgmuDvWJRD zS45OsFgieR_yV`!Lo!JD@rvIcVS2p=bvpQ~;Ajp>N2h`5hO849GIl4L<2$IEHX72t zb&OO*!!5FDkI0MTZ&hm&<0BloK4h{tN$E(JY;_*qinp3Wzi1#ax?V8`A2EjlyV4G{Zo0cisc(h9+zB|3 z_pXW02c$sBcCUWzkX9*&H6ZFsX<*V6rhVg1H5V z27KxYYkaxsWG%wWkw9nuSq64F8`p7F?tNlv6+IgqpP7X7otLaq53jMdV~__wE?&tY zIg5k$kGh>eS)<7r*ra!H(zPBZ#48@7=q0%%I3_GH8-M^v#w$vZv1&#p;MgWIc-R;R z8iqhMx%AGmv51_LhsA?eR4Mohv{f_dDd3a15dw)qC4t zkentY(i(j`II$rRoj;u0N`$kF05VrfM*yB0f|q@+QALc6emXs|`;8>nS0!7tx2n+svbE!b4mZGH}`2PIjbT_8f-|4#HY720O+hXGTBlP|ZcPH+~&hx7a_w zTnB$wVU-DGVCQdao)R|)(d)kfKzp~4qM!51a&&}u(Qu+zo=|-A2~X7@;O<$cBcP2) z6tJk7_siyLasFiQoC0;+8We*7Dhx+XJWcf@C4o)0L8YD>HwjoFUBK-RN@OpRbT zBaNWw#EN}%Q+Wdf0OY|)W)CyrGiJ3Uy0z?hRb$ZG_`aJi<$!2DKK4xj?I#)|$?q#M zwLEujgBV7i$9IBVdy&?;^2Zn3{++9+^?I9SrG99s5`9pbo2|mM1^L$ButWMU&!! zt1Q>{*SdWAKtA#_Bj2&?das&vdy>`1UJq8Drnuc0>g`{g_ObOIf+|7nUT_xCbIms^ zP?CGspHN9&r;Y*gG=Gy&m~Xqz47K3|sI+1U`L({dv|kDZoZ$`Qby4JY6S;d} z@BfLb><2H=f3O=ckB(e{>Eup92@7+Ux}6N4Q?F^M{)^+zse|!+8;Tw2!A3`BxUBXq zcoRiI<_VBQcDQAjF?7cw4XeNiPO-b;_s^1NwG6nGuUrDu4yWjwKc_ z97YwhcQ6;f=-$dr$zCNV^?j9;m3@(CMF}DS%l#_Z6rKGDP^f>MS=aCxJ<#5UOQ?KA zGVbI?WUF#mX{G-?fQq5GN}Ho^Tl{jl`1^S2<;aA)2n%TKf`}exq9_H=xKUr@p)D-{ zu6%uXNId&JWNwG@8p9YGj+`Sri#DM7RO@TVw1 zK=N|`+vcH*nX{vj%RfA-SM&elQI|!PyWH{J9s@>4(;)Vj?s0OsB#kfd=V;-?O7KWp zsG`*R#j^qZSjogx+mq-%qn&nDiVytrJqr{L@Cf^GzPJXlSf56{~@O4){DFc`>_+O;8{s$39I@W7g>ZVJwlw)&?lmBOBNj+ ztL4>VoYme|cgEY%^Ul~mV5t}HFvl=dT%NYcEeEoeVBzRqP+D=-W@J*?Ac4 zZ@}DIVb;c@6N~jr+C`dpR8loYF=jutQrZqZsA}=s8pYnEM%$zmrAimCF05KMfGP3OJ%#ULr zH^j*~9U+BhjCVlzAq`YEAu151>WU+E8p4mKkHD~(Ys^`U8~`UEkEuQRP)hM*#n7o@ zIRTu+o@t=#+18&s6tX|bj$@`M4OZ}oC2>|yk--t4Xyqk-BE{1Rn<&# z2$o6>jO;Y4Xfs&#jpD#**?bv-4Ft&-y|<~dPV+w|ln zRtua(M09;I)vXG%T3RPn6flr`is*4Yl9U$tTA~If%r0SUsd`n+po%gdaEmr*GWLWE zL$0jv526__kz?mp%6sqX#@O$q#+|q2AcMJm=hqwXC*hp3eDi+y{q1&bftAPBI)PGz zLud(!JOQW&d?dW1yY=41m57Ajqq31c5m{>geyJ>lLU@_fl}e`Gf_l;HfRT+;%!O|t z&QFvftw0KgJ^M^$3j_aC18=tt{+E8mxpzE~5b@HYqN0~mO}9eIPeac8j*V;S>)?Pb zz}!BUe}cu&BW(W}%)Kl6Tx8-_S&(=zkADrpBUA+wT7C4H@8yOi9v=7--w^grH@?>2 zxxT1ZDBLVW9-S7i$^}P(XiiS_= z&90HKmloB<*d~3tXv?PKBj-}?5>oC3J8mygiZ5?cjY`AkXkvd>vB|TJk8Xc24t-nI}u!;^&9Fzk2$}q$+jZ?E!XUfHOY#eYBHno$$jn{Zv0j0A69t1Fe z2Xv0^kJCtErJQix3YVWEL+MB8rw{Cd7{#x6N}R(HUEJlW6%C1Y?&VR^L1`y9mlaEI z$rv@Wlt6KY@b&zy^c8k;?yoQF&%#A#$OT)WE-5S(*UpRH@sN1wM7@r=a|L9TjN=`Q|Ezn7`MHNe zMGTF*cYj&2YQ@%bi~4-R%sW)CcspQ4GWV?Z5kl|v4aRW18cNvGx9pGw7<%!+;@Y+a zJM?gccYYiuK{V59<~XN&y8d;ZGixz@_hHAAO9;mXgEPQCQ8(0)3$9_s?zzTZQHhO+cqj~ z+qP}nHviYXdfKZ8J&#$$AlAM6>~p?){>WRZXU+W~X;Ze^&Az=jm~@kivyEUjD4}Zu ze-GZxO=J4{cy-dE$mRES=x1HAeSK~7eAs<)tODSh4s9*JC>`AFN=IYY&>VQ&PX%O4 zqp{K~bJH!pe>xij5&Swk*Thn2WU5)JM=P?@pU^k$w9`}?zu8VUad2|=c!CyQ=D2>I z><_Q25E5uFq_G^UHla4#WLB(+d(| z!`?0#r^;dP!!kLpbN`olb3#}Xb-(tW^YcnV_vah6W6Bgh&pzddPCzy+iB|5NQr1@S zi2cLlBR`XJ@S-DK#boiSB6!!KcaVheT(5P!r~wpDHqp8ROx$t>>0jSPGz<@|`i=vW z^m9-sD+STr&ei7oy2$UH*w)Nv(-0*CfzR_YJ(##^D8hMyVFaBccXxHZ4$pu5lx_cb&^;Fkzh7dHUSl$C*s6*M^#; z0OD7hy7I+MOFEFI>0KPs0vRrr{L8r?Wbb1W4(-TuSbvf=2Df_j0Obk)!?9T19o>u&BUIhTd}-7m1PNuzmFS%W%IM zu(2~rVER}<6FPh(!j>bmK;0*9{(TbFHBnNYh=Hu0X_yR=>Z5p|PGS>Y zlgzpzPNB0QdLp63#}6g-Q=B!2dPY8tkL;Xo)2mEVa83dY z3Dn76KR{m!)n%)b8}M1|)gR{eQnSI-=MO?F`BpO)uwpEz#n9pBvDkTaILRV5!Mw2` zwng6mfIao>=?=RjZc*mvBlW24r*^l${{DP?KE8iEi~nJF#Jn99o2WKgnugiyeAGKD zi{Mpyk)-&^WCCp6PXII}8c)xkpa!>uAfHA2LptmiyV!o<$;^L>@^vrtp$5 z4uRpbb{Fpln{(KWssrFxXFWz4o*xkPZISLV@*jPWr z1P9KvSkh=~Nqg>4#DexMdLZn|A3D4k{OzR21SJ|=T`ckzquYnXbJ>z95_mMMXuw`L zC#LH{GCBB;{V)qP^I!)6iB7tJ7PGoCqqq~3c2Wy$OZ`-3vPSM zyW>JmDH)RDKf~Xz*jV%>(?*tov_vgiLNnp}$OVTY0V-h-yQN&#)j40KbuGJfZGs?q zfXyfI^Wudx1nm%H(s&#EhiTaX6fD9dffiGQUdcxNrdsI-R?e=9EkVm!rm#>H)P2Gl z1M}H2>CZN<-BR_InDli}<4<1xGk_F^w^JggO#nXm`f>48w#&s8v&mpy#{D=LHJFsc z)A+6_x>>Z3K}ADpw8r^toVi8xhau7p`=#WXZ2M<-p--Z(_JpW&GEA5L@H=j~&a5!y-!`o8l~D*SmLO!sEFj9W3;wPXVZ; zmyL}=lTCPgc%%3LCi6=BqC-QvGHpO#EP}s*3y{6wnKZ7%QI#abl&Dsn_HiH*7k;xu zy{Kyyzn7|sfHy)MbYzZ&u5E;e=vW^c{mc3+eu^yr{MaIH9{a6G1X32>0$GE)y&HrF zN!uiIBi81xADh5!AJKc|zrbAsXn+65`TPjflx4Gkb)^yo92XZJQx=mVYcm4_5EnUf zM%of_oA9HEk?3uxS!B@ggqD_FXJHVa0WisZhX!&*Q4`R{nw*Z1SYXJ?n3DL=gGBqPe6_HdaOz*4X-gE=;J4O)tGlqM^Ute|c>3 z)yD#oy0;B)JpF~*x_SWJ9ajXmqrJugspVqdWCx3K(bdS_&oaFbA{Vtw1c#2HBNj)` zGy*4m0A^nZW8@ck+8O`wcJ$V`k23{PdtF z5NQ)BSrr&#*4YVaCdR$7Tjpe+i2n=Ih>#EYJ|&J}}t9RtX+o z2NY^8V|I>?m|&VDqJ;nb!C{COowHggk+01v97m^qV*4S}_ePmNae^S6y=BU4@U2{I z*0=ECPZQ+HVx_S^n*VG!^RvaZfJ!oURwuB#E8ikl zazFmiw;m{4y7Q^PHt{bX+%dDk1Ua47kQZAZfak)6Xu{dwu2w+9^8TbK1um*Yfops~ zfExqFNWIF2x z#)s+Zm85aM?(y63+S|dOwKN(hiKx^J(Kt;QiEWGI>o(8h_lWCjz_$j(i662Q<9bQ$ zH z{<9ucj48VZu+RjJ7si@S@Men2tUhi)+dZ|2RNCPL))r_a=FqD>oAbjtQPc&EQV zNh=oo)sx{kh7R|s?eczMUz!_n|4ylxhWMjb^S3Num}1)D?fi?tB;<_@Kx2c?m%FQr zC!W6<0pcjI+&LOcBV0Pc;SYH=Vm8-8`-5`!G?`N>(J#Os$-ogCb>ozaqk!7uR3Vnr z>$}4%V6^pU-%#(4Cq}FbZHNA=(RGP_nmi9(+_lsXA@x+P{%dS$3?*(Q-&z-@dr>Ts z%+4%nk>h$)fL2I^7sQy?5pVJ3bZ2An9Qg#O~ z6%<@Vy7^nQ-#x_yaP>lg&Ch@%=Z@Nx(KX?pF#|e)Gt)IvxstpIuwi!bZMzWnFbb(AAkAaO{B2@6(68BeJ6k(M zL3jipBwMmXq}+J2)B3r9Ib=C+vrrJx3odF^Pdsl_9m;8{)M$T5DR z-zV9)teqTJzv@S`zY6|0zXxbP`QMyPm2U;Y49QniR-|Oa?T-c9P;Ak!VdX?+U|Qiu zp5a6V#0Bp}EE^gGprq?NihK&jTV+HduWaBWvf;UBdvJ)7(z@oRhH;1k)mlM?UR#_b zk}P|(psu|1WE?~9=SqYx54D7yUxnRFjpcilYIK&2{y%RwXz)U zFU+B0bSDloC>batJ0j#YA>1SHAqq;Tct#(q;`P|8^h$^!p?vk z+OGs0-5JzWK^6t0{w`zfXOn;lpyimVh|puc%GGs|J}l+bk3$K%ECCG}G!%M{tm0tx z8JTla+sY4U5^p9F`=n&-&MR9gLi{vaZi+Em)E1AiVreXyo#}a!sux^Sk-oal?O2OQ z=UR=@JJ>*v!p}tp6za$RKp!Ti zBXoAV@mG%lByb467zFIx;3HM8s*a{LNIe4f&EMg{llRvRL(U$b^JiC#$-GVES{&k| z3tlEWDtdk->~LD5J)A~a#k2fSViFaW6B(Y)s$lyiHtan;%Ct53;zQYtl0M=5-t<0) zGPMBj4?m$%yoF(u~@}L!0?L`MXD|w_O%yD(yn!kIkp?k*(t7%MDN#V94)% zZf?)l!n8ae<|E;*71sD%u-mr@jI@Ug#$tQvQn9jfpXX}3e$oZ5C~V@RKNhrz9HnCv z8xQ@>SQlkp)G@pZ&Wrbw=2DIT0O+?Zn3U2=DNi*#tRO@1f&%?uGVuA3@;1%P#%zB}Z-y;edrRS7F2!u`XhyR&@Y42oBX1Eizn=bdKynHa zhkG{D;e&{F|NHmvc3m&c&hyj@o+l4>#<^cB)GU67Bp*_Ii~vcvh&fC%bN6xxHJ$I_ zJx?MY3+)2Y{X(gb{Opk092_*))Whm@GZy9r#Ao=E9%Ad^6!0s0So{ht{>4^9i(5+*RfG(bA=dy;L<@rW09Sb7msk<})rV zyMdkU#y0X5e-iSpw@V70iR0NN35U7bo>k%O?97Bed+;J2C_b>%PQWaq8g^Vh$y~x++*7J>Xrh-;uc+*}8 zX?5?9j5VlhgL~Q8;^I9F%-? zFy@e?317jyf~FcF6Kx(|BnMa z-s2=k1tzIv*gO`ozL#wBm{GETGT6D?EKuhwtMcJo!+02hyxEks=fGJdSA?|CG6Qx8 zL!wrN^db>zx| zR_t0B1=5eWCK|E$HR+Qu9*UjxO*~AFUjsNjhP*2m?+{p0HVLY^fy_x&l0O6;n8`c`E#xwPk&>46fZ@Q zE@O|F9sU))kt$lGt@w7AZd#Kz7S-7I4NnGj8NG(E7C&Q>QJ^Ea_C&U`^-%G)6pIiS z#{hsU*NLiQ4gi$#)lMzB4u~gajNX;YdMtozoM7Gx}TWBs+>BS*@3#&W-^su2HoTmaB;8z17G08+>zwn52Rk@ zQ$)PS8WnSJ=gOG8YE_ixMB*l6NrtLk?j3*6X#m55aM48XX6Wbf*d*dmEy!rlaR9W- zO%1IfZMdPBNUc&upp{P_dQzEfL`47aftgC-JB+ENFWk?{Qtrqtk3UMEj6s~ z4ugmuCiT^)QjvT+Z_^>{=c=0*tdm)Z+*SC)LjYfG19$%g_|a8{BC3nc|1U6h${;@(~6y?>D0-T^0)z1z{pJ z4oa#7g(g~5I%!U@G{!L21#L!JV%uwJM?Z57T}h}7RNd%`?Ye4*wk#VWSOmbmR5dN) zPviQ<a#T7weFbS=5>Z(aLDKu6 zp_si55Qh<dD( zB1JjSiN=t3GT8DhR#3<4V~)nA)RN~ptkk%=XiNvFy?}KN+zRi6BYs*17U?Nnr%z{! zsph>ZJ|+ASnK7}xl1vqB;{nuc7^ydXW_cM`H{Ba5T3Qg;N5@Mop4I8y!#DvS<(*wI zw`snOvfj9jkI-E#x6F^X&$uw*63h+j*Lg|#iSK&_KO}ApBEV0;q^CD`d!Wn!3&&&O z%htOc{1DV9*r>%T5|K~=O$q+G;{_itplJ5}cGu6t%Qm2VnlQZC?kDfQ4X=cgLeoXt z!;u&|gp3S1{`U&sZOP>IOi_6WEap|$|DW;vz;E5xau*Rvh*{dkWgr#We!1V?=yz0Q z%@BlPtu<4?PKz=ob}IoiF!fk*=EgxvrIUe+nhWs$WR+cL4Q@vNpHCDraU20bTH4Q= zjMyvZ6PAK|4~6ac|GE-boY%wP6Tn{xtz8#AS-Zeo+;^SN^bJ#F&4#(_|0={v%*4j$ zXtdV-=h``h(aKp7BE#id3Rm5@T5^hD*c;;A3)U^zRwc;HLrFpW0_gr&OK5+jLaU% zBRiLNi>MJl!w+meaH#6IBCqBpi#|2DCbK^=n6^IANk18Df}|rZ7tFzNHORd%A-H# z6U04+K`pL)8u-f@kJIqQR3(1^>~@h%#Yaf?4!T zPYzr6R0Zox{E@>QoqId}osUm`=MOU{Dv61eZF$KzsR&bFNwI7=1=4TJ_V1weD+AdH z@^zY`#&G|NYJEDW6NOVy4gSP2RFUmj&{|r=8ROvZn*$yF(1uw|miUqYg=kJ$Tv;f9 z$dpRCk&Ds9b-bYB8(!LCszs_=0>l#f_V*-Z+~vtn&c2PojXxO-zFLvX3t|GbJUjUqh#w9e2eyc!Bh;j0Y#M4>{YqRW zu5Hin3t|Pg!*@73oCg8u1-tfuxm}4wFM5rqhv@=#zGOYuQ zEl}`z#&*+%MDK+`e@Rx2s}sLh&@{_YKllSkdNWGQ1ME~6lx?T7mo^dFc19fEsef|O zIFtVRg^Qo2mZE5;3wW-Vf0w^3mO@>%)r{R2yUVVXOW8z8(tkw);K^28boYhNHTjS* z>9I8)(}){=aNvcg=qP2m3#BRABmgVr7ZPB4nY?!&QQnU~%hwL)q%E;5JU-k{>)-^T zIYqfD^|3B1tD-ckvktN3__(;C)H7yRHaV;%wv|c0f0ic0%X2K+k@G!u+-Bc%fEbVJ z0rIiPN-)|dB+uY(#pA#6ky_Si_(N|H7oxl}mnLsc6I&WN)3OviT^Ij|N2UL__cXIE zJ1j=jX@)%!IfLvnqwRs3ytr-BfP&~uGMh2T9ZmDBjq$cHll&$@&(GFEMNd@b$rrUW z2^u-D`xpp_VrzqwGQpI5z#)cx(aJmsIJ0Ws;uP^GPbAqr4FxrgbJ4xe09;k|RL9wd zs8v~W&IyJia0%&rE_YP*iAtJrO35X>!x%U2jkuysRJH(nOkk^oZ@!Hzfd=ME4D@PL zR3FY3USAAiZ5~A*Y6kcu2`#CoOu7V8jh*ySzd8Nf8oYBNW-i0}{nOkqM6$Zo&ru^@ z^kBrY(ors6K;blFqtH5%KgEiN6&>>=LOJlYlJCKypuoH4u;!+&P%=fUWv=_a$RQ3) z%uQ-Is7w#ef`1e<*OoiMR>7Q-MMd!g8tNads7o@ULIHje6gY{HBL5{M4Qv-?cqTGr#j$s+gc%MocvjQZ-DyDLi8EZPZ z?xHYn9YnFTkMb|&iUVntTIY0Ku4pR-OjMfrTp2A}+@(P__rZFc0_LMKac0`3Qo5M# zok#Wn81_L#^3z*8G*t7V;4y5W^Qh!M-yaK|14S!9)rl-bs!E`LLP=p)_t(^jE?1b- zromOq(2W26Tu(Ur2@NzIh8e-LR2eaCxyV0k%WN0 zkwt?*-wmxG2QV{*4`AK|ri0(`zFG#Uin)8yk?KxgGIf^8K-Os@!opmkdm_0S(aGkV zYIs>yoFB|i8R*Ce1+C53vl4h0WvumPKqbZP72Omz2;*R*J2*YQ#o|$Z zCwyb{;lJ*IkLPh-j;~NV*(HV9x%~}!AlGkZ1nj}po^B)mNe>_u7vJ*Y(mG*8 zhjMT`NYm!a&{yZvH~GmNF1k}M;D|E};PFl9u`Kv}YU3tGtka^^pd?1|ykD5z5O*0O z44>>2p5J4B5n7aP_Zf54x*+*~-awe8zM32b^q-W7nD8iq&fU?Hv;jN6oI1<^gQ)uQ zzmm;G(2=$+6lxFQFElMdr+T7c$J^A=u1DGt`R&NwQu=F2E@B?JvQyU>{z=CK=oS%G zE}0~*K`$ZCm(;#IfK>I@7!DM#4B9xHroxKLCWhf^iWx`8Y2FR_w-17Me6;nTufQx;mD^3!)&C%kosOe z{zDfbe9L+-_Ea5+9uMC$72entO5>#VPYt5M#LI-czu!Pm169qc7VE(pZSjGVp{a*L zhu1;~VXt4?GK>3IQTli@I^sX!MKGN2arr?+!ui;otJpPOdJ7MKS1-J38=XJU>Llp! z=1v)i4DKSIKf8oR{S3UJ7HZ8+{&2$X{2;w)u1(+^N8<>ws#=${f@Sri&}-;qXjj9< z;RY$X{X(J@tqjv7!&J&~$Y@D3G0HlXZo~D{)g79|w>7)-a;AChSEME`275{Dgl#-8 zXu(Gk{vClh6#AZ6X;Vpul*a^mmrT}BT^bGm$eB=;NE~VYc~jHXT_hW&dlPoa4R)e? z{c-y#!vDnx0jY5yW0mj8rQN%XRr)H+FK!<~6?yK?E0!p;GOuEoBIqH!UhX(fgQx4p z%^b9So-7&fSTzf?xi=BwdVRU-wr}e2R9a+e$C0tgI5IiZ&hcuxbo%eOO*d@wV9Q%W zy;1AQE@MSJYbuLXdp|H=XOTUN^+2 z5!N{W4e)OjuKl2GlkLtv2ded}z02X$A3|DiXuF@rEUs5Ko9I)uG(MfznR%i0hcJ?P zrkv*) z^74u=Do91@xAg`QKy#~w8y{F@Tn6)#Dq2E@>9#*D)q>}LXc&i!(0ARBVN^u})lW1} z3ZCM69=s4Yj$iL~cS@Z<56SE(2waGIl)eK8~9usVXCOOpX+ZMvih;ArB&c_r{Ys(7H z1+P-K&U>-3G78A>nUmH7=iP7D9e$3Y51@FbD>WNybHe%C3X4ZUA1^7*xcC2hE}Myi zr{N`5QLCLJ;z>s1CyYrTem_)T;SRz;r%7r)F}rU}+_@m4_*~~F1E43p z2vWCgn~#`!*_eeIC2_x<%N!gRSkZu7M1&ZhGsT=*l z7UVjS2!`Mo54$ilLw>xjVRMIVX8ogKQ^jVuEG1zEaOjv;a+{~Eo@*NGD#uTWPV=syH|tK+Zc zcUX)65Zk!#+{H4an1d3dL^gRh(!Ya9Q#S9Y2CSyx&)ar9k@aQ6Cq{;!DR#FCXl@&{ z5hU`MK*5KCHHe;wUcB2I8gXPNU*Tk#da&t8=cKs+9c6kUq7fF&*|kP2R&@!ChdWEz zzQf2 z<~ArknjQ`U*^4Okp{R6%0(<84vVumQx}}^-Sbjf(i)A(cdxI|u^217}x==zr#<9VR z6Y4tuEq|SwNy+D=mmkN9p{vya3e7?&<1`IM31;vX!)QA5dSooik@f48Suge6;^baDs7s19hM>{VwUE0Osa4ecMuOgc^`F` zc7wzV%ue@}6Lm;l1Oqz=R3GD6vQ!F3l={wT7;_#-qcv(Gv9;vp`DrketD3%fD{lr9 zubZw~e3uGYg*KXVmc|vCjmp9*l>}hwm28cCxqjaSaOqZQI(l!bkVcdh!IF92^WO4r z8p}0r8^(){EL)2u=2OlJOIa0>+iwTG3xxnUi?Z9-x(!+-^8Z>5TD<>7Fs~BqQJQ8+ z*K8TaE`w0}ZH|1O%QSh&P@E$h9qd`;Dr2h=K3x&nOrPA@f_FTXB!dYags5wC{J|jC z@ry-v$%GSDukOwxRe(I2;2y8Mv`2P9^x4G2QxlsBT%`7bv^NO=>+)a@)t{s+!N<0~AE%n0GnRmQK z>#ld*zvmd=LZ`QQDZ(d~yiEx6H-R!^nec#U0}^|yKtNxEd{aJI;_68wh!T_kOflzU zj8mN7z6;@d!=KF^G3s>?(@N}kQAzzEl;j_4zs$Nm_c|G6*EZu_q{AkNZ zl2iGY?irSecXKi~ZNO~cDvALN7W+a4(&UuUSt8wGCTY}Jlx;*HGdNuAd;s}`m_1OE zemkjDH!ZFIA00t6DD31%>!X2FDZB?|yD}0U#SS675v^tr4SzRbIVud%zNoi6`@d{0 zRp{d(C>>I+sjVcq1p~Nah2COT02(4?sj|y0opKW#lVw>_9UXg5BQxIZo;iX`cnu^Ha#Oo3=JYn_oxBNES)D5RJ9 zON%ZUX&~aiR7MgZ1xu4ZPfn%I;1IzN{+B5WmP^k!T7O>AFX+C#c4HjtE}OqT z5D;WhG{#Tvr6f3}CJSn{%fUFRH1z1i<{!-dSn{8%{%q6C%V`3_)=ik21O2l%p)ENp z;qi{-rKv2WPfK|}E`I;Fcc1>K{0)Z|2xzY6{}VQLakj9gH}X-Iu{&Ty>L$G>%_CwsFE#@c zIZEm-*hh{&SEc`vLJq%wV9^smHxR?~n~Drsz>P_X6@qEPG!)2efiwF)Y4q2D zBOkYzPCfhe7oUL=Y)T!CDGAH;D=k@t zZNhxg9~%!2PCmw>8`^DB?`LUR;%;{my-{|Bd)Q zQaOGOuA!`~#aYtLa+N(>0uKR?jtcI?kc>Mo=5Ncqc%5rffd-A-!=%a5f0RJ)HIX6y zLq4o8T9I8EL+@!7vc2 z;nSu`Xyiq}rgYQhtfZ)k&wjn9^KpwjJf8kJ9J);!q|;B2Pv?*SDTq~Xe8|Al{j+Fdku+%|976Z@|quA!goz4d)Ptp9Wo z#ZT4pVUvZ~1af@NdphyYk7oA3*M}X+^Q`CGth>9-gv{vo&Kw)#)Fb<1y~n99c#JmL zv59W7*{X(Ja{2<0Khxik@_~7S(#}scut68ay(G%l-{9ZRe=L`Xr9cBI&fE}p)p|8| zhmQh|vG%+^^}VaSXEblz8Y*8{efc%?kHkQ{A%1Oin+s_s0Lc}G-ozNhMdr;8uaDb3 zx71{_#m9@mJqZ8;fi&bkDo~)WWA1*q-Yx!B&JDiDb?jtM4Fqg%uGcLLA%d4!so(BH zSlzKo4F7)yo->ox7@*wV;Ium+-(n3C0_D!IVz6jLPxl7PiXQ9V=c7xdvM)oz50CtP zJH4I_p7q;Y*Urzh0OftD}o+h_dYGnLiAMeKURZ4$EI5S?PTHW$(eiX`1FZPW6{2;TkOoz!6!Msxh ze_?bhV*auJHxIKGyYEW`c43=VG>81~_sjq7P74{ipp>@$khZqh>wjDDt(Uni9pvtm ze-fy0%ao>g2MepKAC$}ga8FG0;3MRf5IZzr3N+1&;Z{nr2*njS2h^WD*=q;QW&5b^ z`5!co2o)8$qAA0k!J#bpCV~*htaOe&24De}voN|F4I1R19g{H)T(XIfqB_=7lB_g9 z{~Vbhj`4Q&V`B}V>}u5TSlR+0l%Y$$QOXTBO3AtBZ|Sxc?k(&X)9rn9zLT-0hk$V1 zq0z@@m-*R;kI~YMqD$~Au#}FF@L^)=q2N|%b)}xYG5}IQJwVgC`JNZvYn}e*m4?}- ziB@F|YF!3zz$kjg^15)G^ij-Pg@YDiZi&Et+_5#U3Px<+w|@-O43xb#PLvcj1_MdZr8l!$@k>YX zYku8%z7hhB9lD<0UeDaiv4q0CQb+H@0V5t6B*rcE?=H8o14}|P3H#HiXrJr7*ypPx zyvmA+>$)&d)qffHr4?`_68`|tfW*+Slmpv8r<8DvSpf&ACfo`d!CSgFw;RptQxHsD z0qfGp0YxBjUX7(PCql;wzymevZ@-KEJvUmfv!JV4S~91eKR(tU5LRh=WRrtboh!%A zMXdD~Y}5{(4lZmQkhg|%jW>C4!p23^AGTolQhFyYi;!H5cQD@7b<}f zl#0>e>>!+_YOOn`i0Jw!Z}_OAeb6z5RExKEgq{21+}wMDR?3avsq?o~PXM4)Z#%;E z1R<7o6I=k@m8Z(j2#kCYW`@gm|B?g(rpl`ZKS-IOz;@2*2J`P8Y=h6PYHXjibvejz z^KP{%&y&ye4_zmoHm2)~bK?E1TgTwW%fQE22(D2cuC}>Y%s$^6r|u_>QJ-)abclpz zU?O683!-dpmK=EZy4rgT^d=-e-GJQ7Hu*|dtt)U z|6bvD`-lokDxyJOEkLLN@B_0qf{8hkS+i(Okf~MlVB!aEN8_>z&T4s|WZd{to%|^~ zeu=-!&s~0Jy!|l4Dsx^|1Rr-`PP&_iids{1o=GM@ELQHsdBQyVj&MYrY)~n_k9*Be?o4gy z@~V8w6#MqB?e8IZKGVEk7`#_nn|^X4V_oCpJS{};=7my8ASb9CzZm&P4G3?7cYiL3G51Ez~8-ig|b(EmspV1FR!7;+) z=3szFpCpzMm9c57p$?mJM$>qlFuI>-> zsDIc2tsfd9r;jsv5Kw)!vIx4)uLy|TjajUU5oUEPL@_e_F0>4&OZlI5vkE>`O*A2F zWdzi&q86hm#ipK-_pxLxF3a805|+TUINHFJW-)|WJeTN1Hwre&;i@(CUgW7os&)P= zzs{>`TmCHmy;W6}JZttz!OD`fFcb2e<6)ZiS%UaH>DGC3Rcdc7B8ty@kjvmQwlI?Y zZL5As$(I-4XplP4WGmff}*ao z|7`yh?giX1yN;~7z7{#zcU1$({$f~ywq^popu-(-gHyrDFBSoc9uu;+6|aK|7Y|?l zTkes*ncePLRmr#up@;Ecoslc^e6bR*HP2Ud{ZfVnb5mk` zUUTnFwq?6JN4;(v8@}={v4~s*5bKtaop??`8Og7xxvDkANU@I5zkVxdJuXwk#Bu#a zVN&H0!7l3ug{x=+*_ZIf@uZj8gM+VZFZ>JskGsjp<_4-bUqAd`g}BK-xNgP-SwgiR<@{L!`d5KD6;QN zYV~gQQt)=YxSRX4ZKuVhD>71FH|QJWI6NOvWB`2m`P!zz6uv^<3hSAdt*h|i?X2d- ztrp!d1bTeyq&aVU zc-mW=z@`v^*&#eO;C$4+WHw;I#Rbfb>Xp0xN7kUt`XQqEWFR`Hc8EgT{zyDeIXiV^ zg-ME<0DIsp?x;##O_HF|`B;G^@kfh%Ox0InDhM3Tvy1>>7l+&dwrk)PAb$4?kyw3! zEUN!1u@|i71661LWxLt-95l0JwmIx61FjDTlV+k?)RC}$+Snz)-bzIVSSSb!^H(IP zplc%xT5;ll-`fjSn!F3}^Hw2^0i7j+#`IPSPMlx4RH>sd%V+S51XSZ2qA_&r%VlnK z8z9amQ8W<(i;qrJkjyzpb-n(#af(C=9dD>X2^xOh+el5?YtmQ>*%B@`jpGOyoO0d0 zWNppcgKp_SlGu=aE{dwDP}d|=$_oO(hLxf|&Kn$X43ynfX9;bFICHQOzCJUo1aO9(VhhRw#aKn_(o)c*UZ{#lHi_LR9U~1 z1LK8UW%%nbl%O|@^M^&D?vEO1h)rMN3K2fr5PGXors7X-I69eN-V|5lmY#;o8eo}GKvA#;-7pmU zn1eCoU-%~`!B_o(2IpCVP$(-q`}Z#FxgVT(3~fCYT%N>f7{d@Ug~6YV3342taYMu| zfrjs%VNM?Fs^`6VQ*ocwP>@`w1m4S(00N|UBn}dfryaN!zb3M3i0F-dYc72&=V|hb zVvgS4pgx{mB2+-En!qcUwBNU&lc-dsm(rylbY!-293jweNu;-Q%;V~ttLv{_11hU{ zwx&Y8jX|0f>nl_x?Dwna(Ifo0mHx%e75BvdpvUxKeI@m{haIkBS0pTiL9+dq8QoOB zgS-gNuRL57)JTrto*FY>IZg|W%P3k)tyW={cnFvdF13qK z+7orB0yjh-nlUmmst&qP>yw6yYgio?V)XLm^3b(aphsxVGU_Rfj1Q594Zqh}Fa(v! z^~9;A+vy~f+A=mY2Kxnm5ARvBlHQUCv=Z0=7J#kmg>^fg5jx3T8e1VgldunPpijMnlo zGAsAnRX@Mw0DokJut^F4hWFlI%N;=q#g9?4`XfIDT6fkMCyTGRpqd3G{H#7sj9RZa zhX+6r@T7=_v_>78X%fB*0o=V3NSO{Kk7Wi}P2fAp zy{BqkLQ@{;1pLe8VRp7Vt8Qs&cbb*m+vfR>xi_gI;Cm&77@-p-1W87GXOW7M%9}Zb z`z9f#_SEr7qkrj2Pi94bfIIw*KX-E@%L z(yi(Ht^J7P^qk6QO>6Yqe>0Lj*w}Hz1k7tFTKLa%`aGw2epGd+!>Vp? zbvP{Z%~oTVx1oXxoF4mr?p@xnYvKjD;8U!NM1TpcA**DTnLU5PvRVgGcX&2mHRf2} z4gk(*fGYhQo_K8H!uDCR1=kco9=h6d->nxzk#O|VnKiLbxYSg%(_!rZ79JG0!M3_N zuDX^^l9cCi>pkC0)MF{=r&+Nk5KJDoc*U-I6Kc4Bv(|i_3--d!3BV=upuE1q<&@cLuP5kj0Z5)puL=gahD=7N^y);gFud= z1{YBY=(C8b*-aLiotDaBRVyji@ehA~p$AlGp_bh|_Mz&WN7W_QzU~6M)T8^L*E{rJ zhOd2Nv?P3^K@iCXVAfxYwZ;K#+hRbziTZjLz+R1Qx9^D+%i3plGRqUuVwQJjTK zN8a1ZYnjaaI)f^2yBC4xJIkK;@J!+Km0Kii_pKJw-jOrn70%}o`T9@6mu1N1>7sEu$i;D)K|(5 zrj;9X)aOm{awgTtrY9k(?TeXJXqDfSkj zrCq(#_0}Es&f+Wz#G0P4p=~;+qedjC7h~0a(9*X~W;*3TRoR%1cZ}z<#)!Ho;S0|Q zXKrP)+FP8$#N`hd^cCiG23tBB?m8Nd%hiD@i4Jo3MU{Is$_Bltg8-({MqEvNPlonRfk-BNy&cP)5bH=B zQUWpqy#Og_u~?wj>CoTGGM`!~I{o?&`O(1+bK${gzJix+#G8~ECPWA~ zzr;$Bu}^9QK@y5TDu^R4NtMvHd!d)q6zBf{v~C4x*NEpnLJ+z7gm~jFf-kd=?HB^NX)+@7i$P2ftc8+gB()vo z5oM3uFdDVch*~kjn!sAu@6M@UvxI@PY;1|Dm2o(9zA)SK64|Op#AV58DZykkiYt)a z5vieACuF&y85j^D1-I8d{#I9`#?5R#9*@?MQ&c^uV?7adS?P-#lY(-S7)VJ0Xx`6f zBVd-+&!l2Og;TApn6-ZzR({1p+?-P@n%M9d{=|e-L2rqmHfb^!Qd@1;&>Q8$%^JY~gu;hh8TSXBiZBee&XhH7t}qpY z0R@J_VJI^j$hpyp`7&kZR4}q&Y9_1jo)v8yrY-iD2teX~T#9F4jUHm>UIf1bt`C6e z71gXu{o!j{$Vk^HBT%wraIToRF&vV)Tf^v^LZo@68XS+#fqv58-;6dvpmw{Ze#GgS zUjP>o;Ovaa!wNu=O)E}K>x@9XnIuK4N&3m%FG zJ?c?_W(?Tx_X+=GZS%3(vy)*T8I_jfJ8jHwgPMir+{3I4694|n)&K8&zy{ZBITH2i z6Ip{0Cr74WSn|%yIJ%*QriU8wy5?QlhWyLB+^j%!0U24qtd;UC7uN>*0q$5Fu!l`y zUZFuUjHOHqBns;`03yrTkHHe}4A&+FZdn+KMvaJ4Q#ZVTmCDTRwvh4?Itsy#gs*-k zFX;homYa=Cl2HyiBy<*o?z*PO?Q;?Pu|vP>e0zZin5e`qyW|SbhV*`nq)D*f3wk*@ z_}ERI!kKLSy5QeU6BOlR(wAi-Xb?YChJ>mo2j9$^L}R+@Mo7Y9<4>lN2comGcl2PfR+6o508W#q&HOi#RrUW%nxmF zragQF$?`?)S>v*{Wj$pv>CwF8z6XA1J$?*2yb;ojc_gp$C6fB)SK=W5U{UyGfD+A?MhkP_rf|xfax;l=?>-rQ15XRbHsoVg zw*MjsAi_v+{I+y_0FJG08|%ib&>A}!xf^!2m1wFKg<52^rcT3jmwYhd97hSZYM}Xi zC_J};wwseE+AvS{&^brF@7WRt%QJXn!7Cg4qqt8?xCKX#%a4!K?c8FPD$w=?Y_+E7 z`)h`6SbROr`aA%X0Io|2+`-<^^Q}EP!reyHWA-%Uw|qI&Oa#2gg%vHNg{`*GInanl zpEGH*D@G#fEM&`lS`9JjDul>xaA9yMU>wS{I{>EkB0DD#h4F$d64%oUC;MD`h}L zQ8faGK7cHWHTUITHABtiU@6)=oei8mo;hu<70Jm#Bn^hn2+kqtKU|ct;3V$YFdUq3 zYd4h^m+er9LbQQ@6lb@#9}T-(WN8%?-gk$zkY$PUVeXX~*W?@-p_xB#-Ty-@}$zAEZNr3v^2osg>(QA%5So(H=#omWH-3 z7JLa{`s=J5Xw|V9kRQ*UO;$A88Gy%cJB!JXWW>3vJlXT;7bb0cVBzQ^(PTI*pFfZQ z+%<^L4NKG3$y&ayOeF@8p?dvNp$5=*-=ex8Ulg}|VZ7X>behdSkQa`|vk1zjjuws)$e7g9B5fXFYn zBH2)2O>l_bP^|Wp15D%%2l{!=0f(!kde4dpRUy~}(XgJJg<57FWwmm$9nh*C6?RJ zmMa@(8hisnfcCiq*b-tS=$$MXUlX|-O+=oUASj9XBBh0+Lj_~G>bOG8UzS-jez?wV z>dbxV22^`CK?Q2T9Cvga2up@B$$JB97&1TR_=f)&QtCDWfoY;6_pE91Tv9QECM;WP z3-wo~^&MWt%CFtgG% z%*GZx`?sWTc&7Kms%(HxYr&nUGU`H3HAxp*`KIqHWUDn<95WyZo(YY&RC zTEOZ`tzfeYwWh5qAc@=sJ#={$ryL9kzi)F)YHG|TY+jEsb9#nzGQ**3IqWJ;Qzw8- zmXl{?tL5ySW=Ys4#OQ*vy6|QZ`GI(bx~!CpV-)$_H@Pg1&4rY2?^TQd?v(>AJ@-s6 z)b6ZAHqpRK&Voqb%3QVZzK1nv1EXS=?+&G?FdF?BP8Oz@W5xF^w{fw#3hG+h{8tsx1oGb z;VuQL^D>(lh{GT3m%V_h-s`T5uo+@^HFe%Wi5kFHs2!h^>{eWzVa&<%RrU*KmvrRe zcghV&mwXtiV4J{GymgRW(1wZ<%6n#zOw^)%9Tgzzv*s5J1rY?KrkDkwu0!w;2M?aT zXVRe!MjU-(xnhe;6b+`%O1EQ)PS|on#(zC~aP4fLv>yboN50hMZ|%a!lUYr*I!Ub# zsf|$SmI+gnv*x@ZS`0NpDf7*(#QT02W3LxvuMVkx)xMl$(|&y#dc1HKZtu%0&XT-rBQ9AZ4l>9&K?HT}) z%fGxwr#99_P&KZau+4>mA6OU;1|*&jt8t9ik+T_BR=$<+z+sg}Uzb!*#`{en*EA3F zM6S(cqPV|UPinf;72Jqdj!MPv^PNFd_02xBdABP7PBX3FY*m&u%7&XHjd@5)-rc+r zCoUL0-;UbWh6Gy~$wR{n#4$M&hG^sRi+XC6l5)_Q@`~J6rCs*WPq|K_tXRu%@_S6- zJ58hLYy(tQC6IoM{eZfESPW`Lovk)pl69_Z?S(uYUl7@&Umqqll@YVV&8@Q!C9 z-aixM4~sTi7GxCtrlFWP;-?VWl}x>W<3Q>_Hmy~X08a`7DThhS`5ukxL5p3KL)ceW z4UIl@e1(O2hgR%l%TG>XCTpyW2|dF$T9n+ibTcLX_@MAN@KLi+j9;-KynSY7%nlfp zqo+d-Bcr%BW5vGx=C-Te-2^BnJx+FvmBV5ymAB)CshnP%RjGSv)@( z5lSHy8w-*&$CcyZxXJ&Ugtzbxa*SV$LxuJqOsHE|Fke~VHn@fEELZ=M_Q^_70X+3C z1J9YmU?oRf=}oKtSTktTH?kjvyQ`>l@Zh+Du?RS$A_J0W{l+mkGH)*mk4(ht_3ZNg zt|m;$#q?P>-M-bz@3CD)_M*P9%D!D)A$QE=QslO~!YcaMi9f8PdD3hxfjegZF71lE z5v71CMJWUsaP0RLcXQI(KRG2FJo>KQ3%s_=F^kNKC8#1GCi&H~nC@k~_Y%YiPIrz^ zAk=eav%wEPDR&f*n~gU+n`4;}se0B>e>!vU44T?29X89#Cc%%{ZMZ_m{CtWu+D%Hd z5#eX@=H~#$m-B#Glq@$iE>Z<8!jQ}KULa;*6=RyqynlS_WWfF06tPctdu}9LPco_S zBX=u)Y%MS}4htk&^Qh!-*}Ro}%@~URh~JgIMk9Y6?I!^7~=!F_{leg9^}SwBS* z&r$`GM@;%8tz$^}re88Fr~!*q=lJNJby`l4g5RSsWKt6NkTcDNnd$Rks5It`PUo>f zi@1V}@@O(cc&lqQ*8zIV>h7>yv$_=uZ(*|1N@4QP%ue$fr_WO2?=Rp`qy;F3 z%zivgAdy{cpOEs?^&%r#N_8tSjuWc6DJ6n|#&Fz;mu8Yr#IO-#Gy7+Ww-F1s`T+PF zwTB0!+)U%v^J^V7cF*7dm)!p*cmTgr#Odga_1hudRY61$lCV^->co>J+1#EN5F~k= zYI}zHCCDpF%u|9Ln4`#-#qI10|Bj+gX@z;5SP_+&a!Pu?ZG(;C?oRjkB8v+1M1}9# zSjJi)s!Ns7}LWK*>*5ZajWhq2i zeRlbNWSQxwB2t5Ht+&Jlip@lE((Rff;`M-oGI%E&UBC-{9{)z&_v8;o=eiK%mL0Dx zWs`2OjKy@Y4+4B|zdBMPLNnp=PbpIGrtbpJ&0W={=L$>H=l_^bP^BY4T0w;J*vXkY5#Q8tO%Sp zVls9`b07;XL`y4imTS9Riu2Fz0QsRdYg6bw-&!t7)m>80q_kTH=}w0;MNQQh@!ltb zf@{Lqf?Bm;j=WM#uxECL@)KLeTpJi^|ByH3gpVvCo_cSM3p;a^7YY~XVVpL@9IzxE z8dK<1k9o{~3NKT+ixt^y&xm{KfvRH$Oyqdb9unjrU6(X`2`I0^zIr4vnk3x_+T#`@ z5o&IAC(E(8!8QbK;C4x0=QQ+Dtpl&+R5QENJPzo=n|$lj7&A~sjb0r| ztl+z|!>`Mc8CrD%0`a=dYCPPlj6D}k`wl=E=GYtD^y5|ZH64?RH`UpRm5Q zr@$~Ul;O-~X1ir<64|PrLaZ@zdcBtT_-vG$nS>HI7bK;YIi+3Et~bRuappm&x8MeQ zcgG|>{kzA}^Oxx5$L*(^hhk+3&T+}U>rD4xUqU`>>KxU~9n#pa^b0(CcG09*S%h!O)G_c5_5Wm z(r2+b8Q&rI=^&%^b!agq|LB z6Ajbwe^BS_XHWt6w^Ksc1_7=0(@Dt7GaxbBwphut$W52@*fcQWAd3t$pQjkKi-hO{ z{@_B^rhzQPVvy?J%g(7SF`B2FO|QLWfwRMZxhG!Lf}0NQ*xu=#saf|jvw7zX$l_o9u2KlgHLTvogW0HEcZanz& zzKni-F}fN#UN5(%di?R;lAp>%i(jyoI{Ow_RbJ01$6WC4aY`-ufl@XbwpTQf;WEpy zLwz$sa7Q=+9JY>8bhg7%UrWz|E9{$%U3=fa$%E;g;+XJ7btX|q|X z{Kn?qYp&K_ZY0Z2u&DD|pk^<$S!muo|8RAS!_U40f=SE8p^rkpm!nr)T)D8_364(~ z_GK9fGr2xBDASLYZsOjM$h}vbsrx=mOWZuqFc#%&)K-iB1UUW%q=*l5p267T9Dh`) zh*fR0al}+IHVpD3;*WzMSGoKBkwk(j#eO$hdsDz6)YP@7mUC9Vw&oeG=iQz3@9pqYzjn20U`aW0sV zEI)#z(C|Hn90Fj$90l^*oE1tj*0y|5HRz^&CJAHZ`4)u@xvb12#e7Ck_3qFa6HAe| zOP@QXz)XpTt%&@T&nl>QBbkf>uO2%{tXBGn3Ert#*NS<|6mHM>oMx9Uw6#t!uxgg- z+^{Ayf`qAzb10pIP!6q-i&ar+#WV_3W@I#FbEn9nTSWEZxjfgx2!+(Cn8)v%V?Oq! zR}4NZhrqOTA;ZZn&di5k<`2{F>>jgg@G3|wdS!X9F9tctc8G%B&@^%)oii;CWm+6X z@ec`Rz8sPinm<;9t}#qtZ)|0uf#7tqq8vYOUkocku$EN%zuBIfI%|f*)s6HAqwdhJ z^G=U1M*OVZdhs_53p0TGSiruooy=|Pm7YRYn044|4@S9f#~%-teat$arr_78%xvT7 z03)m5QutW4w(-eeqaQ&)3zPhJVYg4PtP}6jicUKT>31?4!3Z)lJnTG}8OpFGqEpMP z;&d*l+g#wV#u9=4_36JuOZ0v3mXu>jxKbirRbky1e$|TF9rmzaEy6=lNyjLgrt5HM@P{)^Kry&`47$N#2%N${kXV&ZWsQz zv|%-#TUKCGV#^zU1r~|UB6_lP!%Lt?Lid#rMVN)UQ{08vmOj*S?Q)Ah4{?-5?3bT@ zyd396N9oF&M+98*dZtthD@J>zpM?Rh%3lI@7B>tC3T_SQw;4Et?GZPXA?azH=tJoL zqmcSVjNWc}bJuS7s3v9;%VJwLChMFevojCx)?!QdYAZInJ6i*Gz6D1$Y8T>En?VFG z=+Iust4Y?>T9l4?9v&?+`H3#4ga_z^6pH&1qeqIzjULgurxriFJIv@|)7DX~kfXY+ z=i!Hr2Zk(1we6rEmB`y@<_+kAw^Cz=D8{ZIiyB#eb!}3AtP{cpVXbJEeH1Kx2QHHo zFsh@T^e!Pv&W1qQdAw2kWvRMaLQ|n)knEhCY}$`j!5P&dg^%kjm~Txok14-1+easV;qb>|8uA02K)v{IpQww<;Bng$t&UaH1r)BU|!;mT+w@R2?<}M)yz~tI34{ zW5-gVvuQ2Yn1x&KJ7|ap|HZ-@ub5-8w&9neIQCGIzdcAenxY<39qCZTuZ^+5Rf6mj zR@K3%)3wN}x30sMJwaCPzZ82K03J8+70;kBcOL4@Q;DsQEs(sp0}?vz-1RA`{XFnl zh)E=L7+u&@<#DR>UJ&tB!TpPLOQ}bC) ziW{Z_!9r-R$i#@Aa&AH$oFOgBjBuUJ9%Tk**2ya0APb>bJV3bpDV9s-r4U7JYlQj_ z|1(j>N=#O3UvD;@>OMIZ!s<-Q&irm*zETpaTFtE0Ai!ddz|%D}S%-&}>#aa%=7S7& zCx$n7Yf&xt(g}Iu+dv6`A_TYay^g#q<2)ZzhAt4QO+DO&*tAP^@W_)^NDGK1F!~#4F-R+aQKOWc}%NY!@@$C)MFFk=*n+; zG;>{M8@{y;`_uTbxePxLfNC+<*Hi>^k=j+AU6m=X71`T^a_4r)g+A986cr&Yadr~` z*1Bc|Chpq7!xQ~m^l za=3((+#nV(>vODe$sLlDcLZ;A{I&=}vgcC^P22m;Ka`idd-s@PHPA>@vtpqa zHQuOkc}mjDZw`#hc1(4%&$dHX%7!|Ou7%ztm>wtwUC4lKa9<%}ROE+a_tTr(**ZHv zXf0%>L~YCR!o&mnrYrpk^U+33?Ah4#?snS^+wvFJ4l=i>Hu+N)aBJTO7s2uGIcE*# zO}&Y0Y}5UG^wS26Bj>(0VZ|g(eI&XJe_u zP4kPDcv-zmk1HGR--FCJ!SZ4M;>L+X$;W*S6ORPSTeBd6;H=mKkDyLNq`}gSG`OAe zXt2?lG&~V!MQM+D%pKmQSiuNy`U`kO!A~#{i|ipp)2Rc@%ryC1ZPcJkUcpc72H)Nq zs%K}~h(TzBd-8xkOUkxE&0=(4o_{-Z%R!h&RZAzRe&JSU{Be+*a&9g7{V{O-(2GAa zsu=IihR7=+%}*#AAvedSYwbr~gAbPXOFIiC*!45XaG9wTyy<_ePE#eS5GLl-2(QUY ze#fv(h6D&bY-6wgzHEc?UIxkb3|01q>25nRUiYuPZrg*4;Sh94)RIYvLwbrwyf}V-3e= zDs}7Np*3JZ4CpAcX-`r3=fe8(EwG``WY*R5=JY&hG}^y6!@YsG22itGgWawdb` z_1jCDT{Aud;z(JuH@Q773;Vni=QG`WW9h;$U;$aTQbJ?o1PATCC+M)evVL*Swkf|# zyj`xLrqe z^()lwYow^OtgRx~>;kppLj?fw(hZu^*c_rg;BQar@JdE{`xuV2^%xf$ucfPt+ENe-nTi@isM4TP3$N{YYbb;s zY;`4ZhNc`2@*5EMHa8UP#sMUS`ck!IcgHEOWjof8YPU!~7Nu5`pP}UF)bgr&RytdKo_^%00Lfwk@{T?W zRcJ)!N+LIAdbI11@rGTtRtDeo#-w>u({^NW;aNyK{_BA`r*Z}6Pwk+x{}@vLd8wNb z!R$G_evfUDpqY3l_G&l?WJSwCLL<}tn{`EJHdAlsWF#cRn7AdTmfoFU?foQqzCu#e zv(I(7ZpX>nRVWt@aahXf!77aLg%*{9*J`^FyMokRua?ImL?T>gnjY6@Igkjs*Cuau zM1se+fuYO;a(AUZyl3US3Nq5bbzN>Pyv-HrCW4nr)8H)c38+yg!Q5pbZ+zwI{QdcU zdPtj@4kFxF0$S}04UjOlO0p$<67bDsA%ZFI1oJfZKGa;&Gst4-(N0j%lMXBh-OI!u z2d-miI4{b$CtK_d(#7{VHN0I-IGpkwxY>xql_FeSNXF`g5^2n26LJ=Qp{Y>7Otlib zOi&o1mJ*}EPJ4fc>S|fo)dUDyys=OF6q~}DL;)g-vf_^z! zPYq?yqv6?Z1f&~G@rcRfP0=)m-oby=xK_>^3vt}9Hj6pz)i_s`2Vo%wqhn^p8nC_H z87|LlJ5Aeqvq-;?;IUEiYnXpMy~5;RTL`Qcaks+^9l-5Fn!-<=?7z84YW<9ey_mEq5`QhG`h*E)k4@Y4!pg2zpky8vZafl5g`!JI>BJ+&6TGc@-Ns1DDx zc5=@&PmsvIP=nvKMLInr>X%*h}!iE@lWm;grmJ6iHNmUG%ZqT2< zc8rq`azMOj$z3Is;tYr`yKV6LKcb_Ver}@Qax)A{g+_jnn&!@~Y4CO0RuO8y_;@gW zhfj+^OT)M@Ee>ih5t`}T$;W3c6w&P$GqlTXu>-c7;}wb8tpGj8Xkl&^`}=LQ+da1h z%$=fh!Mn6ydNoe543aGWlDe$e?(s?_j}jSyN}sE~9YH4l${8*YPxwTEo}9BX{QyQ8 zv}kLUl=jlU2}7s7A_f;v?_oGp;7{QRGt4QN|u zs8xaO!9`zuFlHl~RaZ|Mf4(Ec+Zsu}Ol}+Ns>abn^qPFj^CMbTgY~%n$%Wh#1nFDo zoDFz1;7c(F=;G?{BCOcc>dRu}>IMtuIpC&+#BfEj1n@ci>o~tA%i9K^6{i96ZFLH@ zEZc0yU^P*yAYBtyRU_~$x#N*vv$<7MCi=`IjH-{E5^j}l0!B~-Ej+jqbX9apI}@`p zi;=G77rX2r`>79t#rb1lXv zzP0-R{Cx{<+OWaeQi(U}%qw5QHZ*{@rUv%;Q-?{UBSU4Q% z*5&A*oui|)OSiWd-kq+jv^rv}oCLU$S{%7}GLT)8vVa5`SJBn zmX=NeuoPyaBq3SPm{-;=*QGJSce+bp9rbQphx;-avF?PfZEp2kDPRsmj{rw93a)iQCpHs~U{3CbQ z!5`+xhYM?+lh?6zN3^Ql7?IHcIIzVNKhJ}M1ETz4tZt#SKOzIs2*XJ)v`Gp1(^s5) z`@kNaYd0h`2!)&Y1_Rpj7Fe=Dz$cS&?(0OuPJ6(V1k{68^v%PLBoWx zJ=(+*e@1&a{ocS+-!V-db~TaT#mc|Cxszs?k8W=H5#7S)Kdi&t0yW2c$+< z-|vN->eW+rnEchVN#f;mE_u)3K35dne`@zH^3`F-&c@bG{OfN%Xw}^N_t_A9-;&>o zCBFaD7*0>o)Dhan4>69<7rwZ6F2|zZcd&o2d&Ar3@ryXGhhs@lNr1jsuZspbD8;I~ zc-qSqxIprdc(6|kJ>CbCV4}?8?tJfY%5?uSPaerxa!E%FPrD}FurlA5mM4!?vkMC@ zBy{0zT<4C0GdC`W96gB*+CRTQ37*yZDeUIKF>+ICDYl`+b{i^e$EKN>Dr1NPgfQNk zzvjavU4dn_Hr3WW!Vz;}CYW)ls?mdkA|KWgy#jL#hmfiG0ucvnpX(&rHxS!4GtC>Q zA=4-*N1zOC&GC>ho-S#*eQej=kXfIf9rrykY))?g{sWzA9%A6yL>5$51}ORwfxzL) zn4))P7tK?Rg~Ztl%$9JCfPv4w*n5l*{?0AmB}5%GBNwm#8n+cb7S5colL>bjc1uaC zaA=U_4;MoTl`!mhPEC#bfCWY++v5Q&@isrtdsm^P5~{~sz4rjQw|I=4`&A)_g03lLhtI!jd-Km#WABVJeWq%9~KgEC1NGL z*b#`NE?!wC;U^zMX&W;}Lv3G2E#wcU^!zs+h2+c|Cbd?bwc*T-USUjE@!k z(Mf&`9|7k6IQZy%-)2LLLc@<=`x__@4xW9yOP(FSgdN{K!2N!m@KYzl`}*d`y>_&B zEcRD|K(-y%^S-k#_?&Uhy1Rby=6qK>PN{889H96>$T z=u@9?6j7b?h>dP8zek$@bqRL^P21>lXPl1O&>+?iX9VTgWL~6ub|ml}`vmZC-Bkc` z>KSg9Zbg1+N3?;(ELX76*`!3(XC;RLTVq4wck4&sCh_h2w*Ou)5p@CCZ+_td^`srj z-)3?4{w0B$WS}pm!%uX>;XFm%*Ks_3{6&VL55w z@9Q*_OW|m$M1lf4b*{GHYPYW0znE>Vb;_SzNer)GK+VAo=gHMaPfv8aG<(AX9_U2n zOnmn;P~S*196v?`II`rd=J6FvRYA#0$25s@1pbrHF_{Vj0a+)=KV1rE$vz-CgdIkk zepL;3qKF=&-^A4O+90_f%y$(JH79s!}?&H5CLJ=g~&%nlwD1I%6Rf`43){O#3!X5qsz)NUzxkB{bdseI`` zP0Xkfr!a2u0weWyg^QT-w@|2*vtSTJxyL+c=c|J!nQ!3M7s+loljYN$Y@soj5g&Bp zr=c=2z4*#qv3U&cheH$J6TX!aMR;?+Mo1Gn&% z3I7l5A#acikUJuNYkqe`{Kks8&n*$(>9ZgD!^6L0qdOep>w>;~w}-scSe|$hhrYW1 zR$`w!?yiu2Ve9lM&P28z5=Zc7k06dEN2GebyrWFLJXY zpuV7&M=Fg+==1ip2+TgbWn!61%-sT6Z$R}taQ!~n>M@QD&rU7h{q;)SX0rM1UcAxO ztY%QQnA(qg6089p1GmT(`j_`j@a@IK!c^U^0db8m5irXN-Qg|zG!nhpjwC2R>9Q`j1$&>t|Sg|enzRLZn^nsIpi z4lP=c1E)LzYF%pJ;RiaQ0p)6%=1vEhbEQJ1a(<6Dz*3X`nN*=Mwl%R-k4Es?@$=`% z_UwIV@#oFbX%oy|Os#}5N~Fx*1hS|gT!JGGaKOZrJ_x`Nx-(w(6PP*`l<9lQCsa{; zkDNrq%|zt~AS?`iDs8?&`Xi2}JeVOvPA@?vp1igWjmK&0f4BG3YdapFHN`6V<^4A| z9T5W}JkEg(UdK)k9Dr8>PdFu!t-5XbF63XhdLWjiW;gQ=0ZUA6*v z#>6@GqX25T5E`JqCnH*Px&f0@2Y|s9Srv)$Y+-YoA@JW#@e(6iie$Lb27u2-9&kT} zc_rt#M8Ni)-xmkHonad`kHG7?or=6uSvNVw`<0h%X%;Zn#Erob?DP+>Mq%1=H*9KV z=p>#JAC2QdgE>O*q-i2b%JRxc8+QcHzu)TNa3AZosYk>%Qt~-$77*?TJeG`VXuqG> z-8qP&MRg43u6Be-RD|HjbTqpHT6Uy`REycnz}``_6P%Bv)mF3}YH*@n=ZjZyjbgnAJGw)e{mI;om%b>mw=PtvZFNKA;W}DY#YK;wgAxOcLusHm z_3pgk4og3JMI9a4yAEr10J!mXV$SyOz5FkdKrJ8N!A`9g_7NE(^G^`l1Ie z*^YpMvvAu}3A+^IMi32|Hb%Nz`?R+CyXCcd8TJ=NQSX&qb9YOkreb@f%7AoinG%;i z_Eh~;tlrIEe*Vl+=36Q0uIML_a*3>eDM$Iv6qjbYNnq7YW^8G-)~&F&LU5^rl6t0l z1{&P`JCnJvXs^Laa9zt|$bK$N*s^BAlRMo-r!9DLR2)ARU7{u%^bh{D42Li!L_tbk zmB30PekZU{R1}JVDP!R|%Bi08Lo3*!jssM3SNSJMm~v?P&W*(>!L7X_eohYvrbLAD z3UDDa0UuIri!R-~h>C&-nh>HoGxP?pT6QxyM5{JdxVG!2^v2A#GRioQ%TDi6rA0`e ztAi-mX_Z&@-l1GYp%a)kNM~V2;FB89rfF+G)hq;+;jLU&`~8{2-?B1|Zmt?9FeQG> z&6FtXL(b-x4CtLMh_*b`fFbpK^S@9WDPoxj6B?09dWNGN$WVAvpfJ=ADCKsFPUaE(ga7y)WYBoc&_ zQ>wA44ogEEKh|9mbP&a0fY4mXSQIZrwp|U~GY)Rc=fwD;gTmtHZm_|4dbB}rCHlgH z4?Cu4YyPb}G(oa^3D!R8ul2-sS%grPDCFFIDU&DjFAF}A#CdO$?C6r_-{Rz7%$>Bw zu$-&#zCRbAU6tbK>gF10F4!l9PFS+uRIJs)qIn zg{bZU%ea}(o0+s!tq^?Q@`wPkefe(p#K0u1u2cCmoC}@raO260{I1s zxhmZM`i7@`bG5r{*rkV}-|AL|`^)meyH>7Iw)U|syVrhJ(7#@R zMDtCQ#htdzBP~&y%0KV(55>;_>3h(M2vF&3m9cu40CjtwUw*j&B#nYqOMakcAMZaS ze(J^#GiX!*VG;#3oR=gs8#}2-y0Fcxm1fGGEjWvG!_ZkJ(5Ar~UUgXp zX|(H@Yta||yEk-GuzmVMoPs~q3ux3`GJSyULs>&CQ_W% zv}>bOv6M)M_)Tc=%G}eZfWg1$a#K>A?>M2_uNY`$EC}P0s<2H5W9QxA{_?tm1=-_2 z%70lu#(q6Hpt@T(b*AUnN4obbCNrG->B!~{_PPB13;3Tx)v4A!p$YP@NWuNLLiN9} z7HtiUZS3v;m8u(UZ|5zJq`%%usdoVntD{M@+)3uEnXPh}Nwl6~=-P`HiM880QKE?n z!_1;gB&H+W$#;G`vEYDFayi#(JH@k=>qLMo0k``6fW16kzcILtR|B&C>%BMn4Y60D zjyXAA?|GYbhsT7lYF9a}zn^RBzu!U_iOJVQtd5=k8qPH6O+Y@l0~ zcp}tlxc@2bT=(L7in@R8`ef!3JnyyL`^HQ$idp8hcVJUxCipUvsvHP+pMdm@P2 zX++R<7r0sA9?c$7G>>@AqQU#EzzJ zSFlG7!gjdeIJLpV?4diXmm@~gUi0#U_!?$$gvM>d z2GhXvfJr6i3Hb*S_DCChEs(99h6dm*QYz_`91kqM1Xy*0t^m~x1CHC3q6VeM=Umzr zNm>uEO|C}B`&iV|$hYauDwM?EyBonPUAC>&40N|-4FU()L~emK4p0HPgz;#dSVzaG zZ87F|@e9jo-3XD^xLV%^q&So|-NF?6!Ij_B#m9ZACF2DxH%-R{bK+IB(G^lUtTVcz0$h#NpAjcmSrKes)- z;{N?Sm@y2-jeA%l{kc4>qyBn1y;sh{40a51KrEoXsyEZF@NV9r>DLW3v)ak$YtOS) zVmR~S>&}D~6CP@_=wl9Jmr5J=8>gg=MeddB6y`_s6FPsRleO-`?T2FkEs#u=G+8hRwx<}{ix~C>)UXeyb^ z5)a-Cr1gAQFiApj0bgqmo@RqggEH0da_o8x0$E8zvC9=-RKNQ5X00A7balOA ziTu-og0iepUsi?7Jj!+=-(&kcRT!JK!`QU<;wsuV4q3$N@{hmp-NNoz8ti}9HUb1< zt{Ngkvl@7bl@5(1+N&>y`t7&(Ug3HARWJV4KGe8>$D>EJlr3s^SpD5hXD&3?2VsnY z3@j?DZxD(K*29{91jnsz1%TE+=8!Pw0i zgPm}Q=snhSM<|T|DIx+n%p#8M1S}DQeeK3ZF87Q|4h9T$;P?sC>i-ceK!6DCqi_jO zy-t}W6hjICT{Y1bz=%gQ{MBE?0-#NhAGAZO98n)(hyf`$k5B2eZjN4zpuZoZn7w2b z6oJ)m({F&0C}_i@G03e^@4%&(UAjFr1a3JD>y>|J#7iDyq6%JwWp8LoU7s$HB+-?R zBY;g_1l70uGl8*o zEOGv%{lt3}a8{+fbT_$~%2hvfU$48cTG-m&cmuO#b)J3IGIUDFotmn4xkGLZJv9%? z_`P5_WNq%jnHytv^PMa}pMWEy?caUGb7718AQTp-r^Lo~iW2;wt%9dw-w)J^kbO4? zNSZY~vm=TC_AY!NY$DIFXJYFdfOn1qH-D>onG2I;2%}I9+8;d7ezgq~X1_^e@Joc} z-+`&?X1_o3&|voUWWF~Lem5MyPe%7-_AFiF=3vu~vfYyL+mGV^mk_JC?-vo5<=V`n z8rr-pgybFc`-Uf~wc-^xVkL#-#Jx{Rww8mOcw};^w&a%UR3&o5s2CNxh&&j8H1|Gr~UYV$_oZ@@gW(yY$fpfd1YLyjt`eU!XmS+5Yt>)_T;tEO1wSWw+19}u2 zhz!DSea{oi+&k%J0m%5sZm7GNn_pfR;&?hP4`K$ieiW-lu=vJVIernE%?FxD^e$+jk|x?9ghVZ5?t#tp955Mp zHL!mXb`WOh`FGo_tE)v?6c)2as$O7G>ws;_6npgVB@-3Cs@~mIlf7CyY>Gdy zbga$xcn-dFP9PYF4#PA=-{vLjsG+VuvIv6OiFWc@#1OJ7y|I$3Sk*Ik2|?h*wxP$D;dgN%2fL(Cy&6Vo)$r=#XJGI6}nKz z#x<6M1o{B)Im}Hd9mKOtF?_0&QznmK9v+Bn#F=eXh2I6W}Tii*v}6Qe0IE z8+CO8SAW$nWa8x{BfeTd>XO3*!DOMD3zY?V76>lo?pOJJ_37}A|h#2R6;*|j|67LR^n@WEON{baZ5Ww&O^Y`_CHVp-c$0Lt^)>jX4=iU zy6Y!fg(uxZ}

    +hpx;L^KV9$?~MufqGP<0eaayG$m_fIJFF%;oa*loT7iuRobaFZXEWf$5u3p zuoyQ_dkCKT0}MQ2)9TmlkRGE{8i4&!P^+9u;!WTg=k}%0KhG&*n7oF&@vk2D%Z!q+ z(K$eWEmPyO1XRYEhnm$qO{(SbAdBnKtKSA}!npXwP+2)Di@SMTr4}KHLwOdi8Su;3G$!S{t)G^QGLKlp}36!_x=ED@p3uJl6 zaBQY$fbfv%@%{}y9bx-b@D{8ypv1?)J9YIOEVI}i%}?_< =?MY&s-y9gt>ewz79 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

    7r0je`9ED)#Q(Ff_#cvGVfvrEy-Pc6 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

    _}#Ant*|I{EMLpVIz2UBf_0K@P9y%TUE1 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 z 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

    `lfgS*6ysh#CZf9l?;q6~ z4UID6{q=uwR68zwR6(7d4^mxgb!p4!tg$@4&RARde?1%3F%9%F^{?JKMQs^0x}YNm z`s?7YG2v&v8>HG7svzy6PJc~~wv4IOxmu~yL?i9*OAQ=A z*@ODi6L-Gn%}>wI^P;_#bin$?XUvcTV1Z+ZY9BQGq80;^9i;gonCaj3$(Wu&`#ZDf z$Q&%wb4;qT0nWfb3J&S^|CTpm|7Uq)eI&p`pF`^ce-k?xJAUh3#S>@w%2(536HI+p zTU(PK!`g{qiT(}+uDwgDm#3C@7$}IyOkTfc&a}u)>`P#MV~nih-}*+yF4CNu*XQ{o z!&bAphi1Y5)-27QmdBqzxAK{@kDvvpjku*&J4ka&| z+Ua~lx?mST!4UNLWr3-$-SELT@u4O=P>`p@F25B#TEDm%$eFM?eN;866aFjbWS^LMz@UjrDVNJ{U-Li z>V|*TSZ4S0(PRfouGB^y0LdTsPnAaTM{zjNt&H#}UcZM-oQGmSmm{{W!A+J0Dc<@C zp-jlvfLdWrd+

  • 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�Z7<*$uzl(vg~2wDa8&lMmY1|H`9v424##Q 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∓faNoMI58kGDFqfs=93+3x6X-GT(>HtI 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%0Drr~Zb&;Q#+7{6 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 z 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 uC1-p# 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≠1JWmpef4O? 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%0A9Fbhn~tMSSn2JjTtQElP2VGt-P^ccXcDCnlZS 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 z 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

    *$q1i=wv_@D&@FD*HT0~Bb0 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%0DN>s|6XK8D}OrbE61a;Jn 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�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

    s>nT0wLw*xf-!Y^4m|p^yZ>? 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 z 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%0DKmE#T;`pr{X2DGNXfdF^X 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À>T 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\R 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

  • A7(&Fzllu?Fr zqhZR|-9~x;O!o8EtU|P2-Xw!)jiW!Gh;O^w+s*oRBRYueQ?oji-wVn(PW}_-f+xS1 zr7>tj9b@{k4M^E;DrHUBP__g3;_Kx99G#zEzC0HIj;GHrUcUbB7y0>x`zOnXOFSM} zR%TZl7uUA%$VIszgic5ue*P#cV1Vv~7Hdq*N6=W%RDNCKL8r1NFjLzhx*!t*m~PrH zUnlOCoxXtGftDY0?=;M(ae;*W-LZ|ITd(IbEN-^#Gyi(QJQ_N;c12GiG{LeD$Qat( z&kETi#>mDlh-Q~2nmtE$%0nR1I$bs55l~&1VpP}7?|ipl=eyaR4{f5zHDBFO;6EQb z*#kf*$LuDNyLX}!nYWx-NsQbNckGT0KKI%70Pf5v6U+$SU|D$?2xhwo$}ZD0B@lKam`R^4 z+>P*0eq3Gvk!X!YGJ$^m?#`5%o+SODrk5zb4Y-P8%-CeY8y?7 zrVAv?oHiBS@tu!>mNgNlO$BMwL5AcgyUO|y%}rdC6-m>=MYt1=Jdp<8{cP$f#aAcE zN3T$oOWC_?^%$MzX8IFz&6%qu-POnLleBC^jiD@$k_xqfgL57wzkKvasxQrY|U-PMrXu%Eap z`Cb-oTOF+G(gXO5sh)jx{@wY@e?3(w!UBDpQ|X4uKGyD|jTm5!Ck9}TIxPlZ;w+iT|&Jo zz8tHet>|nfc13mWV#~bT#g^IJMW3<()u?h=BH3&A`+I&=un>s#dJ$pbhRLd7)`YCs z{*@u=LKCtYa1*j(2bqwQ>hnYw)=MZ2O}_lLZaDX5PVsle5Ujh(v~QvJx=621Up;^G zcMr>l8*K)ZM*pXPScIK{knqgOj3_cq1u@~7TP2Z?vebPHnLY-;oOOy_&RW3^O}lC5 z@O2}bZBH%?fv@S@g{d=1CTYX(xFr+$k&_9#rnjHqSX`hjp-t({e*%xfH?4;Dk1?Q} zI>S$}hHz;Fd@V7Z-B;W9TvL&4M}!7(qF^9aJL~fd->^C-=nbp$X7LTPs5sNuR-G?c zud>l*V_S7$VjH!yC%GTodMK2)JDF3F9Cf4cWU371Zg(tnH+U*L-)y9=%^*^P{5cn{oB- zZljQJKFT&-!qde5ajU>axTfeX$4pVGp4Xx&oCwE#WPDX39KDj|OKNFfCXPbsX^YUg zG5vYe|LnF}8$K4Ms|#?Y4AYcAK*+C+T}y)LAx*V!@t3vdF4ElyUj6X>#mmb-pS?PL zF|j}WR0S1pgty~P&zfNNLrsiBdJNg-brXkRft5&u$lD$dIXAC?aqTX6($FgBcq=^IF5kXLLW$ zt7iKVXtLMA{j*OQjNh640OL27=T(F8J9EU%f}K~f*g`Puz(uYD7n#(i4JrS%R){jU zlR!NNZhsmeqQuGbGXJL0*Wdh-HE4=t-7ZOytXqPgKx>j=TnAho2z8M$k|Jqt*?85x z6IRpfZ!f=j{_On1w&LY)!7~SI)6+BWJcGtlR%|jj@huu)`z95f?_Y>z(g4e3Q+KBR zXBKw7>cv{z&zy^l&xY&O&H1j|-EC#~ zzZ=ju3pRkxZh)Gw(br?mZTS$OigKzC0A0{|x(JwuWxAJf_PIBkE+C2lOQ5Y6WIor! zg54i<0xb(xP4GLrPbobl(ALnRrTARNswG>vPh<@ZNweSPJ;8pF`fdbnKtl{_W~6+eDYdkyhWiHjVevr zV5rZzb_TqBb1D4+Lh14XcrQmce_1qC>TW~;?%G5XEcTtaN7r{(yA>7C^7?z5`u{Mw zy^^)~HMFT;Z6Zu6bszHR@?@>IKwN&mkr4wSfkLu&9QKmk<&RD8aiH zEDJ~0YL*~tHO;IJ+ytVEWhAP&3~!@pkXArVd(T!t{2#M{ypNmJj)|y+eRFI4$@ZAZ z^q6&Ewi_!qCsurf*p+-TFnzFMBOP_rzePLKA?O@UcPKiC`ju9ebJu0o26A{RCx^$& zZVH|D?Me#$XupT#5x)n2K7aYI&iZgKdjnz8IA>ADtPpUM#AnXCVT@5LN-v^FCdabp zv9&M3(UuypLSufrhR)jEO`sgH9H#~*-)Px6W4ocr#90YDOK~q_1MO#G9d{ZC!NXxDXjIkhe2k!BpcaR8qc+`F zi>oYPWctTu)D-J^hO>kAHZ!+^;Tk^#RHMG=1_G)x=Q}p&`Hn`-Ee|{2{UZ+T6#tLw zPuCrNuTC4dN1Gbp?!o2W-T}9%WROKKc%9|m;-lo=>cLN8bTgN5(E<=xe7o8VZ)%cE z6jr@jnbAFoL$(=yLTzT$)_5GU&5*`e>fbVf-C_V)?R^2V5)jx*SR3A^QVd+t-R3xh zYr#w`-L^ludj;A;v+S9^KdtHtTDuproLtDZn60d73zY%WwaleM@ln#Dr$MxU3-#F= zM2mIhY!B_qsp%JH;cBuh`6@{P^|~ci5ps^m)mhsT(uz}+!RE8pGN6*wA#5dPR}6;U z%v+8A(;r}FPRpFy5&am>#pvXA!^YLmd+=rE z`^WBK1pvufXh#!Iv2CkaPeEG;xPG$$&Z({D;hfsq>}Gkup&gWA+|~=04-w6%I@*G< zb~qqe3!%<C zOspa-UaVN5MQ6ca4#H^w{4J!nEi8AU+LCeOtH9kZ7P>XBfMScAStX^rej6vS4p3B5 z+o6xYegI4wGOu!9u!T4L7l7eR|Th#@Lg2ifjUmchevkwm)8!-*`oT;#9wrB=xpILT|p zyD>~~5W=q#*3eXH&#E*AHRso%jG#?cr{U^58i#xiU7tY{DWGjd6W6vu_eJIfU)KE$ zZJhWtJj+et*9R*D-X&MYUoIEn zYJK(rQgHP^!6UHS>+fQ;meKlAdE<=?buq=eYbfyXH^!J8SeEar2<5WkZ(g{7fB=c; zIUUsrNaDIKJC&q_ncX@xpb=~yT8R4e zm1xyq6Uy5ouXwf?Zs7ZM8=c?etX}0c2l9z!|WDnqXCsiIon=fAM6 z-0xC)eu%x0b}spSv%3wg9n+fJ@ts|5#H}lQlu}}|lik%sYXyUs1RnslgIzJg*ehH) zz4kW&t^fw$JA0z#ze8E`OTDc%S=QYMMa02GnDT?&V{_R$%v{!e;@-chl%rk$bUNvk{`abDb;Uk9LK-cW0attq zIXsns^62?jW`##{$1cm)A10gMJ0E9T5NErP#!bn88!6Hc8y)zUTN)cHNR?NB0CNCk6-LDX3X77JqROE*j7r}!!;BG>xcewzr0{A@uD|RbjeC| zcStJAA}MkGM<&N#^4!2~vb@cOZpWAQdJk1qNO~n`qUMQVb}S5v}Jr=uM{7LOE1fsZ&BZW)O-NmzJFQu(9v+ z$ECM3P}PH=kFcKa2rHNPLNYyFm*xmVcs81*iQGWNY5*|GsmRJZAlRg)ad+4TtSgq) z8Q|7ON?AH9Ec62b??jRhP3!seA~XN`f5_b!YLXWFxq|~L0d4}UDEn)GI?lb#ANCvC z<`=N;iIl1^oe(hLnE7W|lk`g)whHF9N-z0YT95Z;o_U5193LpWb$Cs#@7oY4Ef%SK z^o@bcrwE%hI@NLMaoEDAgnc%_`MAnnJ`&6KiFHm+E-W|ApA1edy&^L4s_2`m-d~qX zX1$-6BrN3w3z=+&>-{UR)9$5pT%svYt``_6CPfB&_IP*l8rk;iy;_8hDAzdo!>iYS zXz1SzPPINO@wXHwq||Y510Wwby}X9mL2&Rib0JFi=?~~a!OTg7unFOZ; zjHkG%EYozF)&O#H0Y;H%&-30a?XXZmc4M~}O?cXD$C2jYhlRnX?)0(JXHXY%S)y9p`_IR6KExOz=q_7@59&p3)`EyJAwV#9ULiGU)`*-!ZsWJ8NLk3bNlZ@JaAi zDYR}yr}Xt~CEYPRR;TpsVW%?gI^Y5{_LC4*k)H$PmYbUm1M*#{19R#BEMQf=7mYje zUHYs~o{6|aK(78YI-DYBPMde`5f)4cev0Oc7dJ{DzyYkw{~YOg%`cbdAkL6j(Yqo; zxf$I_pUJ^fT#aTz``RS51OwShmx|*)uDdH`kPf``-y>Ux%IB}1yAn4mlxpCJ7g#tzqtEHq{4+FC6Od){?DUH&APDogPsIFjIeGnP4&gB9Y)OC<|C@ElL&Bv@;G47cdg zIi4i%+gXkL>>oiY(`X`9-tm$mGkhmw!1x%_mje!SjctH9FtO26b@~ZdLU6xf|9`{H z`EC1+gBF|G!saHLJvbQCS`h+aEkcnml19d|qRk2^W3LfAsGi#uXe zmmv()9L03$X?$7))*Y~cxs-dk{Mh@Hd%KCdRH~5RI6XGAuU-$7djN5MrO%82o;ejr za83qho6u0OsO6zB|3Mj96*45)mA2)4PEKA*89Ud^U5W(9e6fms5%wF8qXY>~`Mj!c zI4GDjF_n|)J9uMsc2a$uzJXV)uDA&wOFFq(|D(tQYko&*r-78f$6y zciEnaSxV+Tu6&5$eW1`be`57ZrttYxFYnjCd5Yw1ZN0RQ9phav)BAYEq7>J1CX8D; za3*9M5{UCbF)^r>bBOb%9Pp$b>-D@JNMu)*2LTtk6DH5_b!Qe0s$$2=E%yOC7QxAt zL0oBQ-?B~8=TcyJBz_A}@9+7tdwm)CM0sn|*72U1dAq+K)EuDaGwD9y?M6WuPWdBy zbNbP6Lqq%hef+4@dac+P$g@dT#8InFSWjd@i)yG;_4 zLL+br<`3tJ#A|Af6{pOGb9j-4nf_V!{2@$wm;2t*v{qM7*6*23giT=A3&^(bHg9s; zM~WgVT2kN3kLnh0^3)Em@q17b_+}4@G1ovYl$v+z&B4LP5-RW}Y3t5(*2>_Xmbst)Jp)}Ui812oUU%ykI$N#>Fw-w^j#s7S~%lYsK28?)%{Qhua=}*MWg>h z?|hf|ixp&4bc85L$XcXBFHLqbyPVeN8T{`RMI29A3kEx^L1B6gdLq0;BMC6CDm!^| zmo};Yo^X>-?&8H-j!{cy>JQ^~b#3aKO4YFCt(NAMJ>=n2QR?_qJ?Lp_r(sWWFG><2e#ZD?}e%iNyWNC6naF4c+ZDLIX z|Co%g2St_+VaU74iZG1?aRfpGzHioQEms7VUre}Il08d0+wk~vl_Q&8u-!SYqwtdw zY38e^C#a~dH*%0d%YuZlxv7HOSEtf&nsux*7i+55la@FQ#6Z!Y_)ZP^BY42t?WM4p zVip|dgZmY%4LVOgM~(yy3dRYciQFWNBE_ERkfIMnse%n#u*F4u?HF}347wT(yH3H& zW&a@iW{^f-S$8yJ7U1i_wN8ykPNlaMX1GNof?+`KDG7)kebxS3!M|=jybdfOd)Q)% zOxwsrdSS_^5zW9vn)uK!XrD6}+U%^6Z}tsX8HmEmVBg~??*3qU@F3ZAX8r5_2>$eh ze+ipF0F@T|+4R(ayl2Adenwuo%{9@nUgo)<9t+`nXeO+esv(uNREBAUg=`fIAiekY%q2^X36 z^s9-h9dbaBo&{BNurw0}lKy%?KxD8F-@L4By&DE!?SKUGm!4)+ysbGitTKSLDXzXC zr}Go2QvEa0O89|VS*eUZ(@FeQhn}tQ@@IP_4vUbR4$hrX!2Q=P!G+ixgV?1v$Pt_m zQ=Ey7ul!{vo6}P(_AlEpn!$W95|>;R;^aoFsuxx5>O^VfhT1~6e0tN=;u%~@9i7a} zbdj`=qIi3yLyio!bZ6jF9L9N!$y78}-A#*x8ZNzsQ)fyO7P)VfYFIRz=}sxO$w-CJ z2+}OEak^+P}T8y6E7S5e*&A_U^WSjwh($=RLS+JF-A`Uv(^Z zU&gfE@Ez*EI?z|ecI|y1h_!H(tlc+ODhB%>OHAGH^%aCMbxhNBb!kF*Oft;FgD;%4 z-8P8XJ_88f5XNVbidqBpNIj-@WHnuaIkwZTk#0rr+QFA`AY`qPPHzjCG40k1@$*)_4}?g=_~1;Dyl|!BEcI!0-)u6={|;V>G_gkT*E&&|7?4L?_^!-Yq;#@U zBrCW^=1eQHDyrV+y$73=wY?jtU~F<*y4x0Qtwn@8|7m?8Q}cj`Jx;xop4G5nBb(>z zXwKI-Yv$2N5HPJl2LAlurn) zq8T8l#kfZD6DR+RljIQr$Gnf#jVazbd~EPMhlZrZntlAQz^P{WQUh_t9LBAjOk2dGC1N3$$_eZpa%Zco+Fow&q zAXBvo%PZhC8rW_VZ-X~tclMg0&3Bi~b9K2e4x!yXE`)k!Hyg_k{yxR0dG^;3Av6k? zFMJ-GdaNU)Is)-ZU`(om_kxn}{$+5ja9k@&G+@x%aSdG{rZoJ$%m$C9aAQ7Qf~T)D zY07|&%S*4KnelM)o6*doZtkm){4Hskc z?Ekv-c4R$R6Y41Wa3sX|GwtYc>%a2`$VfIr`YvLcB3#C9j z=MGXCTG5=kt(yGL!U4#tjF15!C*v9fUAIbsq}SV1ip>MJLJ}3Vq$Efu>=Sb4=hl(szJoQNA1%Aji|8Lq9Q;tRe zX1beL!=J1cum=5SV`)guAJSNbv72E-@iuWL4qpesCqD{yF+FIlL(LK}ez?p+P`;$< zX?{Um*uKohLEf06G*?fLTLVD3J2g@~e1?>;kscm4>{3BA`GBzmI{(2SRhW9SpOEW%jE))t9t{)q*o9;$OzXc@K2r#LNp zATW&yB0AKys10Vu!ng#bNJpjJ=l|>Wx-Iwf12*>JLT#ag5%?x1@W2wc9TR$13TciEbd+Wh~YZFP<8mdH z_VtM>guF!*O9#OBD}OVkidIcWBG5X zm*;}u>D_?yqG{Yi#j!Cq8v)5wRb8wSILTdXJmRH3#jFMYjyq#bQkMgQ^ z`5BM$q904Aem->0A)_}&#QEf(?L>C5ew`pa>SupD1i90T{;=oj2%YiLLWumh&FMYn zpraK0XsO74fjz=|y-g=b0d+d-3B1A1{Du@h>yeUwU-9xxUg#014xRTAr+=?e zi2ODxUZeVg-r^DX`5rWAq-`8Wm97L~%Y0uNd7{>apX`F99ErMdWA1_ku@5fS5`K z+fe_Uz4J#=Lu8tj_pNcSKS}yszxEMF!Ts@uebc$#5N;^=99Yyv4OaTlno)O&PORcH z(=G%0*ANw$zAG4^Sj4GL(-;>MX8?=#bYlJI2gXhwZTxA!{!sb(pf4y^%UCt4uO=1{ z4c$pAYRg$857y8!7-UM|@>mGQ&23kDM%p#RS=M~e*jCNCuD2s>p}iR{cqABzMWA%8 z2#1@Pp`OK4Rs9LFz!4vzs9z(uG$d@GSA{fu0LhLKQ4E(7)qYrvX=kC^ZRoES=D~NS zw!cCo2I*lP19XMge>uiw6!vxveRzYNB<=*kBD zHNFN1J&#HTJZ&ARi?JTz9&ee$^JboZ3Vd~bs-7E#Hn?yo-zJ%bs~Itk2s@g>-5_jafF4wP z-R^)OI;t1-7Vzb8HQCIA&g0Wh$;I5B?$N$?_F%*StGh8`wF$fa7RoZ~ejW2Y(2Tz$ z8&jNT_fjq&O6bFA&Yyyr1x9YHhb59u(}cOv8*gg?BW&{(nlCf6gQzI*AAT-v zpk?qjoid`uPEIZ?{6LehqJ;;mfHw7a#DAS$--&!)E1wN1mvX4n4({1RkmaG$4k%ljX4t!OTPu} z4`lPIF{JGT#1F&Hn>$v}_O$v_;Ykp0_^A;a2_ z!^X=t%54`k{xx>wME!jEIeqKY<*X)sfY)iCH=KK?I%c@YeC$kd^3n*0-VKWaZctD} zvGRbePKRLFc*4|X!P9TQV(4+=>pS|I^0Sg8{pLWozhN9i!J|7?&<|tpv~RnDFMct; zfAn&aPXm~5-pH6w-pHJPyl#m{y>E#(4Bp6KE#Ana$L?e~4wAXeJpJB2$;c(L@)!<3 z$tV>yvI1Uskx`%jqPQ*r?y39#z$WiFbyqy*eHSv@ zS?C=TpDXX9qR!e?AfG-^moclyTLYz5IE4!=B)$RFRYZ>mdL6a+2DGL?mn;FDmU5ZWo zhRnH){bGuFGyIVYRG#I;&69D1egNR#h4$qK8=1k8jKgQ^l++x%A`5EpE;rI;Q@j_l zm-4S|XUo;@y_?{GLF&ADr9s1jlT}+_HyF4n}B8C|)wSv|!!3A&HlF6&l(EmbE#^C)3%@R5w#O zXPcZnuaW;!3;^l*l`1|=)O#@)Jdy!5=PDdyGLPINvW+4_g2$8fO~O*f6SshP)&S=U zpQ*mkF&*r+9Fuzj5c_xyUGQA$G3Mpe}9Ai(zSBb`%(oK>hrI>h-yvx*OFR~`x4dfq^Zu+ipYB1)?N4c z8a6i%737^7nzb4kmRB5Ik0pZpT66fvCb9^xy_@fm*ZzuSE#Fq!PIGAq*-dnvCQ@m_ zQ|Ovt;~PUW2s%{Hy_@9UlxZc5VXwU;n5?Of{=ei;G4K6E-VUPzrVsipFdvk**doXK%Y>^hvB|sVY8mt0r6IP|pF`9o--8Zp; zjv~aXFM5NR9@EJ!Iy(+)iEjg>pbBaRmP&xGGj5hl4N{YJ~%yu2Ri0V&GC&vY~B_3W= zIl54lIgl!uQ+0F;L;db~B6PJ(m`)bM;ST5Nc_4&i-n?8&sD!TS4@q=)dwPrW`S_(o zo06HYHlT|xRal7#=lJ|OB)>3!RLZqo6pG;DlUF!lvGrj4uwUZ2F`8JJH61}wd!KLO zIT)})`38Bc!j=T1&%mi{zh7w{!{ErEO=Dp%+M7=(S~R?t>_HS>9#4$w7AF~Vi!~%v zqI?T1*l$1q9xv_qFK{X*A-WJQXYu2NcOYC$FOCmshc@~5MYkaYSg{@9RnVmUBp3be z%`f8HCJ!L+TRv0Dar}R1<)~I2811(JEmmK|xKr;;m$|R!Dk=WM@m%Furs%?T)xEh6 z&&RjTFZueL;PBj$g$?4w!};z0^8S)`zBmWveL%~0n`JjP^QjgjzM(luGU44F0&`jK z6vEMS2N~!CJXod{qDN&9w-2=UfL(Fq^Y|!3F&A(%yetin+eQnxe_MeirPi76M}yvH ztL?d`Mwfc0)9s>jxsR-erdqzdcH91(89YWp8OO2%Y&8_Kti5o(R6MS;hm_>yR_NF7 zz~lL9;zo7{uj}pke*Y~aA@FBsVFlghr+S=usE3zZs#?7T)ruE%u*R11Hg1@`_GZe{ z4a^rm9Ef;$By2YTEmz)~$rpb(XC$OyNmlCp0fehJ48?g2U13U(cSL$8;C%l7w>z^1$PH?o&b zlc6A@%zvA;cvvMxU@s(PeIvko&AHO; z!T6NbB$ujXAT;+IRi?;{Fe1k+Ofn5w<%AW2JGj-HqFVp04=gmcrZk?}dX${e{RcNJ zsXbE;rl5keltNo3JywwhlysiN{yCVzt`ePZp@jlS99X^YDKTY^guc02$NO(A22iX< zL27*eBO4~*^qx5w5U&}!jGjIh^Li+tBiJc~@om#p#~q7~8>;w@IXW%ZS}W#)W zQ6r<#_BR3g9d2Ng3#sA44Rsf+oT*bL@e(WJ#&Pc%D2acOdEe^>ebtJkNozh1Dsq3N zQn|7;_=6*w*s~4hj>luu37S!Enc?>4%pW_AMC3HpGRpyyljP~n-k%fVf*8DMOclq( z^JM+?_Z=yc1O6%KxeYcLXw-7O#~#h8EJW0WXqOO_Iq98y->jRH)*0;N`Qx;QD#JMOAvIim5GsP7I(50 z?$2qo;jDwdyPp~aeNm!crkuB9S;#J`7!n>%N@Y8T$}5ZQOKRd~z9Q9@ZLI6$rt-E` zjb%!2u_)RBFWExFTr>|CX=`Frlfv;Vu&~h`L>g`U2@9vrRX~|2%re-{{u1tatD{#~ zG5EvJ!`a?(aPlm!-Wfr)h$fM`f9|}2mDacUb#EOr+@9Jbx8cmf+hbMt`H8kKOb^|3 zRr~qb9C3Wol2wh~hUt8Wwqmu8pbFV>?3LSQHyK)3%Xxi8{szto8vcI zhIy@W$mj3{`C%c|!*?XEYVH@kv_$56>JL^8IA_+ubx=KRTU#xl!B;gB8Dl%kY^xjo zw%#A)Nt##Npc<-RnM|Z~Ti_V|06<;%AbpDs}F;NTorQN+q zd3o=~zIFswv)u&M7Jt&kj(yrGy?WFty^0EL*?%>%6x|KZ<+cai(lasusr_$pv)L}b z918ul&6Zu6jM)Y= z6U>~3irJ;f2LmM&7}r;`#ParlnuE|t&83PY(Q?3j!>Yx+H`uEcc`DrH zhV`Puh_DBHJMg1;V1 zqmm5GQ&k=E3S&1r@VXrAR}AcM_bzVS93~p|I&8991;+2WYGo?ahlvc}#N6G+UF>5H zn|9{lDUFSg=CAH)SG~#0en-pq9Hg+i9weD4Z>Ot+rBZ}wO#B9H2ddk{rhmx|=9m2C zMaPzh$wyVsyLD?<=e2ioE{Uk~igLIHJxq1YueWBmy^sEi`IWHfI-9pco~u332cpg# z#;in3Z`lP|M?$!&8qQ_Q%s0y#+Bdq3BFol@$MxX(bNtV$b+EKdQV;|K?#b`p)b088 z>CquO1thb!3Wps%lWUJ@RDe;W2gp-kS&x>g%4uQkQpMB)y-p7vF7f-N>6NfDu=(&2 zvQI;LalJ37|eN{VGKy;`KNt-U+deGV)Apovd1VIrH;L|cSt zLZ~hmY;t}pyFp&l{=k<~<8pIs6oRo2i%vO9wFMU^iq7pi4RQL2*n1u9;VgIQ%97ol z4c%^sbuU*2Atk2YeP!2v(O4M~NjPB_kM~hJ!9Wzt(Sk1=PB-mKu;}nE{UMG|;(8f2 zF1TNJ_$`oRZA(vEO}dsY30%zR@GNbt?9~4?Ai$MWk5GTg6u*XLC>0CHbsJP?vr4g0 zkGywua{OF>9`y+LtBaz?LN6W0)5mB5WONqfh|-Dys(^#4ITCi=3Z7NQ{lw`C5WcP1 z#(N&3i!aJmTeG>511Bbgy=r_ZC&^&epRM4pEvdZP3Pty^p3ow#-3k=_JdkZ`Gm7q< zu4HN<$+)MJPALvTAClXZz5U$ci-nYt$Ck=B!$+>4fJ~TF5V~c5d9eWs$3ni34?6P?047(&w>q;F?mN@-0wMx$L`V zO70wNQvCA#V{AtfMH8cgpcTn^!e{-`Ng+V#ECcw3-)xu#uA(mufq8`kqP9%;7=Xhq zdFc@hv{8-y2HHXG8hElq;Vu@0hte5e8f8xu{oM@+O)T@=OD}K_f5thBicUV5(UV*> zo8wf2kv)18DBsK*w!GesQlc@I3eQNnAJfF$F}@1HJ@&`-V2;=x5%eM&4tX+`81Sf~ ze7Ae`vRJoZY-TAy?!0|ms1tWjsTCFq9>ni%07L>6r#s(Rl z=OwhkM`ZPtU?-vLO>B1Q74CXJG+#5Qyk5!j;~Ah65uO(lsPFTgsfds)j0v2x{LQZ+ zvmKwG)CS0#2%B)Hhm|f(xIVWUUe7r_MBle91plfW|D-i=Nq2vNnin(n(76T2p4izw zhKlZ9c3XG9ftuHsI(=n#_RG|h6L~PI(GaP>(Y`z-nh}b|hXPmNIx8t2>doyED>RUT z7bAA;IW`r+Qi~d2xlNs~(vAqQLbb=Bio1A_wS1mxJ${LVW9fJp?^9J6uhGJ*BB)jy z;~m-YV2(t~cEydkuf4YuzzI?&6-uw7ChcCL^ zlkP(nJ)YzyQLA3gsi8a@w=2L=UiG?Ed4Vht5DA4^U7vKm`~!P+^4^7^yWj5~grMVL zRx=EH$5E*RP^krKYvmS3yJls3dMooJ=K+I6twAI|jk`8pzAY@YG2S$-$}9$aCenQA zm!fPBn}f+qcVpVx4p=(sdaA;zDYnCy#j#olAvt|E`verZ9)y0 zl|X^Z5)0w@9h-->5{*a!;&0NcRI>G< z?^BL4l@Mg(01qO|HrDD-)AMoBi$VkK&(95UN6R>I>cpAuztev@qGMEET`-7RXKz}N zq`i7|xPBksFTJr}lEg*(lU4*Tw(Vj9M)~{KA@j2}YIE9{!CMfr-Q*AUgRRli5S0{l z-xNZgT?yZlm^Wd`}1FSqRWzYZkbm%c`k z)bCo>zYbKG4DFH?5EtX~lhh?rIPy~px24X2<|JVWK*izNRISdjB%INq54C93M7s1a zpYn~E8pO$$6E&0~IThn5@bB-w&cnqWV2syNSHmLIkULP5Wu#&StctwS+v<}}@@~~| znKr|VD`uAi$-}=8K(Dm;d#5nqv2nF*HDXitb(6ck#+6ml8vS$+nFLKRT zu{&94)%G{@xE0D|J_i0S4avx8C0hHr4hoAC<}Y8jk@GwFg=(Bxb(8HKEK$w4~w*wofk)az)>un)k>TM-Rdz&Tu$D z4TD^ey6e!QZu`bY1?rVh|K#^g8%e_(amZNjwQ`F=##t`!n~xm7wk>;G^c5h?kZGfy zm~?3!L_A0R#1DI#)+Qak!Y}IG20ZU6lN^CZsCm=>k}lzt9TBTuJXLl52paclb6J(# zjixatIDMacI{tW^FNG}8j5gyk6o5KaqaAJ~5{}@~j#b_m@hMn?C)j5!wcZSAb8FF6 z3w<5P^ievp=2X8GanK{TtNUc~4PreF6Df+VL{;Dih_6ibUzXl62^^aR(qvH)qngBR z-Qv4wnRK>wT(c92b&FZAZ0;v;@oQbUTo|g6v0j>VfhPa*z{KdFD(u)3R=1xzU{7T9 zS5PF^A&(gI=7<6c)hGXXWw01^A7kX zVJuvNv-24dxCM)-ZL2J8f_)q1I~b|B6jg#VNf|*NqsF~DO2pu2ne~iON!mk_l-IUk z5N+UbyScZwN zd&X>JnI_liO8H@LfcN63eOj>@vTYj6(ELCZ7!M=?V^!nK+8+4^{|#|%wV&M^e{t#f z_jMG6GhSy&Urf6M-nO!hkDCYei-;E6057fasFPd?q(*|(E1 zWzi}dV4gb~st2eG&jr(i8P83M5mG}HUjR`<;o;bLAlshMQBB0+rW>WQu?LIDrIz(+ zIskPpQ_I>v!GRGF%I69d(+jALb>dOg`{a6Y%K`ZY4pO?LwDqd_>5bIx>y2K3*Cn#3 z>@Kqq?dn0MeOG4QHvt2{WA=?d zj%q4R9&V3K9!3#J7i7T`!@7_Yj&dr^A8yAKj+!&}0YjVieJZUUc9&8$XqdfphbXV0 z=cuT->sr?hy)x`KjjfpL{nnIDnhPBsCa*FRD_7lU?QYlbLGeDa?$GY)XiL7US%NjPo?so7a@W%~|3e!$7T)`v zkjo-(zscyF5Gn!pCYpv$fxAaG=F@p2WXU*zZ**4BY?ry?CobC8kgb6M z)QAlfi+a~W5p8^PWA6@itC7v0oq-Ys4#!L>p_lm*koa**IBeLOMS{s$Ez$I{j(l#_ zKt8`NMkGwc=*2G0r(u~VD9z`0t)vOWBCyU?kqZ=I4Brng0~g@2-+7^XMnRWk5*|V# zDOJmdrA$8cgrGpcgL+37p{v{f4nlla9QuMj@J+Ih0xmX^HSX-_Zt6zzCIy-n$b%hC z2t*~{s6cdMwGQKhVq%JrbFGcss@4Xah_&C3oAXc_iXettwmS7_z{I~^%`zXVL}Xsv z>5-x#=39NYZfW03fB6*_K;0dMc<)x^lODGzaC%&lDJFZ#hpr?r`DXg|NOHW7BUy3L ze@u z;gC0Y{o!$^jMwpfRg$e@2VW> zPPqn^=x~;$s1i~|y>%YpkeGt{x)L+>tjmMt3B9>G8@&YLhhs6&_zSQ6;CEj=Qtx5WU$ zzIT(iE{$$}NKHPn1yH||@Pr@)QkT_06$#&(v(g{m1@gzgWQtwWCrI7_>@F5*kl>gI zAs{t|4@RHok1+zgSs9GJOjU=gkipIu?UlhB(ON*7!?Z!8}e6O#jIb0NdB?M*qZbzx!*y|eB~`aqlL zZ*?d{a|OrQT;g$iY-`n93UAxmnw#s`bbVs|47M>(76(0jO`RK}{RMZT_BDHn9hoM#u^Q%(B^949Iw=L}c6 zVDhW^YO{jsx9gX^!3*lZ&KV5iaqwuas)u=)z{w(hlRJKD_Ym#Pqo7@8>3aJzP9bCe z!kRf+D&y^9T5oH=tM<}aMVW4qSlHWq$8RFWdOG|>_aj4PTK&%Ru@iL${4{}3Moxbe z<4z~O>9DM$SX9=ARgUO-7b#*b@8W`=r@bg5+xIexnqIMOR8-s|A9-_w7LNA59mu$l zVTPma*ZS)rSiZnicwz4i16gGJrC&^tqi{Q!`RuZ7wzWqUepZ8&A|-nwu5ml?&(Ea? zjZK?>!~2fqRF5k;5c3FfNPKE7UlX#SvGgDNc+6E$9=@Fr(iht#EO}o?hl~Ei`?{&j z{o>$R%(Uv@TDN%ILe{jnO-y54VA!twPUiEhTmq+gC#|utNmt@AjV^Lp)pbsLgu-hQJ1|7_b z7ZS|_5pE=`6nTf{sa_GN$n-{YWtDodFa4E!-uFHtQf6|pbbA|BSX)w7k{h=wvh&Q0 zJRwjT-Bh>Of|+;i^9fV-o|-R3ZKi^~c5VJYIlQ%Lz#dRA+kVPB%6praok4*ZJgk4- zEnBy$coCH&M6{!hnc3tqyA?Lxug_u}Tro+}FjAC%Pqc>I#R6I<-Vhure@P{sMapN9 z9hpAT#*&F|093pQ@bbpY2KSi$(AM52Vfg3D`rqQX!MZll2`>KaAJ)EJ<#w{tD%e2h z0)OZ(NaxFltv_{Jjl9>jU8WC8_4}++IQY0SK~0RV>vu_qdR<>Jro8KO^AhSD|FFTz zC=G7F)n`aZ1h(mxi{g;Uuz>rx6`(WlBOeg&RR!dOSMseJfWy$iG?0^wA?7qC+>iUL z^xpiTvF9;{YjPbW#WGxW&1RDki&?6s5D1$ouJVtsAcvbph9PKBC>tr6!=8iLR}?EUW4>^v-ap{E zn?ot0Ecb&A-;^ZT#~%s{6>T>%sO~<;p)^J{9HtaQR|i#??$yL6ovC)VTp+1YedLy$ z2L0sxxoHwBTC;WTIgS@k3FdY7eoVe|qf02Wqk88^70MQsP571QpG&d-8(~HJZSVFx z^~2%iz4w`kywUp3es-gxDtKSF5o-S;*MZ1ycK%N{;zaB7?TFp-Cl_TQec9So$Wy8t z>4vN4w3+vt*TwSTjN;QUTVu8yn@31da+(#}F?A9#A30L~$Y4Ix*6)Qu5wRrog~0%J zziSdhxHDxf_0RT%)GGSF8zUA8oj<VScFsmLX{!@XL1? zp1H_Uk5f*DXDpub&GXTZ-niZ;W6{ZDrjyi>;y&H{ULRnRYvT)Q#fLISCbXWlmKsNB zJY*p3*BpK|uDQuj+AiDZVER+IX^SA*e&yIMjepuJdPZnF+W~Tj7F!>(|exz*c%Hmf|->VTr^>bOH{IVfJ#=u z7_-`7d_;5(a#!0ycqWImrnw0Oz)uDtO+B7rs_ezvR7zc%5htatgs)MeFHBYvw{?t( zC4>kk`odGW;Did@kY}b$LU6e`RjbG_RjbG_RjbG_RjbIOs+Q{!h~<&K8sCUq3KQLr*c!SXhxF#1(C(XR-MFzVIls#jLn#$W<| zaZ1llv{+UZXWAEIYR(dcZfyQjIi>z6|NA}b22+-%9wBs7i->&Ud9vV>_?fL?b0na6 zjet6w;{SvD>(~qH7X_*d6sFT|3`2P+OhtSV>bo_Nj2gNT?PD9bhXnP$7oUWuE z2avRdG&*E3yq*NZ3mDRfV0hlu)ifBM^I;VXQ!A-6-|3hMr=xuPw0)`ML5@06w5Xn5 zv?ip|`{Ba0ndnH{e#5R=IcfIIEhm%jI!BMKl^`eW9f)dm-Vc&IyrR?x^$!-L8sn^Cu zy1$e2XMa7FlIHUC^@}%WFJE7rYbhHG0}EWWyQ|$wdb+u`z5VBDhYUAJ40A^-`1ugj z7gqEp{zrnmiMs4lR^k3m%;pftvP(YTFYf6e_FUxKUoat*OOF z+2`1u>eD4LarMQ;*?IUhlufjK!xeBlLwuda2FgZnot{t}$n0q_S5iZZ8_U7X9 z+qb8udozTi81Or5y8Fyck-ahhsks>`Emf2{lukJ z%3?_x%Wu%TBoYWU;o8?{Df--O38CqsO~BG5xw|*xG`G)Ah3F#a>gai}##y9U0(L-o;&7N54@LaY!|M;G9ZnRMV=6w5P zlXJCmqL0>%%fTee`Z5t+wqysb2euv#YO%WH^yTZnKKowJS(ZPkcG?Cm|G{1nn=7CMS3i*d>(?3)RhK_g)HV=hj)|f+mn{hX=!ghXS|4d7 zIhT~?N>=WbtS!BY{QPO-H^oqeB`l|JA7(PS;(3y!LfxjMGU?X)a7qJdQg3SX>3_`` zRH&1aRK~E6)q9aTMfbl(-Ppun8V6yS#HPC&l7oMMgg}k?{&`1Rrmk`2)z^_IQn980 zb@UP?BQtgi{8^<4+8%>C`I%BGJb7v~0!ojxnT8X=t zv&utAN@moBb3#NP~Ra0L$;cP8@b(f>~bi5b3>xYdp+-nXGiopV9T}&CWj9Dl`z%n%NnM zX}KwVnP&-+epdS?x|PsSd9A6%M=^OhyQd3xpt3sFFWi^)bcHYL< zB({Lb{As8Jj0_%Sbj^ZOw1)^r-prPOl@||8l3~`IB^m+lK8HBjgJHph*@6i(f}f$p ze~XnC?8`S2Q(zw%EG%t&_mAY z`Z!H0d2#BN0hB4u4N4U(qno=gg&gX%#t$0fOUp4PvRVeA?5#jPAjKxEu8>j+624v=h0330sL8CcG58i{!v*I!qhL>4-8@~9$ytZAi!j|ASp>3Aj1TcZ3Hv!7_ zLwNQ>>6wMN{&2V;<29k)#~OQS79F}7jMpOHz%0#0;byo z({*c|3r}yMieldoW^Pk-xe92cx@ zT);)gMO<{m97&alpJl;-YgKx}B+vgp;@-APZrn-}{JbCfKhW;ey{WQP<_k!I^&%gY zl(w}kDYdCAS9^B%=#U^Ni)qoom=j+m`$?mpeax3YU{x%AMm3LaRcb& z{{HgnYQ?=?n>w!WxoaCp+t~7PamB}eFHaX?X{q&wOAZmtj*cs!na*e~@ z6`@^aGV19uN_X)5Cu&>OhFp(#e<{Q!oc+hzAz41u2D!T$KRI2EpPa5XS9YZEwM)Y> zbWO%Q0FNPA`C1$%+;$C8k=iv{4%cIbSABCs0}`FQ!@n|5B!PH?`oj2uo4oU-{&`A* zR=;B}2t`Uh;{|OnV&dE7psIIm#>oKqgqTgoQoc zBPl0T*CB}B3`s2?27Bg zm{fx3RF&tW(+>u5HwL6p%r9n=&*8Tjybiz$i909@Z>^i)ri$c#cayoD!>$14OVVMR zPapx5Oen&_?TOHLc25?ezg&s`p81EnQ6*xm-FHqNtv)-mcM+~(>^MmXlwV*} z3SC}&jiAfV-GZRYixCLAyciKfm-i!pNIsX2VW#rAx`m;&JbhUrwLCqb9>i*S`jR5G zJbh_6AX3Y7h*I_4+4+Up-M%WZ>!JsMgW3f+s7m-AQ4ADc9gS}gy!q4%(JQV;!47&H z?4Yj^wV}t54thX3h$dt9F{FcEU_kO@^$m8idV-y-o?s`dC()DD6Lqo}KnZ$)Q;vcX^sTLNkAM>N3QqYrP=bhGHdwvZcWA0s-{H4e z-{m-#d(gdOT14NQ*m?ReYyH=cL#pken^5P z^`K(M=Q$wIT8H<=nydz-07!%QD@Jo+RIVWjY&HI`K*Z@m;f~L9LN5ut3aFoOM4W!Y z?g<>VtY<0fvS%sVDxux=$?6-pgXUzmem`T``u&V$>-RI3t>5!#wtlZ+)pXeS;1YsB z_2=C}9EZl~0Rt?43jqjN{1yTwIDQK`y)t9B(DE73IQgln{eqq>3VB!2cr`7}(TW8a zXbCyTArqBW?w-rr@M{E+qb~*wA8uBRqytR9E^0L5E^h3c_^j+%SPiA zS%U$qfMPdSvUov{5fpqfje9;nUS0V&yQ`ngSKlNouRE@d{d*aJO8{!G?w zY43*q-Ew(n+wrJYK@!^g(_Z!ky4wt%;C*Z8L2x?%^23*p&9BE|_i%M(I(Yi!5dn|J zi65)_yZh0P8dDsdnO3-pLaQ7Vg@T@6ZMdj|5s=;&<)30vK;l=?@N zWngLBIXS~8+YBOw(F);CO3*8j5|W=s^pEVQMT$O(g}_;66q-{-M-WBCh$63LZB_SX zK%2~5R6~qUbMnO1MmCP6>o$X~9b3RAtMuvphN-qVQ@19E)oD`DfS-bP|EwHVMDe4z ziA2Ffik?5H6pAW-bS)K1D}J;`vRf(OG{m{QPbIffnq-kp6JxIt7^OLmJxY`A2TC#b z1068;1068;10AC7hr`2;c=ueXlXCIV!T287fr}3=m(lnh8dvLcRXREv-$U(aebgIa zbmMxX^uhASq~{^1&wW-^l%T)YffI-#Z{1p_RhDNH#D zEfli8qWUIFLYz>A`E5xgRnDlS7iy;`>KRd@zAn9{mXMlBlLnj<>~i41sezcT+-TWQ zv4eS1PyELcxi@)$<}EY6OLN99%~`uNgJu*--lWiYCVUw$hr4tD)(E@w?A7_{vlo8` zf^xk}758_kgaMziOPmF6XndCrBl@sC@aP5Kngx6@uJaxQ*z#ZHi-~&gDQ-RvCFYnJ zO4Knkl!*6!C=svBP@yX5P^G*wLzVW*$UXrH-^`GVbC?TyNFyl>D3Zc}A}I_glEM&2 zQWzAHf=rK-SF`%B?bQp8m}2XU5vtu|2sy9a%7w+cn#$k5cnd9AWjV9_+r{&@Zl2qk zELwaa6YBIs%#+p}J8@9gtUc!!>Ly)(A$y>Ixc~TA|KjDF-=2McQ55R0h3wXK$7ORO zVO~E{&pUX|YFjuu#Q-o6TS7hoG^+t%AZACWXkDFR02m17#tmJiVt}9z+XfC{&j1FZ zceRSf&Dj`;aV2%GD~Xie7^W3r+eb+#!o)RGhSid(7TE#SjOoRggZ_|e(=|TVMuxZz zeg>6_l|rKMetiA4qbTifN5xpR@PA z)sZ8fSJ~&8iulq+=rnPb0n)cdSCG`ce^;zQJk#Y}cs$rd#FHeRC5JlzH=p=VT%6FA$ZPlMHIH>oet{`rdU_r?9kaaWY)0pb*Y;>C@4 z#uIjPeSLYqI>Vf1)@u{&Q9rQ|V{XU0%l*yHJV2aG^=|o_l`3Br#hHQ>xmn9!#rxzV ziyi+k-e3O2)hP3OHi{QWmztChS2s7etB{aRwDO5Q{Coc4n(yxS24lqd{|?<~YF8Yn z+yM|K;+awdgw^U0RPLZkwdAZEJPqd>QD_VH9#QFUQMiRcXTM1_L93x~?=9{6nuulb z^6arOBGeDQGS-7y{=dz|etQ4$^3!;~{t7$x4d-OgEJQKW51DMmjS771o4isZWwG&D)@7+Li+?&IIMPLU5OIQXA zJco%mn@AxCe}F(?Vx0g(=;~O#>%961Y;oZys zc4~QjG(I&>Jry42H0kWXrpaM;5a04TGOj}L()TaU-dvmuh2YfjhYkwi{D3o@)lO-5 zto!dI7>{w@tBh&q?Zz7$^mGr4yTl1cvx~FWFP~eUnKLLbqlbRR5B;2V=y~eU|ARaNAnd`IT9ijPO{yng;<|~o!{Q!Z zW@XP(#tRjW<&(uon88zws8NjmRcPCnJFf1P-7FM2X=Lrhy&(Vn%>g-E|18T%Rs+7! z7^z>YT77YW+>dwn%39k`SHkQFqPq@D2s&jfnL~-0T1qgK@kV0{SKD$mTNXH$NmP`v zq?z?u)3-0*T2*iCO;-!*dTXI6`Ut2IVa8Bn%tlmM z8*y}uW9&1wfo5z2&DsVqJYqqP(Lg|yJS0pIfuAhP4==EXzCnHn%9YaCD| zYaDWvtZ}pn7Ke(s8bOl$>X{~P16ZGBbs)%c?MTy+pm9vgGxc(vq{N#nw$*#K8?U`= z;t@JBb)H+ue-$J@9LF#|8D5;eyLk5E#kpV$ONt3>HBYOo;bH~TBtZ(M6Ch@OyeM_m z%d@lZ>@z81$BnieD5kZ{$vD->-3jW_bRgR5zWTPP%9;SNW)+)~k93J8hQNq4rh^)z zHFeTE)S5gMs%BR9%1n_WBm&G7l}BY-KL$18k!PHH1IZBgG>jUOA*N&T3^8la>Ebo( zozrt0VIzYHU_WTMBQDkTf55y z_gzm!5wU7{r63ot?qT%=OxDTd)YU=M#kfS$|4xig_uJz6tMC4Nar(|@5$BKaMg|-h z!xNb_l$@A+x$W%cPTuJL_3&AfFAlIbHtT@*;FjD3U6g{S{U4-R2lQynWJZvtzTkrvCi>p{7mJeDvxzpf9nyxb?NN<6Dpnc6AwyLNgd;$YPWs%_wS2Qj?xW zPwMto>JI2mj>(-=LyR>O#Jrm(Z(rz^>;AT72&F#DFt(k9A^7N3xD#)p+WH)V?c8|n zYENX@+EnTvWN-a&_Wi3D-@Q6}{vSr!oF?NEsJ)D8xOS(sOThmZ^4v_5b{GsUhz>UK zU;K~z>0uXjAx~3=F2jtb==d$0jo)%omQl3YaAFjxHk??}u{mYLO{O{R*i>UOjweqFMUI3(>eThozvO^pV$w-#0?)7vSWY7F@MrrU$Li z3$@0%o_nox&Yt^^kgz-Xx3cStp2Fo0FxX@c*YvO~{H}N+K5?BxBI~XsdA7)B|H!q% zG7Kzu9r++PQn!`KKd!HL;Ay5^ETKH8BMo7rmMo zA;{IlNYWp~2!4sOwnVQc)@B@cgZP%XnwZ9Xi^zD^mB(I9iF=848I$fPb}z9mJ!g&L zop~>XE+wYQqnf2Fb1o%=nqS!79qUc-RL5Hmq{m+tUn}B-~?3!Rpu+0tjt800E!B5dr2R0>( zju>+tfej60I@v(eci;d1ou$)cYFS1vxKaYAI8fQK;0n{g6{UATlW`{T@Ac{H=WqXf za{c7#^?Q|ium0EDMhNZ1Ndrk|(Hak?0yT@v49%7qRwIUP>Ok%cm<*c@WKZkzlb5~D z(p`s`>N-@?ZgPNT){lap_%*xzd23X7o+71iO8C0(-oO6t`Pu8Y8r60!?q4&UWsUyj z&Cbz(=8Ovt`V%FxTbPNx2!Y{ew^&h-j=ivq*b7@S?%KtaGP|*<*^8(&yo{+lP}H23 zFU860_fn&OT!4VFOsTWCq7^|*8ai>oGMD8Mf@KC%0uwB7lEfn9|M?o8fL3MCDw}I@ z*}K`W_YCcY8m9=X+PaWkVh3};-APMmr!^B?-1{=;d;0mF?@dSrg{5@2JV@7~`(vdQ4;pIZu1Jo(mCb!fIiDr3z1re{wTS`BZAr=A2sz#Vhjor@Z9oKZlcj#W_2P>Iu+ zVh7I&<^^6!d)Tkhvv;)L40XNDR9oBA9CE#}-c!>F1RiD@!b_g1=YwdsZWFH~?M#D^ z$%SXkNy0 zmBH)u?NzB;A78Ka z@ePQv%o2GiM17>1nc?oV84}H6Su3+?n;JKh<`sOp^78z;O`hL8n@ZosvxB@L28P7W zcUv$#E1M%y5I+N!bkOEZ3j~O^Bm@FC_gpY%T_$xnoHC~b!U_Z$k_b!2L0#-YwVdTk z1Z8SSO1SRhCshvvREAFHxIlfik(c;Pc$p(I@N#QjntJDGxpiU7noIjLrhhhW%A_5D zBIu5!wAWwhgaWU*0h}2Qc-3+L9fyd>5afb}dHMl}A70_Q2RFqik*WwU;Gvqu%Icw2 z*)V+scx`g)I@hZbnwI}B6e!@jf$BlG16~_p*&gA$3BQ6xUeTC^WTzp=UeUx>(S$^P z=oMQcH-SmV;v3+x<0Ruu5gXEuMmRX3$p{B042f{?Hd$NCGa?hbrKs11XVi)C&N`A} z5f0uZePq0&`4J9d_}KTOfbYCdsvO)4FSky3`TD(VfN-te2kh7zXpAUsJMYzk2IjRI zmmj6CXML#GR>7-%;-Iz%MUBCB;WUZu!YPLB!YPLB!YPLB!iOlf3m;Zf>y9&i`4d<0 zF8V_z*6tUh(1^Hl`>57_%31s`1}sB;mYyH@(;==3A8=e1KA^ZNd_Zwk_=w`F@DayV z;UkW#!bcoeg-=J}suYEXgAzeGaqjQQpsdXP{e6HXe6uWje*d-m%2f^Cf0A##T_5YJ z$My}l4$LP^2j&n>2$lgKl3~aHdM_CD=FUTXxfZMN=(F;f3ox;At9>h8KEqiO#F)?S z0g_6o^;W2(;i*#q)}44E)SZ;xmRVO}sPF~uzZpX?;85lsv;O$3m2eVlEwu2>lB;&x zTqx|UKlh#WoR?{5Jzvq>R#FhhSr60X^ay7?=k^MU`LiTp*8(foJIBFZh~HfcNqOgl zu<;4jc^Z|zUUd8qsI$;?_>V7IKbjmRl(#eW-_;XqB&p*d_QvI&x2LC&6SF9bB*8rk ziu%1kOd}Y44|+MI599p#p9CY@nc!N@qDow3*u(30*TDD2cFIAly}diI_^%%qug>25 zp?)nk=Hz7UVXR1K&6%abjoJm$u%ZV3QX5xB+%3JV)h*FD=u)Hh|5D@j|I(!F|D`b! zGf@Q;?rXO|a3SvKTnrv{9So++tO;N8G~qNuQ)_?tO<|HszR+3;Y$U<`!wbRu!wUo_ za&isiOf;sEiB{MLp&IkjV)alE!}22=77nosBM-9)b3EB zx^!4A@zSM;?axG~G^jiV8FyU6jzVAk;*p=%u;8Z3(xVQ$r8i|>+&#}8Y1cB6_;FUK z(VN@R?j7{AY&`?Vn% zA?hYn)InW&uzh$;R;!=lF|P%{oWnX*>hYk~$B(em>YHT_Ryi$Xqp^)%{kf+v+DGDo zV@~=wmU+7-A4J1=I-H%Hac-M)-5f;>#&(%Awo5DXm7DII&_=hQOxmyrd;FxouKE=GDes)=?Oe^p-8lF^EkIUR%z~($2}r1?!v(QD%eU zH3?!AVgQN}Nx&vS!mR;l$ji$L^}mWS1Ye3pl?q}ui21|Ky-!$sNg91zH`<%PyljSd4=H z2$4c6F+{0D6$$cqJ8Yb0y`R<;%xTI6tAgrnF^i1N1@k3AmOkqy=@GOlF~Xdy5YPfI z#|>5L%1`#nN2#(B0Wa1NV-VX?jKFZJ#E^^%Kwbg@a1=21GqxE(gG1;eX|jgI)u!8t zczzn=N(^9GLMSL7My)E6>a*m7wf?MkNiG?)X~Y-=AYF`5>{>Nbh_3CxwuhL0?jgp? zRe_zS40gtw?1(WLz&BzP!|GLenQXJe%Xwov)eQsfkRj0tF@mC!7NCX0%)hmw>PRhe zyf##>AypeHzRz%j#@K(RhxpZ*?0=B_;MhWP;W(%85>#F%^}$!Yc@lO&e2>5mh!JVs z9M8ZKW0JbL8j_&`ET(!tX36oYOjYlTua5&A*pzj;8&s9}gsT#?>CJ>mX@*qk30L`W z1A&@O@p}z4Fu6HF!qDE@eAbdLlrzk?C9Ws?M4T}z1MXG1vbl35SXGm>GYrCarTqz( zSucjLlr*cFtuz?}JIsMv-dfZK!)?I!W)ffcRJ6%0TzKvp3IPpV~FIIQcD*uQQ~n-6h+2NT;B@ z_>X2e1B{_5b-Nn2SM$Qc@w3~z%iaA_7~cMBUEIIT#qQ=_WTdTc$@NC%o$M zW$M-`;kbwRnxZF5+8pc2;(?Q8&^CER*IGYu!@DPI{U}b>x_(!;^Ur$ioOMdj8A)S8 z&WMu0j7kvf(xAvV>sy6*8_lz7-Ce@n9*2i^I;Rx15!@ugcmUY zbLWd8+MPcWFX?3_YtoBc<5L)#)WRxAxk}KVnGA|lEbQ7`Ir0($f-?N-h0=(qv#SDx zs#pVMF+>+R)vi7rm)!F7Bw%qT84>Y<4UcW;OtL$!%FL!#$T~zD-yvG@5+x4DTojeo z!=rVnVnl}GWeU5?(b;0M-D7)vLAXHYjs*Vz*lq|ej*A`JY|`LmM*S^zmSH;5*fCR^=fF{SbsHiG6Fe&3>U zvTl>E(BwU!>7cD8K@LBwSUny;+^xwenOqL8y))MtDH~5k{KYk=C9r~ft~-;*9k0Vu z8QlJ_OwkwHWPjU=ew{gTy{3$SYxQZUgbSXk&)VPs_H(jz5OfD!n?t6O$_ZZcQ#RlH z@$}h?({p%fk8=W4Z%2)b+6F8RY^Vyx7~vNRe)D?k113;^#%qdClH!xJJwW(&k`0VW zdM#p;H2-{Krm@CMJ)n+@deDvw+8-D*!dRd%EYERKL=rOP8c>gZ4Y;|{s|@t|ctWP{ zoR?*z?_@Uevy0cy&cP*IkGSSnk4E!z{P2zMhp#7H%g-0DZnSG*00NySMx<{E9DkPA z27gw})Vfz2@0M_4u{Sr<^?3J}RU$Y^tJ|-iXc_d#$_kcoj~JJK)Hukk7-PK6uFAfd0;vAc!c{Q_Y0JQCo+=6yUt4w!XIqLPRHx*&2PwHx zLYRN*sHHa#I6lLAr~wu#K{zlJ5`HFgL=2G`{UTq_#%{>xoj#%C&Ud(qlx5e$<<;~sY{m)-JKQ+CncQ^O4@$}Dy zyx0_yfbJ133n69onSPY>Ta}vPV5-O02EE=|IU zR-?2-SzK<8eM>htY0HoEB_$)Y&4juc8YrTUMra$P-JbJL`MG0m?j}QRZi{X?q(*Ke9CajH;z+2;pRTvwj#$1*l^Sf*zjyGV3UMv6<_0ed9&nt0gJRF zuvs!VVL=^%&60a&H=R~IcOb#_cA`6J3sD=AV%RCx1W9=W3GVJECGHU`M^B7;FEZ^Ns$(t*I%z5b-d%yWVkH;W+*xmgHWrYwf!Ai)-g#Xj3b<9+eO7&Nj>dVG_6>_R1d z#$5WW3pLz?$ag(~8cQ-#_la?!C%lD(LR*8N_=$!p0%9_tbbBRIL=``$#3fV!M8%~^ z=dVH?1v%N~*mNYNdT;%DKAR00TWi2h6HYxc;(Ruue3s!;C!?K=BTdSHDid&6`&*Tf zN>8Q?_JYdiDY#uJ_6qJ;v57%QEZaZ`f@C=M3B!wfi0R8vZ8`>Y1V$t^P{J}MGUE{j z_~$|ni(eYl;>k^rFE@eQu1_`T`(@ispnw4B=5C#hrzeW8F2KA9PUp}|b#*@@r zD0_}3skco|l6u>~35t~Cw@nIZBfVzv@8qYO%lT2UpJePq?N_iorOn7LYN1RZTAtF9 z6f%PNdd&-H%BFMtAnQk2o?_?t)aCZW9s5Dm1iz4?(G-cY$<7l6pXV*$C&hQL%_)Oz zP5(F{;rvk)M(877g%I_kM}GaT!q5a6NXJ#%gNqub+?6RdUv}*DJ9|8 z#25v=5rkjk?O^bl+uYj0B3y;o4q?1z@r6ND$u3Wfz9Nh|Egoi8kzD}1Zu(|_A3^vQ z?r|SNTC#N(gtR9GGi;I;Y?62tWoz<$B2|;p(wcWt2g{Zf0rc z$Q%RlLkZw)p1nnImO@fK`{T{0M*zJnC#0d5*%o@)G&kYxQfjJMm)DP@VnyExVz`G*!gEK zBs|Y|XBU5T=2oFDmaf8d$F54j7xPXxm)0D!wy3nF%r|$-)x-XyxLx5Cc9q?tNTjQ) z)mi5qb+NDH$5p_u&wT0_U5YeykTgG>zq~jN(5A-st;P(o4oZK6rEOiuHngEzLu@}O z0{OiN#3I%|L)MUKasJ~2f8fp{@VuVR7zfcVzhVeYN#3quO5ZMP=IYz!+KGBHn-Nj( z-u?0Wix+1<05C{L@F^3bHN1*B8eR`yQ&ht<7XZ?b=Rn~*R1qxSqIjyj!|+ta2!d&e zT}#tiV%M^?me_S@EV)zqend&^IvP-~I^_s)x!Hx{vs8y{iB9MFx6Vv!JyUbrc73Y9 zf%qEfZy-h>{SCwjq`!d>EV2Fu8=14-wdO<`;5NZ3i;y>$`(nP_v+-``^OwaBt2(mg z0Sexe*Dl|$C~B9x59>p2cFyVkQs2MQ&|W(zXt8E@6!6ctG51 zw{xjOO~-@Axpuvqxf_f^(`@eD3Rq?^g{QN7@j7@W&RW*9wU-W{!cm}sYaqZ7_t|xj zj1=`EbfXnCVX%i)Ndjzt1rm9(w>cTzXdFZ?3|XhsnAROy%axzPc+{8LLF2T3Gj9M! z>ZT+(M>mmtTu3=tbV@cW$aP|Pc?2EH@k4bC)g=sQY7iDu63`=UZApvg0dSlZz1|LUE!x~J^?IaF>P)r2BUkgjsQ;fJhLXOz>`CfM{5Edcxpjng$ z&w27w-%xegn&XRD>>?cV)TiZ=2Knh04CJRkaI}4W8*N9W9ukoqZOr={>PTX{BDjR`Z^Xom=h(h}a@?{T- zZv0N@!3`cw{OlnOCSqr8ATLk1+G`IU?!-KZc2HImb=23YDq(=(+RjyAi6bKJ6vMdU zp(psY*c0?x>@_fFBzeAXaUs;VS_lok5E@n?G;zMWG_|URg3JlTBPL}Xfif9T4dvDkv()7qmCBY)ZP%IXwr=qX=Tk| zESJ&MBE7u1UTK=W+vus?IOF?Og_M1>YzLXnX@(MQcO`zwbb@!d%cbJ#PnY-XV{xMC z3$fiERL*#updYoA5+Am;xh<&E{ivNTZ3w%b(}h^ZkWgwpXi7cgwkPH=m1Yivu5T29GN$V3F;+#P&!jnfN%-jPQf($vvIX}plvO$C_ z=>gF|lF`xtma`+NMoXM`DR`9W0q-^q3^LBiAlc;P-6@O^Fs2pGyA=G!OO>~Aw9c4wt>;`Hie3v$Olv*qIw*7$2&OaX&eE;MPaJLZi6e(|umHKV zF`{=lmT;z7E*~=q*JMmu=WGyh9UTa&%5JyL+bG+hq!@H*B`g=1I^tcdvP(_T+>4g%k&n77wr zqFx+sA2ymvWmOYOGssH~c@IUKU^JMuNf94|j5ZNpIcXTRlhCuC+srdMWXxLQFwy|# z3$2D0hM8FhGmlfV9x|9hqp8Tm;4Np0Nr0djO(J1Xt)grr-iW2dm?0=e5EKUxJ+7db z%ncpfzhT;((Z(K+DML_9Mo_c?K~ceFGZ{eZQji-$GLf1p}4l)yM6-;UNUW_L4~WkZ@NH5!QcRHO5eBmDFo9JZ+9A=|jol zk(cP5!dGW7;Y+vvz^63SgbvPTY$#o?D_~tyDhJ|9YE^^Kz!;U$*E!*i6-395Xfn2= z!MDRFuF>~Lo=IHub9Lxss);z!@4tKbhvz@Md0~NO%qe~M=EZm4|K30C=g7u{FfbDDg-r0E2Os`9`9j54ZWR5oJL=@&{n~T7_@ZzH zs#lOQ0Qh9IaWo%R@JV_I6Vp8U946=#yw4^C0q3MkrXvlV34?Wh7_8G_uyqDN^WON5 z!dm)LZVn3C=E!NWE}l-3E!M>V8+}Zm7Oct7(>UAb8i33>^Hl$`J>J^`d-3x1>Dg9m z(X}}Dm)HD80w^lwMX?FYh2k2@Kmq>PjTgK3?m#mR9fhoDr{b?KM$vkw%dldrFQ z_wwwk^?5@6$&x-DLRm9B-<-X9vL=HFO|7`TnYn3qSOlvq<+JRBGLHBF&bw%V-m__8{V-kRJ2VrLOrLuz`Io-%IJiNN||Xqv-B zRT{(OqiNPHTr?9y5*Y@T-U^nn73|opV0tU)a3t%Wy;(a|edTb!zX>Cg)l>4L*dHMY zoL!OQ$KB=q&jtI)*q-949>gEz~H0VoYd zar58Fq`|qEeqKpD-tl60vwI?mv7xfDmI{~J9JiJRj#*0sPg+Z3xe0*LkhOFmEG^^7 z1qCF)`syX)fJ5zYLX;YlFd<6QiAZCHO*fVVJ-=Z)>QKT(j-}mmkNd__TLArdw0U*h zyY-Iav;bhDxY!*lf{5L*!t%$)bOYzH&e*mZ-!`AxwV`&ML+w@QzI^-s_4ltXUOs>J z?&AGR*Ov0Wxwv>0`|8!%*<1g+XD?p7e|`G;yVLV`e|)+5?#21p+k-D1sd#z&Ud;4b z+tx-`f4pXoNC{%s${>rv5U|^bkg+kQdIo(7jV+AU_u0 z_!E8#Kfy({zjs8->5gSwnc9gZ=z0F^2loyYfBEB!^OtX)zXHmNGjo6Uv%D^^$G`Am z{~%=b{m1d%+>Z~}LcA+rS(PaM(|9GbaXcw5g}ktr-hBV+6;OrXLVP4Nb!CpN?~JWy zq?hIP${YzxUzwu=wv>Bij=IBh+4Y}sWlH(vRK_U2C}e53Frws@sdMWU!RIGRjZvEr zzB!$Xa|GC@1kIr@bnN0BI}?TswgVsg&BeJOZbqTFX{G}bcDPnKcIJYQ`oBhv2qnGC z=6Y$S@^>&UI5PI?C4oV_@G_3Y0|*4er>72UYp-Lgr-X76sl z-h6e>)K~YnU%U9d24Bha>3Anhk@xQ|&QG7cwoAiZ1tS!I478DBCZ+kgso$gN?a*wi z7V5TzF_05di7|h5N&+AwWK?GIwD5A{lY8P00+A4H3^JOKV?ap zak}EgoAHDA-)C1JWK)Na*Vf#fz}$_W&Z#nTVe(LbTZIi(#`j#jN+k*;G5`^oM@8Q(@|>O>u3M@?(`4;3$?l_BkDR4T&tT}T&tT} zT&tVf46SZzajkCZ(pN^mxiXexw7RKFYjsn1{B<#z_IouR#o1gJ`C8qSVKYuWrqxXl zKaD|N7D=^k0;?|GIclP)UN=D_kVIPqU$2`W-Z^>eFTFP>^}1>B^*T}=r`JsbqSsBs z@p|24(7meMY#tA{SqXdPcNTI&CX>B?{_5=A=?fqV+&l7&um9FmSAl!oV>Vd;M@&9Q@%QC=M2;^dnmw%u0jo)*ciG8(wFX zsgfR@;$Y&fvodAUgIgTjc|%P7@USfo?qG-k4ja7UVAn^(Y7>s4ZgH?D(%72uS*>`5 zZgH^HDPqOJOj#P~;^0t9ps#^{>C%zM^2JRx<>E!>zs5C?7v z)*x;Prt?gz#_=96mFhhP?`uouBSOV0rCEc!VwlYXJ*a3QITJm_br#qS%s|nll<~0l~Ws9a>9= z4)@eB00<@r)pt-*!%W3l6|5L%lRt&gnL!3S^mwf@>oqU*!Ai0e4f+gT0Epjs#W-}M~kJIu_<_n6PJ?sCzdpjp3H^}HW=`db!JM;`XCpiHo@Ti zR+B4aHixHm4$qh|WfS2kn}ZV!#e7WTEeL@YqFQnaT8ZI~-oBKLzer-Ctk{$>XVXI@ zStZO&7m;o_me5nic{6=L$RS9C&C+2kS<1&$!XC_FhDtETG7cQ5 zUllz6^G5q}iZJIIXXLrgDz~2v4DT46g!B`8lwg(;4bI4OlT~g%LywIxC0d`6E5hs~ zGI#=%;lRaf_0Sn07=rc0eAt{OYA2DQ49`{>4pdf`#vwi%Wq1hQOUvX>qOqtsvq=l% zbLMf%NY`cNaLrv!XWfT|97LVc34y-DeHMHytvi>}8Ot9IR zM8^3W00Jdo2Z9kc4@q@so_s~18bJ}5hYU_0KqiNf4L}l^KHMZ&^Ts#(S3CPRW^nRo zIGKcy4SJD+z5fiGSRFfM2zA4w?$WY{pV*d zUYxs$)qjxA{GW@LZ%szZmz(4hzm`E3nY?@_!(gY+FKkq4&Ok$(0Szr)O)@JihAEAN zJln#WNauh#U0B06)T+yH(D(~o;ahz1NctE7JoT1MPo7>bw@;q#-e2BI!WmEB461vA z5KvYVi_6Y{v*1Q|y*{$@VgeY^RLg0yxT1Yerd@;jC~D&Hp2TW)r;t@yVGIpucl_RYA&;RX#Z zo}bSRB7_hDAW9nF{lFbq<4E!CO9Utz584KnMR57S36$lzVbsQLbHP>F%Hj#q zW-CbfYH?65rwxfbYqES(_s}|uuLj3D%BJ$Hqn`M~2uh~bl;KuxPwJqw@!4HBWPkVO#jCR) zo?S%fE^*A++r@+Sy9vhG3F@RGTj^;5JfCuHUkC!gJrVI{) zCgyIRqTZudy15|FXfDXvksQVhhc!oYSRTDJfBE!c8T@4vhg^NwRhjvm=C3(}zvd(P z%i!Em{8IAi^`9@ET|Co>9pXBbO7#EroufCS6l4r0!86zm5bmPp1W!ZUah}0$%aQD6 z(4%R89QiH|$X6^kce1-_QGH3X$fyslL&gkbYHpCJD>p5&ch#AH)hGZTu}T`XM^D`?rcNt+G!>_woz_N)~d@Mtzy291Je=_>$bM7Ff#zq>}Rc%d0D~l~5xf)fM(|cP9&N zO#-n=q+cNEDnVgLx*EMidRL=c#vBjOGUAHeG99PbEmHsrAx=w4$gTP1!zpUu#LZ=? zb+{E>(Y_j2#tmN7_$+JbU~6P0XL6iShB~mhHgETr#Yr1+1ijxwrJ- zl7VMvuRKG0U2?S7C4=V6k=m=NWhY1a-L|-fAJVvnaxXkw!^>q&)%OtTUjFv1m@e-n z#=w3BtW>Z=YorkiLP|I_O#~S&#dcSWL9y(_7>Y+9#V7y|Ew`FlXU0_K3M7H}<5F%i z7D=@UW4R1n=^89uTu@0m0eRKSP(Bf3sBZdQ+VY~tD0|{-)BxDjw)=A|;i@xDs=Zkr z@S&i9R@R!V_|<2;Q_~rzjA=+@m%i>(^bCn#7(58v0<+i zoh*rgl_+>Qk3QX&J_=s0cMn&)JzT4eDQkyp7=rj=2r-5!2)eoRAn3%$6@u==0R-Jr zI?e2JO5Vf|0ssk7>2@Rp-K99_Ov)bsLHo$ZncqFR+_9?%Aplo|G{J&eqf5v!FRrOy z1$4rjHHk6C9~uj6E@f+a#cZXNMIIA_NK#C7n`(xZrNk6G6m>X=F)S&LI#lCC#8H?% zx&WBNu|fx)m9a{bZkR7xj1607*|7inP{d@K6wan#2uJ-MVhqFl9!qH;1mb=VF@~Ui z4>5>heh)Dwg&MGwgP%G?h9mGM#IMVg-$Q(VG-QDIje!i{|7Cs;xomv90X87w_Yfm8 zfF9z05Al1nvRjN{h~Hx=9dL7Z8pQW|6prIV{07B?6k}3Yp-Z_bwjk3{fD_{JEa~_V zFE|=1RQyKE#0tMMH{A120TNrqss|({>4b|`mOiDMbYwCg2P7sQV9<)f6}w`+85QvW$XVjdQhgVzOAg*46tlS3M36vRP{$w=cAqrgwPQBeqtU@85i+GNR+g`~|W zLB%c3m0(MSfHga2!-6`0#2Av)U~sz}HK@X~6+*$AaafNqW`2pA`Ty_?3cVL7%_>s} zmaPv}CJVI83ImzC_$}@R)a7qsH)P&)5_Utp%iw$?SF5c3IPPyA?r)Y!oMVZXA+*Z#(~IxV z-@N-ux_1?;N+1l0q2Ue=AZa`Tj12j7jgc{LF)~c4-cmINBcpaOGN`-2#z161;-Mgc zN2JCeWKsqQ2KiMPFF(c6Q#U%>R z1T3Y*tDyWp>JhIdYtn^)RmFf56qooKpN0v?#a1lL!1qR0ov@FiEI}|G`PNvMWdw%P z7m%)pjrcM^NMeYx;=&E`#MeqT_0#A!$dez7Z|q!M=`_cr)0~!0Gb){CR621~I`O!4 z;=Xj^_{HvwMPw5ExRY?vwZpdfe)g znL6H(NmVN_24@?EcH7ep&Xsay|9Ho*e|+F4GOAGOwwLBDT5I-I0QnXeK!E0s65tW3 zqDl$qxTgek3XfgC{V9x2Is|H^r26Y3p1F8C?k?HMuf0LP2H8@t0jo;7AbVRdMr6TQ z14G1`>Z%^8qZ$dxAyL$-q3>XrT9>ess4GBLU0|IA%u1~Ca<`W>mfNi2HXhQbtRtvy zRjYhInbhQge^+pJup*_UP8KPNud(VgF@%1;Zgu(sNYdl-9WamMs#Oj7dF9|Y&VvD| zlzj0uJ`G3fO)Yqv)GL076Vt$u#dCU{Q=y&I=&Ikvy~6j}(w&$UsNqdmIC5Sm;FW9UMpZhVBLU(Y10OV@MKOIFXA zm#pTPm#pTPm#pSdFImmC0x}Y3`q3^9k`icKtL}^7?6#u3SCj$m{3i@LrZz_48+MF3z9->Gj$9srmTs z^vw(T8IE^Tq54)+<9Ae3n>&j8=07C5HFffmYHEBQ4RT54Tq9x_JPzN8hGI8KqY7eT zH%UXvV{Vd=0B#6APeL&P+^9sLm;i28r8KD#H&Q9hy-7k>V$-5FX9I0MqE}+0;lW}H z=}<$Z>F7~6Nu%3z9NZ+0g8GWxBu!6{o22O}a+5Tx(=~OIG*W{M-y{ts+nXfIF*9fT zW}4NXo4!XHN|Ae{p$xf4nxRDQk!B$2djvr!lBNti3g^=S_lP!14MjrR4HRg^Lfg#< z`g6z+)3CrMOP59InA!){$`8*%SLle#;3?xSm<+nsrZIz)PuL`j*2UNOOjw@Df?2a! zfrEzOGMG_ZxnRr~w|?LNxM3}@NNN|!juzr;oOhw2#Sz*?mMXz<4GbzL66^!X9&8gy z0FlR&!INge=dmEcll)LZv)~jr<=}BOg6MMah#Emk@{g(!1o!w7Q?C$LBS@9JeMyDh zzNE^#eWPjw!8KM=qn0(Pla@89Q4b-hj|)AMCKB8sO)|Jc8Z5X&8Z5X&2o~HSBpTcy z3aWm`Kgs(gsy`gYKBP9Ge|4ZntWIC6NDyLzJkwT@sA0>9vCN4ZCLRvjl8UqIii&q2W-43O^l&fQJNUT(4w@3 z01$3s)~4}XCHUW+b?MI9B!?#wzlli>Pb7X5TH=Y{WOcSust=->@x-^t+a$Tm+Luy?E%~%&`tRPI_OQk}iJ*D8+uva6UQYF2b$8+rS1bAMAzDtxLA zmbey*wdUacvsbUqo{MYZ@_+Cf*#}qL7mpro(}l^TB6AY@8PqTGxN2bble%UHTDu}$ zek{J(-HMMl1|3(7P1cU9A^1(jbopOPL&|-p%Kuz?un0Y*a7r|FbxG*sXQn zkKUcVfA;+O>07Tnfbfjv07g>`Qcw&rX;6!2&455zR2Ed{7&9ADx}XQ7E$uvPej>~R z=mB7vKn@QsQ}#_m*W3c25_OvsyKtFe3_j%wEK{et9iFl=u$&odi_6))ckkbv{r<)I z>F;3~RmL(ZV?f1?thR#dp!J(4ngMmvi`~{JC%3gVh*Ngv?VXfk4jI-zz=CU>S6grl z*AB0`2d~9_y=_C`A(qh&&fRMKd2+%5Q4kNwm@Rac9y~5{k5-HOd|OD|9b7IuI2bOH zo-E;dcrVe-q|JE8*-!ghA--YutAbr}K>>%3PnxdIqw?@CkL(L^?lM|^tR=D-VVqztrf22dGP+VT&SDycD4I6cj%YxqRj%iT z^Ys~$zwZ7IE8)TI9BN*%w481<)3H3zOlzyE%jA)t?ypDZ?W?dE%VBg)KXIU|wssHn zgj-4NWXgrckQUvlMjOsthi#tX9h2hc3z+45rOQ52o~I)G58h7oN;c5SRp&{jiJ?29 ztby2$fGQt{N0+1)Yx$MTu=KYTWUv8WyKG50QZLSM^J(X(Ve2P&`;0pT z+S#J4J6d#Adj|-2a<|6GEuLf5=*kghUj3EpUu z0gGZ%OLrkps@p4);!)3So!)M#1~ajn11i?~p%Tw-paLr&V`x)ld6J z$M4>$z(BINq9X)zs&|B9PW6r?6TQ|Ut<6Jsnub$v2+=r1)-~Vxu6bK$p|2rejTXKA zI%Pd9?on$tlLYI*HEnD~hLXlVsv?I1euSItooU)!1{(%9?MzSSlpnq`&U#fv;P{y<7?F(XcRfB4V;6{txc7DlVfe?=wLyM_oa7ES96Dn- zRLt4u%G1F+JZ-u&Y10*Rd7-M^**Y^^K?h-)13pcaiL$s;Xtq;e$P@zn0qo(C)1&6s zhrfc^ugVh$)6vL$7n`x0sn4y0RTBgA&Eegi6B=8)rwIzoszz-Zo(%r8UEqK zWz#CerU!IYPr%QD$#AJ=k4areQRmnMF(x&MDb?(8NEc>OpGO%!OQqE(dDJNN;TZrY z%@K{bo749-nvdNf($=XrqVll?VhU2A=eM!?Mv7FaN4d_c$uJ@HS0fUe|5|;Vo>#rXbzJ%5B zw;zk&tuNLG>MQ31Tv9za^5XzieFZ2{A-6`a^lHsWSL^u6Cj=@h94O zI6lUnvgT7ySk!z{16qSSNL-fSoA)gCJ^Bc0!Jr?4tHZsMEgpl-I_A779LZ+!I$HPD zX5KXoZlvDykQ?Qfn9kpK87CZc{!p*$r5`pY-1vO{<`UN`my#aab$7TkzVAy^8}9K4 zLf_M)v|*wBJ$VB2#A_vcnqj2$2HjES*lv2bZkAJSHe8e?SV=rSDJNDhX0OtV)9-Z^UC-nhlFJ;NQ|J=38JOW5`JZ+3`f>@>^R=?oWq588U{7{h9{f@c>z zXH0W8uo9EMV8?@E0L8$9`>5G9eSS3q3tG))_!G@1KV=_4JvM#*D8Y-RX^Rz0Q^-4yp1&3= zmZt47#nSft>B=48&JO3!4lmT99pst$#}D#pX_qY2p*=p29z{933mm^5Ki4K5r2|%JN(bx$qytuIO2_C0NY~)RwC7iA3>G_kFwi}C zYpzYPpWKr-nwyVrPoA9=#g5g;uwylq$g!Hlv6?g-vOHGby?=KKDb^JC7t_fcmEMIy z_Ocr2WH_?klueoeEa|qUc&0an8pYnp88ov1E@Uw-oYP!5V^L8$Q$)$4b2KVS*DM}! zXfE$j{*r?*-r^-L)j7eWI!D=$qwKdF&wf8VdkM(Ibip@%$>2YzQj8!t4#}3a;%jso zLz&{gLX}OrF4gK81MxoKIoLy$tfw4wzC=H^#I2_srN0a&@$``TD*%a4{sC7a z2T&q=H|5tO|DbXwqQE0VO_0*yA&syx;0PN7BvPm3!w^#vhqRJ7pi1I^Dv1NCBo1*U z(Z6yR#)bfL31y)&Ti zKk#%8;OUIIRfY~1K!eg25x|7Oq$-F-Z`u{Xh-5bCFqW1JBqIAZk3uLXoZY{dcZloU z7*?>3QkK7&!?8Z|NmJJ*KmK1Ym!0eswYI@|{p{`g(?6XG^Vd8%TvcvgXC>SU`%$g$ za+1zI-0HWPVKf(A=3m_&0`{9)VPdRln)2oU$^|(WH44ZPkbjQ$Gf;fA)DR=y{k*^D*Zbntr5N&uJI;5-A1|-2_Qgxtoa65D{^#QS;_ThyV#oO`8>QUd z-7vo2>qnWrxZK@7+!y>O@pG|FS2s6**%w#xk-MAXX2)gEg|%m*>N>W?jE^y(y}b&CY$m%0zO=&DG5BitpaN5R&lcD_$_!)$xfKEsFpJ6T0sa^E6Y^lL!kG zd8Iy5#Jb!Y(fWVx3;B1|Fl`Sc)yEj!Prz152%VAU2pz~NiJ`O%I;SKOs~wmxbo#B( zL3d`Q%u3wbo4fl$kG;EjxWC*v$)dxAAIB*P9Xd?ML5G6OkZis=9CBKqHn0f(!N8Kf z+ks*D2Lr?K4~7}TKN#jH{=uMfneOV~3fMV~3fM zV~3iNW1li3weI}FP#p|i8{gn%RBvirI&;C;^`uVHx{(N!z zuJ~h^z*u-H%h;od*JE#tg~|z&JAn!H z`s?X>{Hu8V>z8ljI=?9D$Awy=Wps*avZICo-vF=F&XHC&)-3CHRm0M&`v-&WQ*{k( zVc?qBwt6gWzL*uR193Q3CKW<*->6!W4)U+08mEl2Jz@Uoal-u5Rm#c^UN1>S5En{eKY-DS2tPzuUf@AAPNzL_&TPd){$f0)^WkSt>c1uTgN5pZ5@|&AIIBU zj`#V~!@^geSB+m>yN6_9sKGRqC1x;9C0gM&m1u?ARGM2d*d1scQk9@eJGbN^vYcLP zvHRM=F}U`W`zZqoW-=M%RnQeWtpLHA_CnTEoBgV!u+pMW-&}}0`}z6Hi}&v&FzVSG z_oz==x2Jq?V=3}u@y+GkkMCcP`@cMeMV##1Bm77fEw30|#+f|T=xsOw*m&m*somU! z$w@?ypmR-lJY;Ihl-V|Q%p;%CfWfKr>Eq=UFHUw(o?gEn*}Z)%36$VY#NQ0!r6NnJ zndboI8;Y;MIIi4gtDXmJa=J*y60Ktk!C`79Lh%W#b8KWU;Xo3!Sfxjo#@fd2v}95u zJkcbn`vg|XI6SB$K?1vp>Qjp^u%#$7I+!#$6!w;a=ju!yejHTzB}(GfXT8>T$z88s zc5{6zTSuQrX?*>-*xAFcECX+P-DY}yiMkJ_o`C3d)CKR*_d1t`x1P-^KFYb9DXNK| z{-=;tQGwMPfwlMoYtaJh``xt`SxQKT%-@OnTuE6#bZQxUaDV>--zBf`iDFmyG+bJG9cMRp`XUcp-RkS`1s=NDu1n`0pN5Qke8lhZ5x>Vr{2m|idwe?b z9>4bP@zTG@r;LkS`|QOgg>E9&9&D80Nmd?nofpc5FENt%x`WcKSlrz5yHVi^LX2UW zj=S-%!#BQp8s1=NVz`83_=S(#2NT!_eel9x$^e-i_oJ5L*V}t?4qo`21fJ$x`;u8{=r&s49kh*cRo+w`7;fW#@zhB{X)(0i{kCW{Tk(5F7NjGu<5wx znqK&&8TaO91&+Dg7lNIyFYot-d{uG9cOULQ7U~6iGy1ps)?49T)s<)c$J2syD}c+p zNOf*)&;*$Ai4za$STP(iR;rMA9IBW>N>+5T3{tX6#|E`<3#+`cgV7VjDszH@T|-$N z;(5pJFzhB-A1r%@_e^4y@z}+yDVa^fa^d1Un${uBku{-nKj?GsrdEKM^XFgV`%q`h zzc%xa^lD!PM!8jDnNv+0<2Kfy5|%Yd30pXCcD*tz0}_)F!!*$rfrm<{b0`_Hs4$Ke zx_Ji*%E$=Av{2TT|0FGx>2^w)S}1F2KnrDEh%p(7=%TDW3``kalyylLD(kQma|U6A zm@djXEXADl(G+vmJCZ~E^v(^$JAcMCQ2C7U_6Fav(6oSW0mu2SyF6hmjoA7-P7NZd|@5Q4RL7@kbQ~ zNNUArU3*(A*!7|~`9e_CviM-i_J|)afbXs18z}QnDXZ`VnyZPfkPS*eel65-t6aI( zHiPb>qgS)-Nr^G3JEcs~{=uf-(Gee>Oe&AE zy_rhwOr`QjOU+ywcP^DjTWTiLIFs>NVNI-|GSu((b*wzh=K(+c3QvZ40;_QZ)<8i84EC>3{;Wco&(53iTX`PMtsHY`%{X@BY_J=n{;YXq zh(BwdaAj(qtoJSE(86NSGpM<#_Za_NR6(5`&vpQvP7OglLo>8znnE76c{xCe^pF=CB zi2HK&HE(T2j+Yhl5)HxglBLRXcopFIF%XGy{i?h|g*LBHw<@m?x2lR5+Tpl|fdbngpZ8&_*I;LmI0ezH?+52k2bt(K*>ZYEEAmr%6iOw$_bW<&Pg;!bxSlCRNmR|?C5>aZMt*3ro1iDkUnn- z7SiWX;~Wj?^Oj*DecmNgSk(|y4nlF2Or}#dg-*ZNx|BZihU9 z)7DT2akwguF0>@?(VLb7SbI#};?VGkgzh;`w=;ASuV9WwHoliFCQckN(W9Xhu8Wt4 zNpP%VLQhhmQ4f3yLkX%Ah=1&6cYnEifRX=Da=8+!kO_%y>V@RPPzP@;W{+}^ViwoAD< zSjvDeWlS#R2(m$8ZaHoj3`Z9FPtE_71uGYkJwhYC+zDT99%&~yiwFBVz!7VyNqxqjvuIR%*0Z@(yBE;2{uZmrk9ySceuqb6(J{6}7_PR+|*@ml`R zo5%8RJ6O*b#eaX;-wR21`?DQHPF^$L{zw->ICL z)lgY~e|sZ{#_wdWCH4DHyto#xaem5f?(Sq(*!rVue!c%6U)pbf>mGh#8Vb%26!^dX zPL_W?65kq{K@w8j-Oai7c{agP&}G^li>fQ(*5DM?&pD(@MG*q{Vqs_F2myT2XS^;q z2m!VSH(yK=-+a_!;NOWdc~uvAqZ&LazJcfC@q-17uvnyU!IOrT67%IOWy+TW|13Kd zPqaP1a^w^B%{1=$qeA{a^VkY!nFVaF*0s4@chypv()M`w&81qU5pli5?dlpNFr+T= z$4Gmru1dF$GFkfY4d42l&`P)C+jr)z^PkqnGzdg2``Zc^B&v;#+A8)k8YRO0~T1bhpDj|s5aUrPt zW+BEO-MHKA&9+6A_NB#?_C-}2Y#M{wnMzZrKDdN|kJdl|-Ij$n@bzjWm$aMQn^k@k z8acmaw?Dh$$jgwld)uK>cj=6~Jmybca06#S4Vv$7cxQIq8&K zR5H9v{=u)$a*|8IGri0iXKO}l`4`hIHtd;J^9v;gFU!GA>9j$19qUEJx4z)%^b5xq zz>&=0LWOMXYwmG$XrF*zb#Eha}q zs>L>i`&hlVMhr+mAgm8WAP^dP9Fq_Tazq+`p+S zapZ_}*inv%gdKh6!L9^3C>(*5J7dc0e!u0W}+nykgO^iDj57_$7OzQ~#upM@Wjc7xIKLHJHBW~Tye z4#i7r_oaO}%&Nnol82(g8p+DtLsIJGkk5$U%b)4^eNAx|Ekdz-#q=i+I|*vd z=SOR}1fGsBt-(~23fj%a62;{hjd)iz2hR3JUg^$qW*TIESj>}e3veyUC*w;X>3EME zVKyh$r&Ny7u2d%g;d+(i2z)ASnd3KvAkc68wPH{_atIPKkV6>0*e>ltlOyoCbapOI z7sYMz0BFqHo$c_8w(6~GI^))TBp33T;>z$>;WYNbX25Y5ZXwXQ3yfbXvIPJ@{?8I;{VwDD+ ziRxYz%aB5IsTyLi!PHu=N{hZW%Ei4lh*vFTJeM*W97-TuPnq^&Fz4*mrTfgvpn(0& z=h!X7f})<_0r0O!85UQ*D^R|p49ihbhSs2pF$*fnf(*N$9+qmM*$nHXa%3`WU6v@r z)@9Q0%3+-v>)k4cB$DmL*OjNhb>Oe5v4na#1Y?4_(olDN3BA0UJsz(QDom}vzs7an z8Zzwzcv0eO;+mjPa^W1PgNTrPCRX7r$C$e=Qf(oJ;2|LgY{#`KYOEGj4l#OfBqk+? z7!4>=t|EsVmLEx~dHgXjtWd?9JHfA{n&6WsG)=vvgRdsJ2!qDKS8K$|0|#HN)ZUnb zuWl*g;Hx1!KIY)76^eYq!BuGiP6}Q)ui?N~=T+Gc^)9eV7Dnpg;mBRhx+Ifb#!6x?x z^R$v$ceEXa9Ch9^u42_Z6XZF?E-@)^jdEmuG-O<3sup&QZ)p$&S2wCB;_#$YkF1YC z$h-N!+t9`1;>ntrws!HF*W6l}8>@if_QlPbsH--KeH<@$1_V*g0oQx#!OCDOXgpVF zJ!ULd!O3h44!vR+LsRjeTIurP%r8kX#Xh4n)JaxU!%H zZqzMYJFqZ8?c{cSz3cz18S4LZBC6Mur_#VPGG@>4*|T(Rju-(cFu^!hy=>Ul!IX8c zJ8%7S#@y%JTnD+mGJ|wy3H7UQ%SVsar1f*vwqQLBdzB~tar}uFV^OX$#h#3r1wy3J z)qysoc2~UnYyG}!em(KK;`WaJbb0fzciwyZ6V{DHp|U}>?CH2EAIII-qNeVZJ7panP7TD(`>k!fi=_M)=Yz1GfidBZh&5q z*Na0{r2Yv?jdy&-K;`mSL6L|gusnvFuwMg~P&CZYq%}ka>ubq33hUVXgQwUOpNRe5=z`>dEzGswne23-pYH>wZ=Ac9{4Z|A>D3;< zhyCU5gHbyi=4^1$-hho2bF4IIj=UH{O2lu{kc_zyn)I6_EvDvZi>ZlOOikKiYEX-* zK`o{RwV0Z?#nf1f$%Rx$jHWoex??6aU?#so zDUOkDGafQ5o(53-QH$p~q_Z{@SG*gFz&FStIq(g3G=7H;T98&@K{_*^d)#KS8;{Z^ zmfH-dcF+vgXX6+w-iI3AjuH-?^WMp)5;hDH82)MW!?)oy0RIm#Yee z5_{b2Zg)2&YZBkje(~J3fqDRPa(w2`DtBq;Nm0XT>(wom zkPhEs1;Lr$x$68SqQ3YZD@bk)%FQ76CM!q|gVbHds>-^{iV7d^Tr~izSXE-DA0LJF zq+Im?Ygq+ONQoj+kk}d}opA!k14dPH)Nr+EB5&K(@$g^S-_D|y_$lH)DwiSjnLa*j zu}_gR!-rlult zH4;_F?D)c3*2-Ph%2}2UjIfHh%Swt8)+O6}Ev-wT2`#Kkb?us6mntXltP8Y{)drYK ztMP)3@g3!`ac=CXVoC$a1?Iew79wYENLkY5z>1Fl6$_5s04)`_B4X-{ArCPN%_Mn( ziJ6u_%p%u^Zdg+>UQ@BmDFqFyd=>QMLJl5V8iptxf?6lOG%1MXBteNyP%=l*gcDRq z*jb9|LIMv(O)Wv5;88-c9f(@_s9xnD>TIf83$K=`UVR4D+0XD)Vu)VYM7ISfStfd8 z6TO)uddi8;FR@vglOUR#G6Uka>@L7C%WEIaYeVzGrn$ZDdYR^RAkF!mA-X23i~0$_ zxnae!rXXf=gPa#5=z^{)r^@vS&LPIdr*`Nd zJzVTzcl>mwFjLw!*Iu5fjA~(hH2faqx1iQ~PK_=jv*3*Yd&(b1w~rg0bu1l^<}8js zGc#`Cmatb|V%0cr4S&)pr8Z~8;?ExZu(>ugSX*0<&tm)W#&0=+VmbGC_3y+mzOzDj zv`(gCHUuH(T07|SPg0Q@`b-8(<`!UOsvke7v@7FvduV=S(czIZ#z(;do8M`!5KW^t z+vC0P!}Z%e`@r^tA1f(^)08pz0JVXL3fe|F2elYKrH5n!~ znWV~MLe zNBks+|GeLdcX1VaD}>5{Hk+r>_q#0yZ_>z;e5MkciLC?-R79odqPx4pnz7x<>6zdM zZe2ZY#6m>GhoNV{d$}^Ok9zT4`A#t}^^NFoY>pD>X$quC)RNv^UEJPXU);R?{`%F$ ziT>sC^}r-dX{h$LVGWgObGgs3vqAhCeLZ@E+aK>lTOiM+MR}*Gb)wa8ZA(}&+PpXA z_YK~##Mv;EF6`EhaK8D?^XNQz1NmKfA9O?Yz~{^bZ###>00l0SMJ7e;%rmi0zjM6h zY`G-(`Z*E>>M=n#Z{Y)Q5<_%JLflQ1Bow)=8zputV)YMlxsm*VpVe3Iq;dZ|N}j=M z=?sjj`Z$s6YhqFW8ha|&mz8>bAOg*4iB7&iF9QZHg!$YhsdyBszIngXkAq<*f*ThZq$l&8e^{-GSaVDUoaFK5zdlRA6 z7;U4-ydJzF^Lp@#%p_$_G}4wQ(Z0;-@OqO=kXV8`cNml|FsNqfv9r!*+wZSJBx8~1 z%aXCkb-`tCI}&@b#))^B8|D{ev1|T%fjP)uUsDt&axl@Ihkx8Ur@D3XyKQGdQG_@P ziek}OP*l!KD@&AUQ%iUWlut=I4Q5QOq6ly*6{W|DD#`_%O7ZdF=|hfochzN}6%~zK z21OO(GAOD=>$RvIver{%mA(Q^*JOdN6$zkg<@XvC#7BFwOnYKzUpln6NJBo4_JiY~ zs6!kFMZHY=xnpFJUU&>N<4U)YqlDboZ}UddFg>?&af zOI}3E`UOTUhER&u7eXmoUkIh3z7R@5XG19C>vArJuliGBHDQRaD1BiFo=C-Eh=df> zMDt5G5|YEdQWMRuQ5+=0(fpz_(R_lUAX#b+G0}YD#6U9Okj_N&Ya9VdEv>RMNzVkw zKeE(~SbQl2{+C=l;i!bPd93!5!e4`a7kD^!%%Wf>`?IrS7C6ONes}ZuAU44Ldal1t zov)Y3yCgdrDuYabOljNf>nPJdK6wJ`XUicJJ;+r5cSxftCHxs;lgaA)!^f3~x~bW~ z1N)^DrHA+c#>E)252FGdpu>x`g@!sevQHI!hXS;P|mbaNz4VQSj~2FHGZ_P z(x8Pctp*z65!>~EpHsxX)j$n@W39#lqmc4eaEsc1`P0`5J8QK$e_{N^>XSkEmW5%B znMwdPh)($ZN;($4{X7bZ87c74PxO?U{l5A1U*Z$4?Fr@uZ+WRggo|bAW$E?UlqK;v zWJ?v-6LF+gq$sV|Bk@{!HwZv==isnPmDN|_G^fHnf7PPXw^X%CSzN`I52A{Zco(TD zFdiZ$Qwq7%KHc4m7yN7AyuK6B{;8c4b{d?V06c-xhsw)`0G`0?#%Y6NVdH9Fl&myH z!u-Z5=-q{`OkzyFxN(g}h-(vT<62QAv{JgA3D*OMneRS4(JXA+mKmt?5m2;W8J zze14sV0gt4>YJdi^`DeFAlm0Z07@u3n%!1abu`_ln1Af+$tQ-$P3I$0EJ}Kf z4wvyYge%6SAIz)lyd-5_Ph{x>(-lL2qMcGh*GKcF48~C9t)%g!H@_d#B(>25v?f?KzAwHgJJ#V5_RPN{kJh<4nNP8e(kV+|2_lVaReuyBcF`U~1(64w4C_ z@Jq8_7`k?LUekTD?9?hXX6{02-a({mym@=|ZF=)oO1;zJ>;5$ADm76q>NuIshvla} z1*6KAq@J3lHeuyHNANv=c}bNKuMJye#=e`ZmZ}PyNdc)rD$M18Gfr}R4_2kAKbs^= zRgK6pW!aRL{RTYxyQJDY%|DQbye25iU-lKZ7M<^BY?^9btmbb=N zn=`dF#B5Fa&uz_55^GSFS{{!L7kQ%Bms|j3p;Wbhe@tt@gyoqS(#riw(gbf%twm$z zZctjl_80>pjT1iR=k4C@PsPWmvYl3R>UA#xG$>!(#5Q*+)l8exVfH0JqILB?I8oP;N39;py?NP6k zes8K&m|o=xu1c#g zoMpv)P=poJ>PSMSk^)FhN0iLLtzR+!Bn?_xf-yI3O7wod=!ti!z4Da`6jdX4AY*BM z8Sw9f|ASo@*X9@e(!9KR_4exO;??cNYl&d5-$nee!X)-zoFoppI7tkaFL9*zuV7x1 zm^*e7YMJC?^)Pd@y9NM*KzzSK?e^Ov7gD>ul1^W|yS@_yyT163?=P=8&7MDxExP&P zh)Lpuog|5&hb5{k!lrQuVbdHQWRJ>!HDdtOz+|>d2z8y84a(ci#no%6y`2ur^d3I~ z2*nF*sG=1(bS0-)`H7X8)sV6EZShxZ(2h_PdwYe;Rnd^o!uqT*BBYOk#`oOE|ET;*g9FYz5Xb zDgAp?1)RSs==@dY3UnLDmN^VrK0jo9en{x~A!XM1%ARzi1ob4TVU$_#L}#*Jx!%9L{r=7CKgixxu$0EX+Qz@y&!O*t-7v9y7_`^~ z!n6A2lhZC*t;C0EH+6DoJdy74`8N+-Jlw(@E*`&?Mj-0cI2RA(oe{bi;w7p_`>(us zG&r@BzF`uiA+3;a#PF4+0MjopiY^6F2#Y;I6vA>(5QRu^hovA25jNFy5QT`q(rRpp;m+GOX(cRrUq1su`mb$2k#SjHLA#y<6SPZ!MNS|vORyY=eQ5lGeRmBJ#Mu4zd zbcSG6>BM3n=u^iA5M@3VQ^)yYEJlryF&!(xrgWmPwZe7iaoS2{rL8zS!vCwlT(|tE zXE=|L|IUSn*s=2${AZ0iDE|5z_2*|06sf(v&czsCzDB*={zVNjiXH}ouWN@H0Ss_d zF|bo>=>^X{Jt)@W%i*lYrH}gcAOA2fgDkSy5N(~Bjsdf6JnGaBzFMcgl!)4NK}WX& zxD*7cl)L`IauPQvbKY*3x;V^& zRGa5oD#QAUrOQkYp-Y^jX5`O1t4njz=5e~Vzy&Zrf4|BaSx$2RQ%l@c`MJxRsa98h z?vj9_>i&aonVDO~?N*vpy&T8#aH3Fc&82%Hs0*rD4OZ6DyG;(lOb2x_M5V7VCN&J9 zeC_{jpZ>Z_s5V?Q+i0K$Shxryh`GJDao>S}UCikdy zbwfOAT`g>uMYXOLX2`T!SGT&DbWrLR;2wv8uAV1YWzfcI+1+xvIdTnkGIPz5Yp9c% zYmQt~lR7ik9J!`L=ab3i$YMzCxOjpC^lv8 z$)s#2vMEh1%xwFhMps&JlX|T0G%UABI&FMutcg|hBud=v9bS`9SVB!p@bk$M z*2sA4+&_u;Lp4!T`FE-E?h=Xp>;TBi^G_kZy(Yfus-`yA#vFKXQ=609VRhS{YwagW z?IlX%WnH1i3P2NkIY?t^5Ek-0ys$X5Lp?_0M@MeF@sqMRBijfM7VyWx1l5vlJ=L1+DUA=pK@rUofm4EM!`(}5dT32ZY*v2XWM!@;@P`yhSA*GvUKF z^PQR2IKC6Up)zLso;{Az9a?Z?PaP(mdmrfbgzrA`Y!SAd4cgqCSyGVxLGPxlbet z{dYzribNnmj@4lhinmOF_zRp|b6W^G80j8sTk-c^sAnBJ(EVz6l}n zD5u+}v#8x}*Q`-3i{Nzua+6TM+^l1t-QCu?&+cw(;!OKz{fzW|9r7t?!MQ=ecf!M*dEG7ndS&682GQ7PiVoMQEieL@FS~u`kR+;ZicPVNJ<6rq^25*5oCD3=ml+iUqVmY zn}nXk5mun4^s@;){99^K??DV-y}iBoD!RSr!dF)Z?VA13G@9M+SMOJwW-S!2zy9^F zC#PIP-O%G|%m21Iej22)5VA_>@<*RMZVs#W8=>;f$y^%8UYSed+^4J3n0Rzm3flgh zu1b^Gr>oK=_v@;o^D}(gn}bLbpQNFwH}FYQBWbD$5M7$*u=lp0(Y)-6?q~2=;*)VS z^-64-`6M>Yd=i^xK8Z~;FCFuE0uhSl)FO^P>!1VveNsgn>vL3S=Ajm?Mg7aGKfio) z$<3R$ul{s#J3LQH`&PSCjI@`&6e}1_^Tkv`TKG~4Y2lMRwD6@8(qdlnlsZVs?cBpb z$R5+?$^6Ykm-!!Lboscma|rq0SG#+eM0i}C;ZIDzzT@gn{D`GYX{1cyN|`)|F-FQX zNXq2a%1a|hNICoS5^Cuk8ZIDk=ETXTzD445D(jxrRD9 zUq-J)f$PWB@t*Je^XGBY^ha(v@LPEMz#?v4H0^qIxaYUfacjQ9^&QGY1LyOLo74fdX-V0!T4R+HqeqA3lC63}!-)=+~0(P)hBlW(Y z_|}V^=a0}SH$RDlo0AdyoE{<9ib8VD0xQ(SCxmOSGn6()PUA{xDsWCQy%12$>b?Z{Nc!EpF5rFyP?$3jL>)(NN+Ee+116~7jnPy7?E zF?39Vp>Unve0}@4S3*zwou5YHiHGf3B$`%A&0l^jkyFHPs|^>bE1}}62k7^x@9}r( z_Z(!?BW^pG7w88*9>&6Smdp5RKFsbf1ZAi{eTjmVn4lrnSpq9@9ut!?-I^k6$93MF zdzJuC9;A$FdANek6pJTJtR0wu`B&I`SJ-<_nDU{~?dAj9AGlp7E*y1bdeZu8}FkTe#I$stVtH4FToO zc~rVoBiE$$RJ*8-I+80X=kZ8aqEUo&yPj$ekkB*mCgP_Slu9h@UKUbw-(~((pH7>V zagqZh#c;xjyYiGSd_^&8)>mGNzMxZ%9gO@2#<1|iMWzpR$RO7fX7D<<@ zl@W@;JkG1!Dmm$LlPf=$bByod&!b_VVVx>_Yw_i( zgn_?2$9q%dF@|60iU58o0{Ep2;uoEdwQ$-?KUGT#3$v&ilQC7leS7=%?)CNCcR;yH zmp-Qjw)v9+_Eq+}7ulf|76VzDrnv1=S4}Dr&_|nFGjq4B!0#A@w=jBy{>8WaZu9eT zX!15B86UR#uiBd-;q(sTZ{q&{N^37)s;=J;(MfmQKJW>go<93hUnTI7vEm1EP;E9_ z4Nx*%TGc58-?ZkJ2W~aae>JVfA6{7Vi-+ec%&tkVtsbE3#v4?Qmc*GO7qZTh3lDcq z_usIZGY#{K-a3SN%&J`2;;xSUE3cKqsfjTJuKZQ3oX-JIYB;9Rx!C&q?Ve8x=2Qoq zv^wCVHU50MPL+RC=dw$O#N)16#4G9otf{Uw>2xU>(47)DjRzm+jWMI6J@G zRas;F;;Z;*BTDUHmUoB9|K7XYJdCy;I zsRexie;9PDr9-ULaL;wgVjsV<*h@c>k7ADO$kQgf>a^e21^!sW*bukVu;-n);PR(VT1 zReEJf>7PsKzxrUUMh|+tb2K4VdT%@iKuZf7Tjl;OQ!q;liV&+75%n4IGa<=C^dPOW zO5OaY(~-)`pwhR;>Ztu9sAtlGWrhG+)cT z%4$=vkCC7lqpm0zG0yx1;f;Z?c9gD@$Ux_>9z6f#-18Dt`tQYkjUm)-Kb( zC4qYldhbHZpgnu|NkG$0Er$9j3bhlni%}}^>|&^4T$)>p5kO38Zomp)sXh!-?2M(> z;-g_<8?Y`9v{64p*Xg`b4hDYm`6vftI?6%Yag>9rHjV?V1&n%T+Ll{kj>UsCI*V-5 zOR?GtelTn=G@~CX=4a zs*hduqakzgU;UU#EGnU?+`f8ubN9!Wf4;bW_2<_&KU{H3R)+N@tfAfhxrf$t^GwkL z4D1{*YM+47M@`ne+q$Gr3`|Knl{4R`u1-Q@H!lhKYI@ywZq`@R8|a|C3i8#6h`t?L zG!Fuw`2vMfpB(RzuiNs}S&3sRtzg;__m6*I_rz~(M;yGxXomB>(E2Q3J(*OCnn)`Vi|>-aM6zv;V{GH^C_KbfGJYW znjnUg`#l^>vGMZU^7DFkeevqz^3NBqk@r{`-S?&6Yx6H34Lp)dX3hrSH)KJ=BDXgZl(Gc(b-y{U)D}GAy=m7uzoZ$qL#lIGo0!h4@v#;izTkLXm$- zpjDI4r{M81UX@+|dCw|%Nu0WSL`^zd68qiTe2mY%&4&cc(YUu~6+AvuZLW6Zgo3wp z>5l@|df^`45>>$--r_^(f;Gvt1S8((VDk8oJQSm96lK>BAaL_w^4h4wLSb1b6-eUT zQ!2nmcuEEM2v4a1A2C-dki>g3oHyCC4+j~p zg)Rx``cdIg2D?@0nt(L6DvtL&xfbar0LRthGp;ho|7`pInKK<-72-VH07+5j;idEN<4PWu>CuD$h!M2@ojfpN``55x$Um64yGU-gb7PRyIWO zMT@oXF8^?MdG$)9hForLn2@=VIyyfxwu|`3ky!KrpiTIbePM4tL}`VjvYePzNvu1w z_J9i|apNaxqciQQ-dgAIDwN1*vdklq=>09{xXX7DS4IUPBp9oxEZM$iBL7@qy7a64 zK^^|5=zCY&Bl}8xbIqC$>>z&9-<|skWE69`!};`qpQ;ls!Hv+_aeWDx$b?5&jw$De zOla$XvnX*2C8zxmSy)2kEB>Jca5K=6K4&{(d-r@gO77UyGWE)&H<<4|H7ZPNOH0^GCipoXJk1 zEtlA`fT=S`M3{CB@)4lqjzMq+J(tlX_DM`Y!>~^~-PP8;CS(8}T@$@uruF)ops9UL zB-S<2d#{P!drc&<$-GLPEa}n-p<9S#{CmoyNO14gEG?W9mZtFpF1*l#IL{i{BYcKh zJgdUKkIfRltu}zxy4k;% zC6CR<{i-h8f8lterb{i5%s&2GTCR`=2=B`-Ywv#dqhZMn+B_6I%9#i=y>|9CE0 z8nvQ6N> z+ePmi<>up3jW1*OyClLi7wBSq3WJczg^3c?h6x?`}Djc`01Rlpj^P?>5+8o%K8M%8D)q9V6 zoVrEjNoczNe&iY(mqG83_o$Rl{=^^18Ti|a+q>I8-o5?i8eBcKKT&I4K}GDkw9;bf#x>NBcS>L41N139 z(0y~H_xc+~eH`vwaqX%d6a+e-A&`F9dw$)USL?|P$KC+4Et1Y81+-4|<9xVgzy`H| zTPiE=Dm}vw0%J*_wn)wP%YE!dHeEAu1L&TPgyz<1ONn|I~G*TxWXBBB~+H$ z$dtNef#l_b0Aeb}T{ji(q#}M50Zsn$4SzRWg9w&+vFchZZ%DG^-^<~9Gxc74%;N2w zy4G~kT0OkR@=qJHanV@vuQUfUmAGqO`Ilj6Cl~yY^Te9X{-}i znT0K8ZDtyK>*kU)fl5D|OM>qTJq>e|j$7wAa`jk5p!q36j!uMg(4QDX=J;tR6SwY< z!toXVOv=}K z08eh#piKeyxp3qbh^-Vtrn%*=WiyD{j_@4wx23q6+ zzP%KRjOJ+pmep(oJB1GL)3lKPzPtGD)w>@~wy*{+ws#=9C6dVQlQ>)(_EEcmVJSuI zKgWfCB}IV9kXepIlx~A|QbI*dl9s0W#PUYlyIw9;Kk$!bPE1V77MbDlSAK=C2fF+8 zVz{e?>=B;nLF5Qv9mxVR3ZlGG2FN&)#x{L4jfZ5k1bLm5kQKG0hXJ8yI7nwv%T4&z z(S%;ar*bD0wDJKzN&?YuCGZRg z6>^v>BfjT4tnwlL+cY&T>t}u3Y2^WP;pT71frEl7Y@XPd8E_k(Pf>*g`0P?b;Zj3+ zpLjWSz>%tbj{j6OLnIZlDjcHJA)DAN-@)2MT21A20$m!v-H<{G=4>h_ALDltr4ap_ zOkkAWhv?)FKipp2y}f>YaV@U=H2@6* zc8sq26;8!E5JjA;#N|U&@TTm_ z!7nB+bx21^Y3zR!lv~ZeN!MHDUFvw?2#nBH1!ovHvcM0a8KnT&xLl3JbGG{tYjy#Y z>HL)GOcMe%-}QLD22CvMnVRqY1W&QtGhIgf(}iw`^V8Mc5c9fpraNq8@0&^=Fck#G zHCaxpd6g@?F8lI70sCgLpQ$oH?84v;DHc?j0t#4S-wcd}g*QRn()^or+0s1wW(f&k z-z=fan~G-E#Y5o21ado8kmh}&B4N(>|fIXfw>@%p$nK$gSkjk7Ss{xfDam%}4J9J%r zoKBTwCVA=@wpkau0U41nn#;e5kbT5|zkT-=I6!jC0b&fG*8&JsXhr}N7~}(+tY*0 zKpy_I+wPBN#(kd!sGONpIi+VF<%ZeYM+3wJH0mz!NwY$AnN&H2cL1HVVsz31^v+D` zoe2^Be9f5hY?L&liP9a8E}c3>r^~B%Z{EKB)A#T0{&M-|^{bcHuZOFt3%Hs92e+`& zd@P3i=Xa3>U2dw}pIV;z3_SChP<=Z>QTuoPDNd=+gy!23g4=kdR`Ee56ko1!_UJaL z&h{mI%x92}d_yonq4B1pIu4_jZ8s|l*(qZD;ePwL?jp95*~i^BYN9oN7?-2`CT|3c@rKF7{_SRr zI4xNm1!!`}TAMBW$rBTwnap;~GbbL%4*~3#fg-?-M)>VY+}m}C=-ACf#7*pPCZfJ+ z=N;y$j^2w{cx>(`j1QrJkD!aBE1ei*j_UhH z@zA`~`5-0DEsA9@ASfRsSD?RfRR-pR$a*6F=ZSVIVhLW}1$42wRw;alq4q+Zxx_MU zJ}{YM`lTu4`UO|*DDAvoy%*`LBKglvpWRAX`~LCM?+%e@G_d->qL17}+I}>`b^r4n z|3jp)Q~8glCzdTO{sI*1R7K)kq20LIrMU$Ew)Z_5|Xi;6Q6@8Cn45vZhZ8a z8*d%FDtYbKZ*%a{FRZK%no;eu$MYtLLQTGGwdYWUW93CugYbl;7|kGGf33lGHl6sr zyW>j2nwdNS)y#9ZTYrk=-wk&Gx5^CiS3(KCy1RMx^3BDN4}&WDjVbv>bo2J^<*Qd0 z?`~hcy}E*Ap&a2eOjOCLF<@e0!F3mmj6+p>|eEWh#>7CkikAC)v#UvEIKZd!gk9yiC;8hzs<`yGEQ*To-J z$D{0eB~)n@%jJhpUf6FgZ*DKHrlPpRdWP)R9E?jGh!|>1<(Q!r=X75`J|c&w;JgBe zvta}D#4a*E)rXq@0+V6^3OLqeapQ2AdP$^?yf4Ck)o zyLy8z` z6KmI_n8FxyzPqXOUAW~Fxm`aoaw>iGfqQr~;hc@({$=<2( zX)ji&eJ(0%;z-}kp4B#DhRi3907Gu6vRf`#I`&#MLzA3nckLNDStH1IF0FWCh;tuO}qln zMPxF5DA81Yu>`F?Lc)KCj*$3un5y5sSwM6R`4zLluc*d&ZJnYpZubg@Zmg09+ZAAW z0*b;baf`z12`CDmCm=FyGPMbeFI1RI>30njWxnJAEdaoJ&gDKtvTn4)O*G!~&tvaqV99Iua24F-P$a%9Cww(Ce-u9O1exTwT&j-MWqNM)S8A!gwM*B#R z*IPYZzV^RFUC-U0E-v2vO)w(ABgDkSi{YiJ*$s;mE8QZ0?Z8b)tH3a*2KvzR^8<*d9faUAN~?JsmqI zw+|8v3USzPEEWU%r2xF|`JAtU823{>X?nOdS4CkE9QjuR2uVE9ut@=N$hcJ17VIZi zFDy(P5+xW1OcL2g;?r(x5C}xW;O&EmP7Ja^Mg|j0ij}Suleuk+op|_M40;pA=9W#A zM#48`f-?tmOa7|X0W(Dz^Vacd{6INIj7wmdNEaHRj2qE(PaD{en`WRx`C|bXRuYfExERG9H*0w4sX1zKF z8z_&=>RBxuPz_sbtzdJdpoO84d@T1RUSUGy%XIi8mJ~M zSil^a(H~pHgEl1s%)bK6zxk#1o}MIp#00iE|EnvNnn85-%jneN%X;n^X6s^9NhFQi@9I$)+!mESnb1SJe5V1CcG7D>v?bb~1ny9vmr41}n_ z;Mi`?#pX)AP*wu)d!$=+o8KKH{#tgXJxc(6@ug8X_t9b1G1UZEjWOzuN&phU-Sh3f zV|(+(6Io9nkQv!SyZ)p^vkLd_j-O7?gn~4*A0GO)BQKc1kl=3?lidiFN&*{vWD-gw zYNCz_9F$HhVxs5pR1gbwfHzk)XN$f{@>h2PLEy$z1|kO1jb#!FJ?U%H{X zjcLrr9XF``CztLS*rfmQY=n(7P zsEk|I>RM?pNtX}BY@#O8M^-&~0R@lN^3ePYKwc#YSP7IK;g&C@wUPi6t~4fGf>op> zwi{)A&Ms(7cxkDJlV+%!?}77V2{8&Wm36=ot-av(d`w6RZP{p%Q?yeeha^sxL`A0o z^2CB}F8<^0+goIxomu7?qFzAVQweFMvj$q(1V|x>ZO$5Kr59$RY;`6|S59=*^Be{B zPtfMg#eYl^M;r=7oYrr>megy#mNei-H>TLku~1`{G{axF{U)H<#m21qTymNRQ=yB$ za84<_CV&E+>B`VrDz-(*E`ZHUTyR?A{z^{Jg4UrVxLX)qHi-Gcm$>V0*6TbL#Mm0iNUMi7GZcfkjVZ#TzTIW66}( zP`UY&rOcnyu{Mz%a(nrmP&mJP=WJ30+9`Aq`DPfb`(vpE+36-QX0*@ZnKNfxP)HPT zo(}8sr#DqG^$D>m@v8_`Vw9cUB6Ds%XUWwQw&hi#!A9bA>JpgQD*W)jkLW4J|NOAh z;Q{_;@DEg}-v?Wz+6P-;cv$(Xn#%BKXC^2<1{1N6!T8Qv{iwzAd}pgl4K$dI@SK&_ zR%E_oTxH&4TxA9t%tm+~UbVb7)0tX2mSKsR7Za??H8g5xMbi0utwU|>OJ;E`!S-dP z+jh;D=2y9YI>j&@n+y{d&!H7bFW|Q2*Ugz)|G;yF-+Nn`;9`yC*or zJ30|rzP|YDcej7Tp6#mk>%dh#pmJG3?9`gBsqet8CaczQ>GC7w%u|Mnhieth_T9zx z&E<`lFS35CCSaGKqws9LYSoxEO?nvv=DkQ?ts?wpjt|Em@}C}BPzX5Y|mdL#pH| zhzMp5xB%b)SCCU%OzO$Zv4uF_kN5Mi{W$K2R0RYRD-%pyxb&1EIoA-W>iikZ6^ny9 zBDr>*E;duh;8KF(dNm=2brj)Dh7k_i2QhLaiVw%tdL2D(ME~70SppY{DIn>6aw_Ed zaS!4>T8$+7glM+8kMqF`+dXIp@ds)IC?gD%5j3W!@u$d5HJ|$)jR^N z+h)}~lK3xq0{Dcpo<)-CJHDcy>p<7nk7?9A-!gevdg{M82ms7ab(H*kY6pa6i3!VA z98Q$afDU;0aHYX~E>4B6ax&PK6fKxb|=t5MKan1}Px&Iy}fW$JJ z{Xv9Xm&UI51HY&k3V$aOT}b6@6X&%T@YR4hN^4I%AGh7KDN*{xJ%Lur^GhwMZ>d#0 zk?2BPV0bbB!;_^>$-nxvR$7HC%fYt`sS-2i0_QvnU)_IRT)%zw_T3K_QgSpjO?hZO zMa}xK6=gR~^j=imY|cM4`xQHW62@T5hGg27(dN;@@w5{W#C% zE?6be57EhX!y@{4IC5QVKYG@liQIINuD5+WZ~=4>hA^KZ-HPZ2-_DOrfo67(4?B^A z`|{@HJ4hcv50a%j^b_Ut@Y&F=lk6j>otW$30VKrh0VKqD0Iltvl|>q>8D%4FwjZB9eTrt% z1ZZr{zd&Paw8mDFU?7FajV!rgr8AKgbzna|vJKUiiAtBUza-DdW-DP=MPmPC<`h2* z&bJspbDYQ7X8ZX5-Xu$@bXZ}kaFdCjk9kow5xU|t1bVdIwp^suZMnL}=6Ea0L%?32 z<@na?>?PDVdmATo}YqEFd;aOuvEzX8~DBg9N&dFQ{D5h+skG>O#B( zr1N>qNkE{Muo#ww3QmYiLPs3h!4Sgy@=2MdEorSfohrASJ%mvoWB6Oc5!D*57q7D0 zdZwOLnJ~x%hxC47-|MC&El$l5?O8C7)B#wSHPmI!^GF?spaIme5Ae87y!5P-92REx zopHIum3%L|&ZKhM`J3|+$TU%(X$8+G<4*vu!4jP<4y;p+0lw6cvQ8I4!0VKRHiOq| zo9aJar+#~(_E$UB3hjQ*-&SYD>u;+w8rp$;db_3H&D?dev5dajwEOJkt3QdmJUUmm z+g0ll88a20#heA(#8l@?^ zD3L8%6SpUAX6ai_yM;-zy}o$EDF0~yU^WJ7C&9^8c9^CX#?+$Mq^@-qAi7xX9Ld@Q?wExyPjVagLQA3(LE{&A zLyjU=%gt~u)Y4PYC=j0O*Hvr4$Zss(wbs~#q{G%aUDR1;iq_dKvp4{aT9TAl7Z2c! z7N~ehyMF4)&(%5aqh(Le*Ly9yCE)P} zb)g8;giS>JEIK`p{$J}tvHuOGF#7k4?Q?tmRtnZ1#6xaer(4MN6_Aly1A70$wsh2U zeJLwvmPuK_JQ!KJzLtsXTt6(}w(N)75}_;D%U1cFf*Uaq(s>4-D+@8NB!(B~!;z5c z7Yj?9*ne!AI1i=EXFGbDn0OsMO-w)6(PL-(**>2}!={$8ezE2uK~8EPBdajlXv_{t?<)qq8vMmSNP-sx+s(5w?mS?X1al z)P{xk^qZoYs5FB|5twsO3_`r-!>gT`NxwHO#12Y0)HxN1JI$fDRK>2Ou=o4Ou_(rD;$1m zpJ4j3^Roa^&j%>!0to_{QzwAU|hYsWir(Vm0Q{I(5z-pBiTj>G%KL!2qX;^b{;XztkNl3?8UPT{|=%#N(T2z2%ogq&^d!X-}V;MilzJ_QU#S zwH8f?xJh_8ZWZQ zq0QVoleu?h00eBCdat22i@hhcRRE$(5U_1#&dwABtV8NM#P5RgXZ+4M1=m2EnJTeC z^cIfjZF5ru$*@1f9+IoZG9;n6u?+v!G?vkGcmdxqTQXU4+qyvIZ9?bn$*Jv8tPk(< z?@Xb0hT&)d;$Jl=521SmsoyH~h+lwk)wPAGEVCk_HoXg7Sl0F!LtXr8vYC7uU29rU z(2`({uFhdVkVe<)78FGj*n&d+`vv`s8FCKWS|EjPxD1uJ!J-yUFw4_HMEQGHw3XSv z1$^rkN&=_wt*2&e?PFwZWEHTH)#q;HF9B?X#?GMcqCvWNiaqSs3P4tDoB0*jBecX{ z>D($~G|M?RAg8DJRq=y)FdTBS7{6_a-y_{Znj+3H%w2U8mA1iJWoHAyn!XpQw8Mc_MR*xP-&aU} zdF-eIlfuiGqg{esKqRYSK$!3{=4c&aj!vFI1(G{(5m=h@Ft{x>e#OZexwdm0F#L=x zu!t9Jwv|bQ%V@K$Y?rZ&HrrC_XQ3|sT(nvB&&Hf>Rs3xcb9Qj3@YTV}L4OINU89T3}VO>8g0^`lmjcFRn?FKS=L zC+>1Ox9vk z8c_5`Q!`nNl3{_8&@^B+2Dl`_CY1e{02EDXOsE8_f;Kh)%>t&A$M76vt=Z4X1Lgy5 z4RE%rg=azovhFCfHJAnJqX7-`C}2-6VrK}(+S3nHd=-$HM**1<`($g2uS%n^&n0Hl zfSfvN07a&g&E=2)KoM%Jhxt@|8jx8>O=ewETbwslKCqOV*X<=A_H54x z@ynm(Z+Dkhm*6+10ZDSSA!=f2f&Iow5yOC`h7mBgIn~^1#ia*;UQXLMP%pP?6dFp| z?sym~FKFwnyr8YFyl5=_tSYRa3xyoK*#l0!l>(INN`VGb48O|!d%u;)39AQ@7=Adi zT?s3q%2tR8LyA@(I|(?fHTgGRDwUM;r>stF1#XUNkU;O7&3jq+gfNIzLAT`QSAW)B zhld9>`@Q^*gaOk1RgS7&R6g>Aec*q3Q~8Gq9I)n>Dj9R-f}(f8Ni{;%mI7cs+|i>smimE*Gka(O*6vJCC!vxMtnzl`oo z`?&?+s4flxWDVttPS-;TJ8z1JOU#Eo2JzT`i>mbxK2>{-?Wwc#9kEA@8f!2YYvM^I9o|=_7U1sX% zCsTDgw}T<=-Q4Oq2cqabdwucE_o7cW=;U3d^I#Ix$h$a8k^~0$T|iwPf1Vd{Rq!d>aTg*(&AEoPHv!tKx16?F3W`hY0A z%6|=amG>I%0+2L1VlJgcW7=SMzq!S*TxXN0TpbCx#K_=Lm~jPk0r8g(nySs>D|NLG zxxE8y!+few(BiJz`zae4V4A>&)&Xm2hMgElVy`8@gzK6`UyUtk0?;A50La3wg>2<% zbVzvFoL{nQ12`TK5@!99T^lf2gNwi5mz?(WJEH3b7u1aJsAB=MF|Ep$d`I&cHow7XD<+>A1UU3Kn>Fb=z)5gZQ-)PQi|Yk0 z>%9p(ovtC`4}og{;L2FxT$(JlbC^|v*5x~tR3I>zBu0s{&O6BM;#M>N_@m7F;+FH{ zUKr{2!%o=K_fMmD@7_i2o}18zXuaC}7(MPHiAuzu^0-$0|C&`N9RdR1QC5R**hl+O z=B*!A4WHkucc;(9b}1|&Q#|{)>zX6Z0@E$B>?d(q65X>#6sSYQ+aMf?_nKENm!h9M zoWI!pcszfxVMoCpI2pM!1{cdMhP1+l%%JPfHa%wmD}fsjrS=egJtUKguy?=tzc0Rs z@LEJS>DA7pl}#k^NAT*9MJC=wCjLd5U`>o81y*q^OZ+A-OJm>RVX1Cd5l`S9E)vsJ z#!Z!O`!cS^32`j-N)!grh4TqRznu~g{ za|HuP6z z0rn3gUagx2*fY$;sph?zj4b)&`PYrlvvhy<0Gsw@sZMwkBpF%CIWCMh5@T<0(ieM@wWsQk-(Gyfqk)t zWVe6Td13*yf<_J#c9L$d%N=5{O^WORU8$Cv?!nQu|W7+?cW z3F(DM-2LQ(R02q(2 zv2>(P0g@C#Eq{T#h6CUAfaPsg{8TfrR>Mx7KWT#t7WLGKii3z#7b*dxHISfG~f8nz7W-UlS#^|=?L zy3a#EO?%x2Y+iBfA^Fa#Elu6>Hf}-x^{;=GHHA^L-#+pqoj*;Zhr6cxZwXyJx;0Dz z@4%HN@U-NT=pphn2iMXU%NK?VCf}z^7lvHG$-`N6t{4aIi@q2LgKZFO<@dT8$tJH> zykX2Dl4M^7bmZzwRd3V8_+FB~ih3Kq0;6;F06&lWDDku6&?Jv1Z=6UsXqcy$@TB~> z+KG$y_xwNFQ^%#WlI{b>^_a$j9|U~;1g%ZbYLPQ4uMfYk0``mq>={|!Gik9A7uo{u zP7<TAE-t{)N(QJHcwO8Q(O0592q9hTCV+XJ`A zwQc=gLgIJJeIIZ>IG@;sRn7LRviO>wZ&!-k6JjEo$~F@ zLo4^4e>&YT9h(xCGG#gCWLxKTVucpD!jJ$JSb%oGyk7F24a$MN)90|&0jY1jfnP{4 zmO*K4w2>E&yUBQI-v{Wvy*D*8@pTf{sAOWssS>x>-TTwE<^!w=>xB(}AL1gOHE$MRNJU^Bx60#&;C>5RX#INBERd zX>uznycnus(>V1?8a_tnX^|;cX`1Fv&PKweoZ>T3g+|V8nPdge_a+SSF@Uf+onMv4 znGUlgbVAEbt8gdR z$Hx(y0npu4-FF%j;<8yb0#%2_o}a_Um0ry;jREa@VWrhz<=RO7=dg9vk`Bv14wwl9 za%!Z*+7lthlb2(ZO&4@7iEY%miGo%8IDUWqEzpb*|8Z1^b$m4ywT>g4N8R>!;XDFh zfag3)>58@#ijx*ZYfZh|)x>^(gY8;ea|N}Du2xj|xQ`-!f3?~kB8k)Vu@>{vX4Hj`uX$mvcLEOq+S~!^;)kpGL5NE>V4jJP;>j$)^W24M0K`SmW&ck z(!_PDBuVa6&gjGbg|c{c8uoApvn=EsW8bB*X{a=RcYC`f@gYRpg_&g+=A*=oiG|H}G2)M<-Zv|I zjlVg!4CFkvZWq5v#>WJRhCZMPL7M0uz_X?{AK@iw5))XMMbg-HI>?f~XmwN#5RKKv zWcwO!oqc2qt?s?TO4^E;&gk1*{2s)~77U{`M`NaET{qR)B6gdX3TxtDNeI8Xofv3|S?3ZT;?0}lV@%!@HvBAyMUs2<(M09^ zk*upmSG=ECZuY@A_V^6m;}`Ks;TQ2q5hUWv04-b3dCoJ>AL929B;}%Ko`3H14^M>xliC;Q;6rk)GTPV+d2DT8O*|@NQhOD*q%n$H z;pjIbaF6N5f!c^;D*Um2&8jh)Rq3dVmKhLUTGmnw0IBBI)BrESWF7Bm>K79>J7%EpBIb~ z>@d{x@^1(1KfqrDNu}*!h$>%V{JS#oQ`GdyIH(A->bPnrOz+0P%FFJx5{e$G1!ZpY z-dN}CAipfIT6J$+VYCP*g9-?9yWb9=O0`ONL{{mvUqm-IcUNz}d3}BH%>V);Hd-%v zww-XALPuC)u{^#e(jp*TkB{_qQxKP+4)7k7Vo zd5MiYl(mF3qaQ)wMvs4+e$PA!-bNYW;d%e?XZBmI^CzZ%jD`s(t_&zCf zCgGDn(whGYvuHxlp7}6^;Fi@z05H*5zM8ZY0hFr6sLrTYxhThdvs#;E6!SfqlOkGp z%OY(NyqHT)8C;>$$tfpT36D;+UV#qTd4v;Kp5T1;fo+=rt*rIBl~O-c1Rvvf!lZ48 z6DCywt41bqME~~l;77>Psw6NfH=~?p^yl_4;;|u82q!HFY8g&iYWmEF_?;K2X(BtD zTFQq|)$`egCC<@&S?oyzN&!;tGt+=lfP9!Y%2FM?;oLHn29&#LN^N!EnLH%E!GBmZuec(0T!2}qVrv(&F_WT{`-$kGsHBhx{Xd9jjZUiQth z92T~ab_+LBBXxeH-0#^>j{@IwbpQjv{?f<$)mos2M7NjUDOJr}UP8xTcj#gE7sc(x zcXEG>wjV^DLa!TP@%M>xwaw#0%k~H7JKU6LT9GRv#_sm)!)p6@;1&twxwOyc-#GICbwG+u5eS#k+J zSMsmRMzOz?Bo&O($O?1a6VeRe$gKu&&=dnxLv`}tY##s2`A7bP=|W6swyg&rqeV82 zQzZfJ2brA`I1a=Zh{>cFs9nv4A7r1<<3n^}LOvzMGp_xPV(kWwg@4y? z|7CvrFKYvCHDmuRNaa=ujVxnRIRi86m^pjCpms(Bs1GfE=Y!hW(BpSHsGZTJb_i+a z2NmRFg4!WOV+ETZIDRl%R5K`N0!r(b+=FK3?{27E9WDrtY#dTgqCxQie z>}Jw(9y~ryr2RQpmCoOgdx@TFQ*@!inU7J2eY(P#&om$q zpQj;#cr}uYtJ2dvADxSSI2Zn`lFu$h_tl|`4GLg`%zMw|S->u30lSnf?~=3!=jzb; z$H9pbLq%*z0zsbpL#z2<*v+~q^1|=X$#vD$d>lA077Kv#!mm2yrN4+B$8Jx!87p+Z zf9S-1AWT5UTn-s?7EJs(Si8A5WiAg%nR8;z*EhG%R3Du+YxW}jnH?iB0v(a@ofD0q zGli-t6;b-Q7v(jPaC(|nJh*o&|K97jH!^z^TDKx!z!!Ft1mSP>dPs7}-J5BWz(;7) zD4jz5OAEIjc9JtUc6Ru&wUL>H&|&F+h2@WX}zIss8AqxEdR-wF_1+<60}9c0kW z=SJjI!;InH9NEyDgYVXGn=Vwgfg=1elMchXtsaNRN*(-ni6qlr3Vf$R>A#ty}nwpd!{G!ltsgrmz&xBKCy{ zi`W|?ED{|eY$}UuiV;QaHa+0$1AVAS{La2233T@T`>O9)FHh%xUR=L@_4eHlXevUr z5Zt!^`R;Ki9^yD0tk3w!Gl`9ThFDU}8uy*YFS6|jw|Na;gCc4o(mqkHM^YMzUZf%2 zYxpoF)UqtFd(HGgyuA8$;)uR^d2=hAOA{YKq~NR1+1=EOe9Fhr&vfOEiK_#UiSVIY z#4TY&P$Er{=|q|=xNW-l`;lwH?Buti7*sYv;07iWSHgOAxM!W}co>~WtM{9&=%OIT zJpI3$-wy0#7H6$YtIEccvxq2CKvC7aZd@41z}e_wk(+wJ$>?EGx?ux;dgt=W+>TuO z_~`c#-Hr>1>jH`EBKIP(rbQ8lwc}EQ2e--m`zqXmnofXS2A9{?G-Yx35Ek^5r5{M9Uu3biOkn= zvn$jfOmKpq-5^nO4t<>uF&E=x)V8Qx^MuQa7n5g24L4GtvoL*iz(WAXrtFg8Soq=O(}Khv!?7Tc*vM3NEc?ma?-`6y*o30X?vznD3h)*MRQ(oU zb;cdazO|pPjn1SbQ_r78=~CYX(-;|Znr%Qq(U^o>yic)>=LOpTo>F8Jlx}N8el44T zpDYr`HjtL*I#EP;Jox!InEp8`xtxjaJLdbi7q0rQIC>K;Y|m6Ox`^eO?;6L-_06r# zOCI~ov{V~4Qh;`Fr~4%ln)Z*dRm-Sb)Ca@1FTsTFc z=tdk&?C`Cx@hZG0U_pS-IM*pJEdt_mg^AD2_g&>epTpangFlo6yqJbI=Sa(RvFx%;1IU~j=9q8J;dbT-Y0SYNEDeOk z#vEy>3-jh0bMOIv=R=v1&uPpNfEUXj>5n&+V64qz7M99dTfmFuL;T*U(m)^1;l<8- z@Mc^JbN+;BXM%fmO?3>1Ca^|ZE(6dQOF(0sy_rjYOD#UeXe@JGVAHbnX)I-#n^J-) zjiq9)rNa;8LT~N?1DqRWB1dcgvuOKZ(z7H34$U6;+x>b>2@Q(pqp@Wbg4I)2+KW(- zDfPS>p~h7Nvbf4BU_%V{MuJ1|R()4Vbl8}6XzTekjvqsG9YB$fk=te`Y5t9y%DA9l z7IH;NyiWg;m{cWO%gHLN<&?G0>0f#qaPc7~RjG4Qm0T@H86hUBE9@Qi^X~k(JzuXj zB1n9^-?PL0=nFD(yxm9l&01MWCKRl)CdcDf|HHViO4<6Ym9ov3Wa6)*cB_#T<7^DhRZ{mna!KLMSXM7qXYqi` z)JuOSXZ}i)sa0E1o9v%kCDk#>9OpSz%yn5*wVRObWKc_2pm^_-C(bgZa=2$dKOEKR z9IgR>J2gHAz=hG6%)0G5uLue#5G=u5!&PR^ivo5Df}l7-$bJmdUcZE2&tgdXsLd^| zAs}osMKM8 zAEnXn;mv-=s$_suxCe1!BC!|XXRInQ^(8n_E3rU1D`Cc^LeUuv3{k-f9~+65OaQJ_ z>B#5UfuFUK$(O`^vT?Ci+BD_zb=uK*!Yh?;9&)+#+P^tIGWK zTdmRUXA&DLSx`8e*jOp6Ev9{s3~c#p^!44{W4HQnSY_i|c7j>e;|#+L*?*i~g}z!x zj}dZNJmKqTAQj-MSo$?QLk|L&%LXTPSy8$Q@Ke%B{d$CBS&eWk)jw%5L@6*uZrp(} z_FKVgi+G6!6I>@Y_Ha;_5bjnaN%N(}m|)mfMF3|O0i0PF03k%~%q6$6+cL#Ok89U% ztIEN~o=4KI{2h_`7-MGR@_@u>iZjP{LY)}2n5yz?YLzj@hHli7Q%11H_^ql(rTwaa z6`IV-ggLKrTRqtah=GdEQi3NlnXFfAcLqCiio3 zO+wf&z)q=};W|U?H-=)C|Bz2^`*`GH1lQ+Pjo)ilHOgz2kvhkIMq(-t)ni}G$W9%? z5Sq*x=9AOm`2kCAW3MLD>TGPT$sj*LZ9m4>i>7Lg;LN7tC>0$!cd97^&pi=aq`6fA zA*6~1EQXSBMju7kD;+RO^1=eF$zr4VS6xsNQ>8OAQ&NZK+30`R3Ysd4nl<^VE1|zmj;V)LxA+we#haBp~TXHS12^QewpCb={Lr&F5K!8rl8qGT*r?dSaWz3fC3w?W>L|deLdi3%CE|M zDQfvUMHb-+?Vp}S@9tOY=ugdl^E-jXbKEzZ!^7$rHS70JPw{K78QnhcBdb7iR-4sv z)vWP1~EG9sjReos}kb_7}4r0<pXgYa|&TI|7Jnw$y45qXyY`PHQ&nqUi$}7$aToWsQRj(Z${Q_~j0IgcD zBW~AlVYL}rcdp>X9*)}`V*k-8Q~9_9y2qX=SgMl;(IiwEOro>Qj_nVt!_hixD(jaI zvW&%|z8sbceG~QUI{-oXddI=tHx9WOH54(7lUd(L$+% z&8-7iwf3`WfXz#q0G+Ne4bFO z&oA%oP9z=wyxVU0!R6O1KeHz~S8OLhuw@0dB{2XsNPSnu^PR705LomrE`HSK|4$nI zK9U}=>F57`@|5t+kdAfwkrUZ+qyd!!%yiP3>%FzkwIv@+2LopDI_DP0T@4<8t|aXv zGcDJlN0{F&O_<*;O~8&$W9&pPM}Y)!nmCzWj6CV^s6K#^Oxa^X5kDqYdIB*)L1vW= z4wO=ZOy{g-B9v99qm$OT(RoSU=h1gB|9T>9H2%w%>TiOLPS2u~mv1h=y}G;o;oU{_ zwTPQUaBJ7G0f9(k%a@OrT0>|sjji~KJ&1T5{&lQ-kRWOlE;VWm;^G9K;2A2rGa&e+ zMw`nn9~bgNsZ6Z{f^nQo6;;$D&jRV7=All_wUAqdG4Sj(4`fQm^)14AoJXGwp&hZK zd@nEG-SLfn_wv=BE^dcvz#3Y#E$t%!tSqo&o$0{MEUZAS07pAfXnhKLz|JkT~byo*nueM;+G>mUgR>yYv+15pKz4j~wnvqSeT zHK_TU?&+buqZCxF8nQp5fducCsA{bwCfZ z+8BEY?!8G|KmVbXWtv|M1U#GJDIh7BhzqnZ&9aj;ww*&2tbqiOl=w+X7SWIDdJ+Ao zu2mNUfklT?yJb&5MH+mGZ6EjjYO^{RPa~+^bxoGk?ix%LV#h@AS{u_trbB9XJalb``$J+$Bx*yo?0JkCxygf51tb!QTz|PBP;}WcDzcyK!0u1qi<9j^r)4+Q0(_FH3%w^usp^xW ztn(N5R9&O0iYi(WFMov-q^3?n?j$ZUnt;Jfp5KhChK1e)3>NwiA;W?z8a>KJBZuGF z+D0coKo*FY=S67x8Qx*BuResu=*mC^iE?H#xCr>bl|gc8 zEJbiH;{_{;?Iu`)xGPB(&^57i9p)HV_M5AQXUT%;A{zcwH9W&M!qK1_zQ8dmkr14O zBl+7fXMGo=I12cDY#S#2YUl6tx?-8(oY7)< zRt)AJ+xchO*_Y%?as~8!&649jNpZ=!L7j_7mpmwTVwGL8?GrXwGU6YyT+8ve7zF?r zpy{%@v@g&A07NO!WS|&p_}kEy1qxY>TB3m5s1$X=uFret*iy!!J*X!V(i5H6P4;ol}q#@hG>&zPcKUF_9^G}q5&cZ8+6YYmLotJb30KZ z%`gr(t<5kMhl{(UOsO^l5Km9~4Ul1B** z@flJ46wkr`Vp{wetRf=!jz%Vq%Rl%A#LF+G)gd25a8ne>7Vo`ULmtfw%swnyFe@$V z1=6zC(lTnsrRCt7YW-~h91g)cYTTX$1~01{!yqML5PQ2e;Q|f`R5(XvjmTqmq>*;k z_>+WLqjCMRoF)lph%-hX{%njGBgZ=qWJ<-&pKiq;>})hTmlH9%l$G1`fGfMY?^ce9 zo~|NuQ@&8PAbQ0XH0fR-LAf7gg7Ng1Nzm!jZ<0&H&N=5c=?Ls7?pSff zivKnG5o8VQP$TN4H_Yfs7eUL{T<00xy!agrSX!AOVFX(Oz~o?`O~`}+AmY4G;Ei7> zV3zDC{&bxTBq^V3ujE5uWZi;u*!_ZLI)mhJreR*9Ja@dHDK?+3!$ryAb*OWl>vnl^ zxYW>XH!HQvvh~|`EwsaXr8%-waJ=6=tlNMc4y*U{nt(hVn;Rokc%jtq)ctheo1J(X z@MHk^Zieybw+)=0%CUiO3H|_vo=kG{Kx=-QfUCoDiGZthe~M`VS4XqKo;vc!9%>9| z`th2_(tv9Pl^RBQu{aI5FQ{srO6=szs}Bq&bn+?5`n`vjQx7-IT|U9K>_0pi&ir`d z`&==H1seQbC4g$^gVk0@(Ty~73{G6|jkIyryWI}~LyQF3q8C)IuY;TCFMfMe2y=Jr zP_sKYExI)ZK$Pm|%%VbK+qfDVT1-Pi)`=Gqvex}9!ZaQekIkSVNKG1oAa&IGpRa+j zg4e4?97kb4iqrUdwL1oT$oJUnS~Lv5cD~iN!Ja_^+&w=EsUS1)Hqh&Fwb`#%%?gt6 zpp6JzReSLQx25D4f;c*FjthHpC1lM9cGwE}Lt8@<gmU7pluRxjw>QDf(hNpPY%n{#BkqV zt8k9=pUgCsPGO0gPiM`40pS*SX6nit=dF!0?a7a9oaL!p$rd6?X%M38>-H z;MqSM@E%uX9mif;bszGJ3d#kjKQ)4`PGfu3^%7@dZCn~5AN9NsAVX{BdJ5ZntRLDYOc%G+Q_Zea>LY4F|El^ zd8!fmaAgaUck9m7b5DcV)u#G&CKF@|lG4t_e_b@8x1(LN0Gp>V%}1uNCY|ZVqge?} zxL~>lyk|Nqp;=(bHj%w+?Q~s`JX7^xc3K_d4f_!iW#A;^v-}6SiA|cwB(h->oBnar z`J|1kTP>R~PRN)D644Vo#w2v7qu1Er2zOyW-@vXha9}5KqZZ@}G$vPI`ciHdqyjXF zz6@fgV8R8O9j}>b(%G7s2D{vk*UZ=~DQlU(RY73v?JVy0(|z#$yWjgPYB5A=Jeuhr z4tpz?8??)&?dt~ZvdK_iqmy~VY_$Jq%lfhTHpAF_v!L;PgV;Qk6Ss7ZUbZ9=w#m&* zM?C?PGgUv*vG#}Of4X}2;!odvt6`@w%S7Ga_@V`p0GnBi<(ho*UJ|U;L6-v)hG|TJ zYC5WFdDj0$aC5&pDzD}b>j&AT+(y3-yy2_&Tz3U;_@34R9>iaFo8aMaC!06!R^UQE zUg(f`b705&V6`P*IPUcG9tFY6({GQ#Jv+4EH(71i-D=ClfDPYmslSvprw3W3^nqHyE3zW1NbirYt?B4vk8JuEJiagLbSXCC;ca_U&leOfyJzYVrxa&C(sRO7ZWy zzcOO`Hw$V#o66)KR0dW|p@s~)qq*Hm#rb+X@lu2QHQiygQR&to)f*!8FELcnXe)2J z!)n8Ls?><1@3XO(A zhs53XxRPCvPx6Qg=50)@M7e%<&557fx5#SZJv*w%hJNRfH;(J`3y9^(kjr5ujy+q; z>>Cw|IZhp6x58a$rC(a+QmLKdK;J&>t*zhGeygsjQ?I(Zptna;H-2HzEU}xLM)A`$ zTtu^=ytFaktPwRq|9lS`9@WXJgg%Z9ceHqUoAvwK*=*{g*^OpqAAxpf(AN zPi-1su=kh;KC@{m5!|^-xPx?D_+}*RIFj041EkqJc_i0mq`A3`T@{cHX z%0I-fknTetJw!ne96_7czj*uR&F`fB^v&~|=fO__{^c9^gPm8lKs1;>9B~>V{x(?W z&Nir2bdbojl=c!gLE|k=D`agxo4L>~u=3ix#F@&IRJ#*3dd@o)58eSDOBd9#;XP3sB+WC(c)n+Q0ALV`7#IKBf@UQi%G&pA+n9W3q3jw% zjH+|mpgVoo!3be^u>%j_A*y9Uu-i654+QHA=6bp7E@7_Z0dm$G_EA`M5Rq7IA3b^$ ztePLDv^B@%dV;t9nr|%${oc7&TDDQ>+|a3eL$?cTwH6VL9E@KltkHt477uUw)Vb+f z8Tl&*7G2UCW$LukM8yZG&#WC3YqqjjQzJ%Qzqu6$=;iD0UcSCU>OyqOh~zye)8IUy zBbBQH-|xTp+tR44ldvhR3H_yE*vGlgaf}JShoeG#YOPK;+W^l@9|UCouwGL+2T?`Z z-l>)GJWqS4w$e4HghjGGi!gthWXn|HX_9cKCstzWRGis9`^59WOvYqQExQT&sV9>x z7Mc3E-3>*J5FY%;z0BOC5&@=)-W}J26R`EpDNB)FNtNHG#;XwI;OzH$3TnN_HO_Fg zekXTZ8+C=M`L2prFOb!B>9d8}dMjti z-Wg&nhyb=20UWh4)R3{nw|N)CLKbf)(&5^6EFEs@mC8r*buj+Z_n5SNB*D*Kthx>> zSnuvujdV1ww(ocA_gvhO?SDNSmCsS{8ALGHQJyRF5cvpldrP+m)F_=v2c^2Rk5B;y zD|t8`4*c(rnhW!FncMmH-S?ojesd0P(N5JFiEoM-tPh;EAA_2UdtV>E7EH?zTl2UP^0P8ftD}v z=eL;nJlgD;4~nnb8VeO$1OlE8ezcvLDRcmLk_&N!woJ0o>a{NK3*{~_oB|?c6SQCd2{>C)pyVT3Zt(Fb*Xa?RZChx^wbc&cA)K?^M=9aFmoI!M*Q-5 z94Wq_^9#?6#aGjQvU(aCQ&-8T0Zn=?4}A~-McPVPq{#x{D4u)uSf2YYSf2YYSiT53 ziW}spNq040fE>jOtC5n7qN!*cQjdhb#odI2Ed1^OZV-jTG9~@ll7v#g1WIRmv+>fW z0B}r#}xn_frQ7lq1aTR8|_Vya{kzf!ucRDw>sMUp2KV z1EM~{{;Gs{{ z*g$F}F4oauh;_slKss>)=`^z-KHJ-k^VI9K;k;agb)*M3BTkqu>PI>Sp`Z1k*{`8G z-QKB~-D&P%7-wxb<)#t()&mF3eWM$X!{Nd;b=d7862IDNPmIu^r3x(`@W9=>oQPbf zSGwyu<1!@aah-8h6*}uW0oxA%UjY@l=V(Yqvx{MMv~eU+Q94AOot?#!_Icd`Wxq4ZeoQmLqhV_+-yY@0 z3ri8V<_Yq%YuUi1^dDF6-n@A8_OIrcYA8^&F7cMx+;#`fH)r;K=yEOAdFqID=YHsN z6-ureM_YhjgD3i#)(`F`<`M0`D-8JYbShp~q$co7yN+HWyA`D;@Y@x$TK#8ka`wy4 zz)0Y&4L3Zqk@%%Q?Ps;cD|f(R(6;d+KxIa z+rg13$CFi$yM}E~;t)b#6spX2l^=wvV;Y32bk)pKs+si3!<32{1%@rS#n=J`hWQkj zdR~E95NGRZzXB6DE){DjcMJM_bf(Y8v7=v;aQ5d|;e2lin9LO0(W)WY}x|=v{1ea#&fT^E;E{Cwi)@v}& z256!tIt(6t85vfv-N)VJUc7w$`z0GO4g@+uXz@(D-UU>Sk;)CBa$!DBKAp;mp>n#M z$}T=@tl^(ryglSHXoxD&Bw zC;GU4aQ^*!k<8-yC1JW`GiE^j#1p(=Vq(lM1oitQz$@{ZC5V1Wn0XNW#E3aWKk@Mb z!XqZ~Ea24)oS%@}-aIui<`=^Gx#ue%Y4A3AzRXixF*Zb6qrhizAofX~hg*A;{-+Vp z;O1Mz5QUc^ig|`87BEDyh#}m4DZ^p1lt=C;4A(OJnP8b^V14= zkK}7w3;CVIMHGs`$DrlM)j|2S#p{O#E-9%t7&}hyQ)Tv?BV90o)#>e&IJ7HG`9L;e z_a$M!SrCM7o|*4fUd>#LNqu&e7_*=}NQ`Rc4RkSCoh^`$6_}p^KoT=0iIcLTk~qQssp_%ng$fMQK3)e*a*{0QnXmepLiJ0+dK{5Ye2|VY zz7Oti{$0b2L^`eyrT2Tj1spfo7a5#EFm?~u{%YIoHt-J<$Pr8r_-{?~uwQY^)wA)Q zJ%fz<53&`jfi^zyZY^Z8f;Fc4+LWj0-SrLbVcqx~MM;RAGNWETH`)i-C^H##6t#mh zRoW!bKG3Ilnz9KaRypnDiV!so1GhU1^eNt}MPAC50ex!EV_@BxFn6yzQw%B>x-&hV z8}THsM1dfRDBgcv{zg)z0TEt{j&yTa7 zTQ82oQ0gIYCLv=TvT{%A0D~v|)yv=AzI^@SOnm3%_UdprorYqO%>VRR2FhYW1LE+Q2#wH5vviJw$oxYiW`qujgoMd$bAr0<5F~5BMPr;7-MLtZV;IyMs!E zaKEH>t5#ODYH_~bZClu@7Q)n938or+U`L@G?^r7=1gdrFQmU74Z~v6y91o+_RaL&}*n8}YFUoUxjdgb4X-@Py9PsH{;o&qH~i zhlIeG;i1g%Q0IUd6>)|mmhn(#c&J#6!Ts`W{^IRl&wg{ZxqP<&;dJ?Iwa;(w+XMXL z_IPN{h4}%0f`2|<^d;a4^DVKZ`dhttC~!k=Gdu^!9&lyNs&a4GO^iVvn7}9&LyT}8 z>+6t2)qqN=rIN~uQEZRtJ7>}?<9|O7DZb`~mRcmeN4(pcQ77&!ANrXXV#4RCbBDM> z98BG|lnK$6SJJa18PVwasffxf6p&!k$_Iqx0U>>WDyfwBpE*ticIXrzD@DE~ALo+N zIKW#2DE1@tDl(C71)A0=g}{ejO(K)rGCa1G_M$}8K#F+(S{38e&JRQL14h06>uWn5 zzuF%$qh<<|*-eSX5k~DFYwMFl0~0H9O)LV+@+I=0A8u5P@xeojcZWXR31gEpFT&X5 zw4a4+9v(NlF!$)GMr4T-Q2hX0%cEPdZ3yvLMe(a39ONe~97Y@6R!HIA7y8}C{*0O?~on*YE`GKFP z5(v7C`m24dVPYqFD0Pk(*M6vI^zcA$rQYG`(!THJxMTJ1aH5XhsPj8|qfR+`+uSi% z;a70<%4d$5R8ePyQcO*%iJ2;s>T7CY;By+Uff0vBZy7`96CV#`OFeLH4NZ$UOueQ> z9F_}A3#}@C^X3*j#qXZKxU$;8Ue?_!Q(w%lsfDt!6+%Gr$gmjyo2%b_|NC=Cpa66; zKl@w~PVD-+sIZl#dnu{ke`dEpx*T61ISpeh)_+g$q3#|AONaqX9a7 zeBx+UM~c${e{=)>7&$&M+Md(LC)T#-ryid;9`T>64@}6Ubk5b>64X!s1yUhjtv#oy=T9BCY zKX6j8bl!Dc)|>Wan&OyJlg9#0F#r`KtCvwYpigCn2>K*B9Rk*g8iH@?yf=5idmnC_dj`a4_K%ftG-w%+TpuV}n+$m) z6t^c3=lc`lPc{#SgT(Do!<${p2ZJGZSq>KexI5j0cck|<=Nrw|K3*1THL@CD%{y5v za?e?7XQcPm$Zo(PdKygJZ+J{F1+{Wa42Q;;f=U&EjMT7+Atp_cwmeJRA=Xz-6WsMK z=$jgxxex}vzIp!YEg{6+?j$bG4Pb11`~17>E92h1dH4O5Mza+|0w%-EYNT`(^)jaM z(b`iW-_XEQH>X`IbdU?=1$)_GIB~L_n;2tAL|w&^vwmz&(b4tW^nS6|VjjEA<+BZ` z!V}-~c9Vm~>GOGp(1041IZA!&O@;P*XOHD9o&lOG{NwVe=GhA%(wF8p^g+i4)+VK@ zW>WXX7bNDIUa@HTiqFJ)oBe-=f5Ww6ph8Jge3Lh z{Ye+Azj=Fed-di!`xd`(9yeM&PR6?YB}o&G5o)}j*~E-qzj z9AjedV-OtxMKhdr;ehukHX-=x0O>e`uMVhndg`2Rha-jBv5b|tD~FRI*fp{~&;0U_ zu_+1$j4T7Teg?$2Uf9dn#l_gD-Xx0}Je4^X#o*p3P0WvG30TY%i{l7oZTM}n5{IIl zhJa1d5!fTaog<`;^0cSix(xcWO%^iA)8flkV08Y7OWa{XMb&3fq?G{dk=GzkV8|=QzRCNB#tB6NRDP>v5mr z7~_5zt?fw4u`P=GTV%kX`}6+w*|2IK+>ht_a(#7utr}LkOk%?f^(c|5F=mMSM%oyW)OHIY@r5Zq1Hcft3WFH+g9M8aCuK%r zaaw3`J5>)7tVLvq4GJeC?j3iWl2Ay=6UoORCY;YgyB^JM=0B#DH=UO_YwiVLu-E9W4}m_42hQ(1rb@ zZ2W#af;+*IEj9jxX(wfpg(}IRs2qI2!o+ztSmG?k&L$5gS-F6I3hHzoj50}bQ(>75 z8@Pzcjj?{%;5>7Gaz~Pv%h#QcK)s2fWBOne;%MZj$RB&?_yw{ zswrVig>z=3wzs^F`lQyt%5`I!T2fsvW+OU%TH*<zJ$5s7zGV+i#<{~JmKy-}lq+OoWwCc`&ZCn?_8;cZ7e``fWKfPgEl(-(x zq#b%vf5y+sIge-3HXe^>!b6Y8GvTSncE)*}_dK65s{NhSM~LUs zxtCK3qXM4KntDDRQz}(~GzqssJfE?3I-#3U{P(HT(kHkKtofdXe!DG29F@tA8%Y{1 zXp|i7^Xe!mLMes-UqGP0v@1jC%)_4tkRmWjn$ngD*$6%W=`!)t)1cR50;it)b(+** zCen@)vD;BX44MZ=NYY{s96@}%U?K)AakgPZ5WKp21zC>G9u(X!qYEM?5MnF8@jrp`LCtN6^JG+o6*+D+M!Jf+t`npU3PQ(}Z)zH8i%UgnW~g6!we zhmJG%XNq|LoT_mS!4%woSmrg+;^ePFi{qPS|B>pMW_vC#aZ@k_Zib$=jl=_G&-4OR3y&0mYUva1v2Vu7LV^(PsdhaJcD54lM2lA^% z_-whfowc9T<_3BR027RBXctVdH4~gnaZE9yz??wS0M=_m+b{{WW5E^5XY0ArZfYk( zy_1ug5cglaDlZQFwutOS-yKir7YSBrrrlVjYuZhyTiRkWErU2vo=`0HHDa48R+lQ+^YNL7ACM}k+DisVs1q=izJJUS(*@YOI*%$h_T3$p1Bpp zIK*IFwvM?KJ7!YL*C+NEe?6Q)RAA!5>$fsNP<`C#v_dgv)#(0e{}7hQf$h)E9~(K0 zCEHo-*RV3gA#~AmsHT=BMj*svQL)TaBH2BH1S<6MWQj_tESr`h3&5|z6FGT1QePb) z`S9!(>|T6ozE6dWeRaHY&z;&lfMQ}Zf_sj)%)WrK{hNrwjCbCBarvk~8aonE(XX-;6O{}gZ(;c(*r|g~yL)!Jm)`Q@hCx%O-2=48 zKCJdO8k?1&&pgOV)5vQyr6V(?-_A7a@rJKrW!Y{vu9;17hrM%rjx^;6xX2s%dUEw=W1k7*?hmc0X>MneJxe7!#TCi91B8 z`oVR(4r?1^)q+)23s%9r)9XGq3xWk}z|rt3$8;c6~Px0Jb4nt&}3KLkW_d)3le)DwqB1{W)T;soDZ2oT$~0(Ofnw&x7MVA z%^h%!?;y6glc^ZYOeVn*J_|SN{1&ciBV~#9lVn8&dL(%w{=$4d7VUg z=;=}-M))U_hx39>jqxA&JPN&Al}9>TPM8`a5!5^$J&vx`N_K$cM&^-UPUMJV7*ZTV z!?C%+F`Sj~a43aJC5~SGF-V~yohu(^B!fEsL^uqOzkB-i6(Y~S_{SH?SE&#JKS{3p zNoca^`JfH%f$!I>;YaUR7nIi=zNVT7;kiFhXb7{lb@!`NFnAk@SD$c`ELWPl`4_hT| zg}9dPgy32O(u1J|=$WpBzGv$W&9SrNPU4JptHY5>@&i8|n0W5$gw0FYDTu!i-yzoo z?bQfRdt&W?yz<(bd1Wrjcyxo=s7YKpX+8ZLQsFF2RS)D?A~PN1b*^5ys3$>!&u9Ks zF$Br(T%9n%5esB2Yy9_gkGu6`Eir2UWVMww4R4v(vl+hm0xKzR=7olFz`L$cNcK}d zP%*dWVu|l=6ga5$XynZTS<{pzHQqspvK}jZ^^d3H{i-`re5t%yu)x+7w-?SE$ZknM z(s$2a|NiRw>gEhz*E}390({DXwX}XuQ?8AYqE$wTym}p@Bwt{Zv4Ul^S%nFk~zu!(i!{qoWu#DPo(xT`YirE27d|cN7lVPNDGuPvBd z?5AUlZnCWJFpA>JjItPPqm=YcHd!#)L{l;jL#jB$B@URSrT97PIWA(zoTB3XT&nFF zDnf%BzkGe6|M~9fFRyN1J^u@+^(J;yq_ef`Me3_%FH&DEdy)ET*^6wlmc7UX6R-B^ ztsp;C3Vf}~Ze0ww6_}fL&`4@02^|)hsZnqHp+k)56S?inyTz9gPFj1N@M4_GsGODv>!XqamakC@+iq&?mYPEC-ZVtg{N~di`qnaim?b?VM1Sm?2w;A%#bsCmPg<1M}RNtX68uG zuB<`T;Fr%@N+5hVP70OlnTa=ES=7wRqD2%${W>4Lw0T30Dz%zE7=DQM3!zjR{>DP3UqYEH<{CE>A8v!eV{G%CzaLaQ7vu@%8oNfc%Ih z$!2uo=&ZK9B}?NP@H2NoW78ZZBiGgQF)ec|O`Wuw2v46)gKD~Ww)*^c{7#U4!;i<0 zf!+f(x1#}S-QqEqUl3oE1;y|A;Yh$v#OuYurwV}0w=TH9HnZqVZD!^GQ1_J&96sk< zMFJqv#UEq?)(5r@HU`z@|H0P3X4rNID}A3{1nhWx*ziCsTCUbQRLnwiyU+^|dlvqy z|K3UBq5y$sJ~RAcO1GPPF0Ac`{a&!kdIkO-m4&j~>>=mRa!yxzuV!73FPLknfv35# z_{wmW=gZLH`NHzNqKV;me43A=%W%$N``NFi=&ll!kPL}+Dj9GniRNYl+HW3PISKd zwmlc~R5_7+GBwqi+;exRRrGdF*X0A)q7qf~&*$gl zn2M+U_9*3nU1_>trRjo|W{XyunT@MPH?DAG7{?0sazTDwnJt)QzQk)*`oltHZYtr^ zLF47|WzcTHQXmhQP&1;EqFeq!!h;9_0_PU~Y4>bF#HlPoKQ)Rap~SM7y9WXbNuv*! zSRGz6vv#Sm7t3Gb+}W9Q99QlR{2cg^;y6z$fKHl#h)-5PuCM0>{?S=U+^dnVQz8w4k+GW3q`uZZ!tv>=CF+B?X`T`!Y z#VI^itsOtCj$G*F+xO6o;tp_qyN3gO&}-S$uAx_>yyuSF7KA0(pyto;2uXPq+lJ!{?r3v>mF!WsZ7g>ZU>oy(6)w`azzu)jT@`&QzjJojbx8o367v zVYeut6CgKR@0>7P*&0q_Jx;Rn8=7uDC3$~9+U<`gogF_Qbi07i+(dzB!btAiJ$wP3 zxu4G7?7b4R_cDiqcKsi~vk{!ZaX&XJ{;+K|P^q+F*m2cJ`oiFL_krBS-GX&=dL0qP zqc0tDU~FwN(>^$Zi9YL1v=K8sSM%f=rxUsb!pXdY!zFQ27WD6Sg_?oIRS{k&mX0LyElT}2L_l|DINSiTKB5-S+3vQwhXGzC zD!+jLxQB$o3*bU|qo^YzFBl#)Y)ij#x04ysCS7K#W1likcZUW$!vkaZw<$G!iyNl`Lme?pj;YdSE>oyNOod6D(JC|6F6~G+z5ZYZWOUHG_U+ZX>zCIz zf1`I`mHAc7Dl?F*shjMQJO1{$jF&23AXRgWl}u&4sGJ_v$HoOHx`sAj`e+~#^bKVd zz&%suhjPO)p}j$;^P~8yY}~eOkHlT7^iC;10n1N2--Hx>bgXZih5{%EK7jH7p)A-1 zm#9#a1v?;>m5HcEw8Fe_PGMoPOF2;%T$U+PeN99oSSwZ0zb8269aIXjF3gBDj%|aL zs+bqnrPUp%{YpInRq4xot;&T4w9?0)nog1O*Z(AK%MnGlDi;XA%IIKIP!pBTBXrBM zV_KG7RlZE6N>y3aamXk}$Yqqq6;;$K=2vzrFNXHdIxO&+_HBxLPBpnRokW1wP4q?< ziq;RSb*pTUw$~M}k@wlUHEl@F&cy`=P4)tFO=(zGeWZGK)7f}WscJ!%Vuc3n6y$1E z&)*hpUs^_K|GGf4k}eUuqNqOzTlGKHxW8Q(qn3n*s@ebo*7RsPs8ki$s3nRy2QSwK~Dw=ce!UrAGS9$A=6jiOcrK+*23Kph)t{`C`=)M41&1<0-ikWQh zXtFXWWPsifXycE3sfMdV9GA0Zy*rAFK&yn0g5b|u%j2?>gVr|5H&w@;ny=+(%_OnrU}W>puNeC8@He1VwnY+|09r8}ay7|Y&qq2SvVShAHVP7CQ>?O5bh z=btnSt$)BK^5sr$1Hwr<=jEAFR-6b2KGZ*dhIysaUU8-pOFc0Hh6vr0rk&|P95wR1Rs33UWLZSbwoA2RLLF=4OISx`cnfX_7FLxjd4*QS2-F^n!xqd|9ku0jpIT4GLT@q}$)NdlN)N3Lzuqxw0xdp+sVBY#O zmKnjFj^3Sl--w7>oAgD1WdCsc?aSB5;i?dA7BQLS=*F5!=KV%<+M#)G6HXb%4rg`*V~5nu#c#~~e>4QUI26sbT$GR5E z*;Uq;vLw5ol?x_Wnv`>@0lTEYimjQ)VEdx!wHi}vdaczMY&c_mjU%?m?~JL^0@wT{ z4M-V5*&cN!e)WZsp1usw38(9$w@w{%Q;!;r9*A(2R5p_dR8#Z6uQ28eIs81 zYYBe($<;F5NFA=BS#Y&9=DbYj6S1aTqPt)k?P#CzrF&yCY4dz+>zl#lk+kK%o^b5~ z1-C7|`oV$#9>X3?laV*ZwRW3FND|a;=LvGR(`Oiw*d0N04M77H%G!zl-*eux{^oMm z#HiPA{%j|?Ku_k4pVzuYdUBWgL`bKVkc^KVz^3TS@`Q&|WP|0Kg`X)O)K99jw&j=w z6?=7viIF{DRE{I`9hmAF|~+mAYZ0tje^evp?T zhUFMI{{hHM)~E0Gd`t5;dKc^2es?^s>h;Hfb;M_*!*?>u)(Vpc?_ITZs!1o)5kU3o zb3L;SIB8U1VR$;Bxrm`o?6sHcSo2vtn$=m?{o5&t$3kS%YJNKHC#d5Ed=>j`=Q>#; z6Y9jcP$#i7>O|)fX6c9|EeEHob1M0J2h8XIGId7ZD~^DC{pOpi@1FmaTy8aXo0{%3 zU1Rie6w0k01QFu~foSX0e{avTy1ah;(&>s|OMjzF7Xl+TKR&Ct5gXTV`! z%Cwnhn$HF{J-*7@N1#S5lj#^!ZD1iMo#%CK*sP#0a+Jqf<*YVTc}%48XuCIkGVkPC z0H@R=4S^=$-KsD0(s0}vI%MLX>5OO+fO&DTK&%&Nbxq~~)CN&yCN5PQOLZm(pe{py z4nS?J)pYa}HC6wtr{RLLF8!i33r5I0U`5D-`6`I*g<38UdF+a{7R-SXqIx`fuhmgeOW;sTMfptb(k>&WFkwpt&PMF^KR5 zm7v`3qNy=yb<)*WbK{07Mz4Wzpz;-%&{B5`H~{U?8SS-O;ytN#Y2q}_Q4`K~cWDsp zC3QqSoo<65lWauR*8^D}FOcoBLJZ?*0Ah1Cw1DlFZJd@y|6fDdbfQ z&in^Nsfw^kK@<78q=``9opP}^I+1iDkD-yFyRr}To#4mmCjfmn7AK}NC8!UG7?|NG z&A0JrKa8dx+%vJgXGpTa&KjQLlF-=*TA-_}Q1h{q6bg6DR-Wlo~3y-o(+Lm^Nm!~06$7>XwT*g<2m zRHx%(O=4nOY}`FLa6PmbB4`r7JFrQOP335X&J@ygR;Eo&LH*3+ank&ZCiP!i4HhfX zQ%v$W|H&Q8W+A0!)`^P1bP8#c`7PxJRKV{=8cF>BNG)xDIoJ0Cv17-^rQJ}5^zM1Atpr{-Q7 zT(Rz-czQWCcir9C#ps-W`uGc`reB%q*Z z*N#kVR9mT%S59Ld4i2o<;qSMv*zt#F7WCpfS)whanohje*#6DK;Q)}c+KGSM1?))D zkQlUa3fi5Caepq0MUVGl^qPMTB|DqjX1D)%cJ7KrF-jHbk?i{hQHG}dh7C4ID4mj5 zn>Ye%*jQ9GeIagY`xbw?NMq_4BU*dwWPdl9AX_=9UT%FG2^Tc}WZ1?e!)Do-(!-Pf zO`Ng*O${6VPe;!x;BemGJWsxcj*XJ=WQ zGN`lS&e+?dNkVPZ4_>5YzX=Vt!!tj4aLg{y)`qPqu$&=rYYHrf}*jS--Y2dqUXq8T%sWwSHA*nW*y?lra7W=2!6tIdm59`xvFL?T43yEY> zI73;A_!vS_s#h1RT984qy4$Vd%sG+g5*CMKj#K)c+r=#41hj#t&nw!%_1KNn4zfE^ zi*VDX3wAE`N#!=1^~SZ>uX^%UZ8HOGGm^AExq`tpHAt9+eO8IwkSn;`8e=fnA67eA zj&>jS(jK$h4ci{M4Lxjj2NKb+tH@`oWm^Q3o#|am#N1eF z--t8g87bRz*nB~UiPpqJCv%uu(~&PMN4b2Ea+}$d+qU%kyV}z0?`lhLSiLP9&By6T z$>`)H2aNoc?w!-Ht+_&gd7-`JdbR!G7@WO*`}SN{+k%htqtxsrGt*n`3uO39IRH{% zWj(&mbq#8$!aAK;bFXq-LDD~Rp77Pb^n6vJ|9mOSdHQ_ml;xT8g^eR-&ezY*Wgr0^ zm3)U@8&IRM>*zfve^hDAX0<(&6&6F$j_Lzjpo+27Cs)}l(nX8S`=;e;ZICXa5xF`@ zZOUS+M#$*yWC?RyTT5xGI0up{g~_^RhxJE^>VTw@`ov1r%^FAy$(Dlf5aI>KAy2{Y z)eNw%#Fki)4U75!Caj7EYi)%*fp4KNi^>`o9Dm02MuYSJa)00u4G?p9`SvToO}yu< z<%i?BdMen z{yRBA*urB*OG1?4QLlK*2Vy97Q;p7uJ|m}h>F&WfB!AjP%T|8pYH4;3ss98tCT%z& z(!g=>x6J|_$#??BeeY_BuTZB&h~TgnnN0piw$Zo|qEB@r^lpkVk#t67lGq$IX8@xi zP=D}|gmEI1;tQk}Pknkk_uIy;7eJ})=5@->uTysAwCv;I;0)weUyzpjr0nBpXV1t! zDKAV;i8@5uJ!i^F#N96LO=u9cI!W9d=#r=L{628^L7Uax{VDixSe;bWpd+YMTV4yn z2Ih<|dU2mpbJ%lX^0beFm)gP6F!?%_QM+M32z?SHrL4KZ^k4IU4hkK0TJCyvItg=0 zFA4-|A9iP2kB}#cm`7*p)f()r)qe|a{lho!uD`o_eJ<5ZU{~eq1ZT|Z?oKx+Hn2eO za&oLVxHkY6AaXUmI4^S2IGcwi4I%EQ&1E@`nFZTLaYI$(5ub}lwT ze7dm?H>uj=m_lBX{=+4&5}hLpc#Q8W7jY9p49{>=;*l9PmT5Glz-UQFL911>5^6PM z(A#@O0fbxxT7Lnwp08dSq41eWLf9&*Lv5xQDU|6Jj{j#PN%PXIGfsb9i4@@cz4Dfu zbbw^^O6#J&#LWwoxIFP|HQXeFC!@PR`Fwqp^qsi>;RJx7Aa=zXBa&3iQ@_T-F=2cP z&zqySWE4bu8L=^$TwFoDUIY=2F=Y#*H9bCR{2~Q!I8VR#h-ZyY$K$zQ?cjOp)A4xj ztCiu{XlGK#Tf!%W=EHbYyZ--&^5|2k9g@-F30~;)7>}lX`{rqYe2h}>2C(ipptl5k zvp;=Qfh?gEeBP{gTmHE z%gh4h1473@YHx>9Ile1akn|DxYw!f$jS>gTup7rmkW(#Ay7)IpP=kLp1NhIY*^Xs= z-~q}fJU~}}d3iG#Ip&r2@$=4&9Ctc${QY*LV#oMAljCyr`pxgY|Mr?ZN~2{&%<&b5 z84gg}5@+4wOc!(>s)J+$R^k`wGm^Hty1#_((lCh_Dy}NPA6HPus242oq;O1&r%iVq zsmx0M)|n=rA#Hq_QU%D73txVTKH2(Vv)9Y{t!#TB7Wl9welNbDqYbNv*oEPoz&*RDOcOH;hWl3HW!%v9L@feUJ1@JngvI# z4e>FgQR#3YVv@)IrYn(uzyr`Om@(EjXJp1s{~+Ejm@xtrXJp24IGC~4Ol85B(CS{k z1;z9~RBVy8GLKDd0z{>>5oou7`&BiYEk4zAjq`c)r(3|#oplx1<(7lh%B$jO(7zVR z!tsF%^o`Ek@smlTU1-`dMrN$Y%c;Mb+8xZ18xD`7tTw{juq$IAXe^lK8L zXtQ5Scyt}~Jc4nl+y%SsmNy`-$1u_GmIr69oEBX5f4F-7&DFb$;N`ckuWrPK-d?}_ zk1L0>@iywfss@WIPhC48$xC8!byzt)$-iARi^tc=vT1oyH$;~(E}kw9KS7u1;&hoV zA?Wk;%t7owm(A1gIsRL!GuiOt3PzXoSu1DbDLu0aMwf)YP{Gjpg?&&uuU>SCPNYrB zPf;&M#N|+4bctUkcWI~_=`z~>)$&pL2}114r!JE}hL%hU=?g0Bcd`TxoPyAoA%MmV zYtG(t6y06AfB{m!fXn15;`9_HBd182kWCMdi+DP_Y{7hpfj1%rjWCN+S;labGKE8# z!xl0xln_EOLJteX)8vIGMV=60AKg3@OSRnVit7vlaukjFCZ+{)@6=$5hm>?OYqFoj zc%iy=NcUJkgM!@x3dH6E0%_6rSD;2e)3Z>8Y?ZK!DbT3ioC06aL_sS??@_^XRL zY&bg&DbO{3sO!!ET+KiVbOzvR4pN|N5E6J)o_2jte34_$S=ah0-y)>Zqyw~TXCZMX zr(k}>XHe(&2>us@_x`Y}!KTN@H@>Jzr_8y!tQ~WtNSz*09R^HYi=3>4djm9`vc@`i zm6eZ!S9LneJ0*1!X*39Rmbvvg$#CN$oB}*K3lMudMC_deD(L)(z2fFEIsTJC1!9aR zv@b>&PH9FkIMZ;TG8YpnbDw1n{6}G6f!_!DM!d|&H)$9dzR6v_$(?mY9=;JHe0(E@ z7{19}zRCMn>-gG0Wdp6&Ci|zMY9%xKRu!icZ*^c{#9KqUK(uzI-u5~oFlh{zj~aN_&F;zoRzwqMe`WNC@*KF ze$Gk_XQeJxiva|9Z&hPFmHBruGrO4ec&emJ%ltf*d3h@L&nCCCae2y_jV=;(x^sJY zit0Zoo9FQcK@;(dQj4xT1$8CHEa=QBMtO2|#R#l?8C9IBe%@gj_94~!Oe0RhksO86 zze6gYR~&`1cRA;D#b|d-9);3>>Xcp4!K>WM*?E;N2o-nPGG^%UzzFE#w=etHi$Ggn zvb7jvw8^Nq&4n4k!r2WRKrWQAy)pY+*PIS(vUM!=(o?0qimhwhtxFw&jp3Tft*iZ9 zQk!$!xLfDG%9M*n3-1O;sq%wP0zv%;7~4orfli7cUd>F5@pU&8Lp;fOY1oFkz#t#N zB}zj+;E!yYKOPQuggsh6d$fi@h`+53B9N zp3sB)#ZPB0{klgFhc`O!rQi84{mxwab&nqURdQ9QmD{mix1c>gLr3YC$`5MBtoG-Z z{lDzquRkJwJP_08-VtMr(KzK86+?`4OsJzivxNaNzpc4vFki8bCm8bG*0+$eW}oEs zH>FX8n2_TET`|HF@)aXY%?VAPu`^a~0Qmlc&LkHZPYIdL$v%Ng)6V`1cC)^J0fHoDhzAJ@xmG^6lfXZ^&Hi z*)L$bCbcSXazn?D-0k?G5o1h@j(9=ED*P8fWLisxlp2mei;}q*QyQfMj;gJAcX>&C zPS_^(vrTH)hK;aITH>$;Y$Ip%>gv^tw|`Y<8jkcuVE*Zl@uIgcMr;ugl=|=J2ov|F zX)F6sMx_&P$}!#~KA($QijOsp4v`0GUmhqNov_Sn3c>}y22VD8(c@_z~LL$R4nAB+&Ti z0!1HnS1=}9FUUR)54wBgX(u1cWLD6T|NTJ%JZ>LgVnaAAw?@%ID-GfAZ62KNH}gQ!6j8Du?Sr+bn0#29a10x@O*vYr?<+m}ENDUI$whUzuF7%lL| z8w!8}5ud+6MwLGIp%}8@I9BuS!+(ZxDwEr914Z`Aou-ik$E68%d5JQn^2P$h7_)`c z#o^M1nFN=v=_R-z%d!Q#!0axJ_DlO26+S_))vY+9;$pr(?Y3*`Mz#`^E!eU;^sY{a zW%4#p5C~YV&a{0LLl)4n_S3O3ki)TklRPbW4>j6jB8b#Kb+J`)8kL!x*Ro=Dcj$YZ zqGkbQT0dnp>}gu5`L2iaHC1j9QIPY!A4G}7pvE&@zCdR2)H_|>)G)2`-gNCoa^F-i z4~;7Qz55VNpNZhI=3nSIN%^-2gDal1fU8XU*(7{z8f)y*8UBs^O$Ei6(*LH$!@sc( zMa=VWtP7bYcOmvS1{7obl+my!)BGF9sh@x2*mK-se<$}eHl5sOrkkWb{*4pgR4_$p znt$Weq>a)521Q={LMTaybb36l0G-s7IPVUtyVaJhWl!OTJpjP=+qZ9J8qJ9vuw_;a z%ASD;TS0Ht4oZf=Wd)CduRvkp9h7WKjqK%Hp%S(S0@D3{#l&AS`5J$e$|iRBjs})nT^Ieg9*y_WB4o$N3%wT#`DY9FTVT!o2y&kTbfxG zm=4}DB@fWz<-s_UPz3PLub#j7V~0LWU*C>-z5aeX&g1KOjgBM3Q!skz%-c)ra8%>Vjh>zwzu%hWpJi{ zTW{}!FM~9+dxjV=Yl0bvx$=GhsGJ^D4vy}sxA5c?*7r>IQ0eV+uOIVZoYSiQ9(>`^u&CdA=>RC z!L@j*n%n%OYf_czT}3q0JF{wTvxv6t`kHYJTXA<8#Le_m7CuVIiEYr1VfAs#JNB?X zeNDb^AqiEH8Uqkmxar|yla1Ld{n{m<1r0{(h!>o#JXyPR`vP>Q|1SS3*)blNf3zs%@&;S7aOnG?^^66=RGJIR?U)CW9VJ zbvU6zs@O%a5p#G<>Kw$c{o)#0M*HgdU*5dE0q_N+giHpEAScMOdnU{zR4%%7rkqxM zTrMwx5u=Ss<=`9S4rr)M-{vG3 zF&*@pFjbObVGxo?A63VvR*nldNEdSpFG}P?a){kk6&8PZqK;3TV2C&FcZUC zIqX!qnG6W4^0Qsn!SD6zM33|JmAH%laQo)lZ;iDn_V(;d*ZYyEGQ^ajji=h);Mp^P zbi&1!3wYE3m4;c*)QCeIq8;mPSi62-+?`T;hO4OOy2S0R=8C$+$Enw3PAa2Mm*&KR z`4vyakCa2@DfG{RQ*kbTN77V&k4nPk=gbz&8Dm~$O6Hv4oNdhf1zR@{(y@8q4PU+I zI?DYh_(me49`6sU?GL7Lp!rq}9i3!DhNDnNKVoG3=RnNheijU1arn>K?31U>_gWhauGVsUN zDTdRN1u2jTra(?MsuN=jrq^6JJ!#Da$f@9QUe=mG@eqY@dMWBMTWv|3CNWq_xddKD zTQFT(9ecnpZgWQ()UxyQ$3hZ=TQS|+QH)tYcnL`WIU$GrGpj=b=9v?=$+40SvAw=Qw=h@Jtw+-n)h}4x*4ki&@E)o&J+jss0vVF z(0+1wd1|ena>q>K0`?e2l)0VG=C1z!+_+l-vi1z{KW_d%iieT z1nm14Z*Twn^7ZZYi|5~6nW6t!G6(TTl)h;mdU+>bQt_1LMxUO_qe$~Pw4^jG{4-fp zdzBU@Wo9ZvA}y4RPi@9QZ3@*|I0?h9p)@$-5$YdFQMYfIM-6`Ph9XEjW3dvpS z-{b+u9X8Ntcl-!Gj`je(ge4+;?|Z5ljLO+3&rsR>!G{Cev%~IT+m6A=5z+UQ)=Sco zpZ37+U?vQ-HftYbk^kIfk-5I8)$Wu)W|99g%3^yNk@Vk{iCx* zBumIwg-R`GmaZ~ONy4i+$FX5&4f#tFWlCMxsSL}iVa;0r=9Su;m)XCWtY=V2utE^0yHREC99)76t1 z0?wuGwTG$LSvwol$`*uCGKBxGLu>w|PD%^r|ItE97c41T5NXM{w}3L^jaM(y-L|Kp zk}^LQoEYQZ>k&uMBmkXwpr6*ciKIT`XV*<6#{l2V5 zcsLwXJ0zih$?9=!UCp-~Q{v=sI<276k7{Xoynt@8;RWi%jhv#F9MQSQwU*hP4hFRn z?u3H|{ueVM@PLNE7HFdxLFuJ7MCqcDb(clDQ7+HS%& zOK?{FtmMyl%MJ3k*p#soImj;OZg#nI5&zn8M_K8S`&FwvZ@f}>0Te`zP!OZ=U7t$h zLOFc}zoN#8q0@QN^slASmlQ8$E5O~@A*TX|)!uGC3ia2x74m%xuFB_`;b z*a9AA#?C36H<60wf8bD4Z9l6Z0w$gQUPn^#J9;p4QXYF;1 z<~m+Bt$XJSKm&6F3O=X5Ha-C5yeT!@UpcD34&eTHHtGNvsI7|B$U6&+xxDogxAhaZ z^%8f1J(u%&4OopyM{1g8D2AM`K?R*EDdp1=mu$l+!q(S;Mp3#@F3sTITA5GY)L#ex z_T%R|_f#EP<3rsC=LDiy{A<; z1?C9%;dJ#WLtLm@gTc;v`PSsHVKd~@PW|;gU(>ouv4qQKtG&*5w;_Mq!3HzL)d?X> zGe-M#f_M?mdgzPLdpwG;^u$Ao&|B|XMDx=?OV!z=(pd>wsv(INJGZxC(3Lq0k|`AT z2?`$H3OyC6R~WN)CIh-KeTbvZVGMex3*Co!0;8>n{pDmutjft)o>2fh_!TO-^d+MZt;-C|{KWBZM!S^}T9Sl(JoO%S!Z5LCIRNo4K+Q(f3^cBZ0Jb!G*nEQ78 zkbhjYcE{ll28^*H72P_kt2^%JS3J6W^A_s0RC6^Q zA6-dHXx&1@`;ObTj$&4gf95G(!NXn_SoK$=Mkg9;=bILThzsZAeM7ND>V`2CH7( z+gwEG=-D|mgRWV<{un^Mqp<2$hvTV-oLTt$QHe2_Zb8O4s(O)OIB9fogB(rX z^q~S|XSsekVu8WNndxOF)HK!fM+~v}pp)&}0;h0PmJ^F#WOz~1thtAq&Qeb19(rUz zo_Q zJx-4fVopSZO5?8Ix!(Er*p9l`CNdhKU!!1^1=wKzhS%^5oe9XkMGiB9x5 z@%8$ggqP*NAldcR%ijt8=*5|M{F{fB^Vl(+kYt z7VkyVx4?#3lR3;qooYLgkJ*Vu*O&8MhG_%Eg79QfYad!fOUs=Sm!k2{Qro-J#$T}@ zMYO;a(aN!`ouk!;9?QCD4aG)*^d~8%?gLVP^pw^g2{rEQVSALN=a3PPN3312uGUXu z?x!*L(wHxp3paDA90Qxk6pGaPH2A+~*c;_12o~FaeslF5fOH`xI=`E$z-(0#H%{ER zaiK8tp*lGvXbzWoi34;xej(Fpg=N@hfpXqlD;Gp5OKe0u5m<&}4+be)?@snhM(c4N z98*KEjEv$o);3do+}FB0g1K?G0|10OX8EsF#al^}grpmC+4i53>W7#c+@d~}s^wLf z5n`zcefF!Lag1_N5P}}}7o9{sq^V!lbZ!4pi(IF3pg7UYl*-kaMcCNq?>Jgam3;taeWWQkyKNg`mqydXm9 zjA+aVd{O5TAvH>{4J)Qjz3LXMNyNE1$ucbMr#hTYsybdsGmL}2X9rm`A0b0v-s7Y! zDoxsB96A;~6=|ggmnck8Geb;PGa~Z}z0#mZ#1w=oa!jEz^SM?^)lWCf+OWW>IC(-P z>32))m6T+f&4hq(Cb^$-hA-(aK7ywHs}@*$XVK+0cGLs8Bi9c zXFxmBGax~xFP62Muxi~kM7O^>a2e$`S)(#zPg2!YtrUr$zyAHz_0`REIOzgs<4wOQ z%UMgTEd3jZ@h_UT>~g;CZ&mbkVWe*r`gm5wwCXr)8j`?z8KrTV(U+ORtC=L$veG3l zZk-}sIDt3ErzHK7mr|MmB?l>v$*@ufN#X+U=Tc_=$x#%ZMkP|vVcs&-62m^UA)XWZ zD{KFb)!xk55|i}eQaP0Fh(pN?YRt_&ik4LxWL4)}N~jwBb^lCNPzdfo3m=xy88lvc zAV!{J-gkrh5i*QJoLlRkTkEG{YxH-Xg_4Tvlg*Y!QOjpNSKg^||5UjqW5g*cVT52V zC7-3Eyf(j(z9F5H@tI4XBTw{fazvs25)Z z3QI`*(uiL`-;~B81`dxq+35<3+lUTbf%YzS=(4XvV}W3m7(1dMI&@4muszp1=<(1O33+lqodhX^bwb)-~OdtEJk`Di<1EbK4DTq;M zRCe*B1NT9o!J=QQJB&QlPC1B-3Q+OyY+2Wrq$9+I(>z$ zmZr11t87V4eT5N%xQD}ye4Qay$e5B_<)y>hLi!|D!_`JCM$jwOU3S!j)dRHmIifi) z6=eUrFR6+5Ie5PQz&-|`K)<@aHit<3AAp;yc5X-N1RSpysZ0oACcIo>2w|#Tq%ze* z(P#&us%-`<=~u=JRucbx8ra~t#Ckl6Bfdk^ppunFa4@U~Bkg%GDy8%%Nl}p)i~Lnx z8seGHa4gDc3^#)>r(eM%I9Aa5s6zY$YF{AEEPS+QhYgARe{t6Ag*_XdTU17Iw_aai zfpdijaMK~Js?_*ZReB3b%QBVSVj?vzovAY) z!a&7lYr`w%kD6A@o}wO#pBaJngpUA8j{tW4cHL-s%uESQkFbYCli&zbZcC__^r+W( zr>)XnQk+|3eBcrFp&}y~XZ)zQLp>45;5=~wgJM-s)X!kS5te3SVPQ3<97*r0csP)7 zX&=tXrG~v8TAg5Jm#Y%2oCV8Vji*5rjy8@2mHp=BtE=mq=dVcji|?8o0x0;2+;Ep*IE6#KX3>c{pMub&#=%Ner38@R4IgeuXMPuDEds9 zD2@A|#C?!-x`+okQ!g?Iu41t~i~KWE$yyyeh?bIMPC%H&-uN|(b^N-j+_DT4zy28q zPJq`lm7+CuCK#FmQyk9{6H|zKOox+9CSwXL)s6_$Y-y6~2W^=Hbq35AXJZR2HL-=d ze=yKr!BP`jNNH>#r%O$Z(UXwFEB-##Wj`?D<;O_&XF8w)Y?{m;x3J1#xe#Nv$fu z4YA#W$%&ZE7 zxC29kfP!YXIIeBxhX`ODPM4F4(+uy zQGcc$eR_1dzioG22X|B!Jb4nNCN1+dKfQ$=KyAJDmsQlE3H78@2B79#TfDe&y!@>L zlaEWTBd;W^BO{d&a!D?k0NZZ~s4981SF+Uzq>Nyo>e2m;IzDWiN5}qI$7a@5=sdcA zcol*sd9;7lSg2pQv$i~7u3lSxQ_n(){fwh#t>ZfJS;uwavySW3XC2q+q;*`U+B!aP zA@sKGv#%#K)6?n#ja4|nfjDZtzli^+zo@W)imlMc>26lyS+Y|Pu_fx%7}@**H5BU1#H|`)OQfYU#MoX<&z4A$T$w4^DX1;sR0h>jw}%)@PGc-7b&l66 z?Y{;I_=-98#u0(Y>(CEnr4osC6oE**-1H;pl>!beFvA5K^9K0`gM_GOGs1uyp{|O5 zYMFa%4(!z2yOl&ILRWuvSB;^GVk|UKn<55%G=z>^_WLm?yu(_ebDjN$n3C!qRsluR zrNfF2gNimgIj?mxT6zmfY77BP&$Tj^D$PN48gbN> z4>!2R!gUtGo~}>so;KxRPccEGMk8WosVwy_)!!ksX6ACIJ&N3IsTWM9_D`nvPX<$n zrs>}Ja@Xr-thBjqngO{nt*CB1wrh=^d#BJbq9}T@>wqCae#Uvl|BQ(W8 zZbfk)4pBwjaf+H2Km$!C(hjiSYBGRclYh8+{>|09iy%*}Sd;M&q0dH6lgT{A&l}TY zvLSvN6Huzb*je0TvPP?BrcO`RKlVK}HFofv4hYqzgJ;9Xu7)lih>?VkxN5Lp>q+?) zB7J%N(Qv>qxMzY71mCH!s$elmVap9&IOq4TiS0DyuG-jcYEDf#ZLC&zekB=^v?r^) zoB8U6CQQAAZ!m#srZXGT`3rGa0sdHfv4Uo|JqhjPXhEn|ze`zy4>&}iW=Oni@(4Xr zonx(dfItx!ym`VXF16N2#$A?YXS$c4q(1EFm;D-SyJUZWvWdLdMvbYVCmB67UBmob z2K|Zb-mgENpFgID#>^fU`2^T#|AWwFw)HKD2>V+9X=)Cw4WJ~YX8r4 zTfZjO2u5KNs{*PA0%6o7gG1YmLuQgZbUpUcD7^dAA$ZsdM(NhO5C3OtQ`4Kc@uj9W zU@<~!dL56Xrei%ulcbAM(*si8s#{5#?E+Zji(z@ca$njhCsJOQj^8{d$2qY!jv;y9 z#%Zvs!){C3-A2^Z8>`*z||AC9zEe0|G1Gfx1ZB({6Ki zTAe?}`?4vF_S6%UWFf^O&Ed=lJcFI^^6kxA)2Hn1`*dIeH^l-;Sa>BNT5KgvWpp>R zT$0Mzl$gpG{eRrOYjfO2mL~kUH=_Ro?2YLr)s&1o5|*q9S)$vFmPD;cySry+UIvgz zkhLyWmFpr|+wJ}Bo7a;kQ3)hyduAhE?T*@|$^!Cw@?4(toFUf)fi{q_<5eZ=BmF&b z$+ckPYj*)Ne!0Z zXyv;IQ9u|f3M*Ng8JZ55iKAQ;R2SnJ$@!seJfAY+9@WJL-zc4d1fy-x_ih#3*un;d zU;J{Q&C+%bp2@4QLYE<@d!ozKpa~lXO$Zko4Jw&G(YsqyyjO--&P>sTo%&>;sJ37B z{=piwb4LNptiXW7)H&M_Txu}xG<77HN!^}&mvJ!^PDsa*`T+2ncn&jRQ*TU1HJQ;J zX3&C-gBEnhW#dQwaMy%jhDXfU(U4~{Duiv-piv>*DPt!fggeL?85hD`Y))9?6T)3~ zEb^E`iQ{b6-Tuk$Mg&*wj@?rDr^AgbZ1@yj9p1Ga*dC+#QythIwPSk_=P}`3(j{io z4kNhsRcUz7cB$F3quFL%I-@sGP{yfS>5eK31izyri2eJkYsJ4L33ZhMw386=i?6My z>@ur#`rSZX2HSX$s*pnq$d&SWF{X4k_2-z4=KXFTWTWZwI0Uil6vI_Z2;NhVtI{c} z*5#pWsxA-00=q)P0twy>_*J$fuC(ZKm1%CfPs5KXLm>6el(yt^ITThY#GJcQ+0Ugd`{wd= zbmffB=%~tgb-B*a7H2(Eow+;C{OzhxU#b~>A*L_opf7fQNgj9)nIS2Nky|C&V@N~N zdqu$$)Ly|{gdISs3g;cz|JG?N)zn@ADAm+sXlSo!Vx_=dX+rbX%;=0(a3}VPDU>p~ zSK3ft+8KRmX>hOTFv$3O0LL`3S3vpnWp~=Wg7GE-2xy_<8gBAsB%ta_!{*I|gR@;Y za(ISH+NrGTQ5Z_snX7aJhT@bWvxz72Gi-0AuTI@%9i8$VcQX{#4ir^yfyMcif;&)W z$5FMNiVuX8zdk6J`^n&I*U#umKc_1!4oPJet3xze^OI>cb)>IshAPP*vw5Ueuu}vV z%v6?yj}=Rd679$EnEU-3&;1TjJRs{mi`quGq1KYgR~j08+Xw)J!6$rN?CIT!axmCF z1arF?IJ$X12lfEWq(M4m)MpR$$#L+h6OL@n+AJ7WbECvjJ`Cgi_|p6%_H`fAE2A$J zz48g>RaT*aN2mM6Q9wh+5gs3fIpAQi89Fyh%@h(hk;QerM8~|zD<5z29`hx$aPdc$ z0R~|#$i=ehW02VaV7D$lvJ5Iej#3$GKVu)Q58G(>X}4$hf80f)9%1z6#Y+fQ30lC# zF1lrntl%nW1%WOQJxW#N5Z|C5>-g4|QMUNN_qz6Hnu4)1B)ne_9@BKPK%)4eJvI9F z5e#11s3U8X9Ua#&>?HYs~1uPFa3RoWU=Q0UNi&m@7E@)bgbGfh2V z&_h@mcG#Ea0J<=paRcoyM#^mY9_juKyYRw+dLO11OHmee+4ynUbT_``?UF z+!tH|FqjWPyW;N9i8)1^bhBOW-G6bm?Nf!=U>{`w(#~u(V`ia9%;*-a%)E}JS1@5~ ziS)uUcZJ$u6HjwgF*4)Gk>HV&wpJY5?oz;^*8Pz0*CL@j}2FBDxZ)-aBCiLgc z`I|SF-=Ckr@}G$d>_eBVPF6(OO!U{D z$YOXR+vx>wb>O#h1HY9H{ED$YcP{l|eYgvCM@cP)-(Zbouy}QO6*c?403h?jx%w2n zzqWJ#ULaSf~bU|f&GBOZ*`-5pbv49Y*84bQOgT(WfEAQjud&lyD zv2MmDGQ?yPePBTV0ArBw@t|)0;{BoDI%9k+Jib0WKEo|GQKp0G6rzzb9jvFpQ`N`u z%rYI`&E3ZaB3sVf+z&cg`W@;3xuZmw+CH8!&g9pPGs!)H`_Xaw9%FQ}(dt0_4>xt2 z!*c&6`hB3nQS{T22W zIZoX_wW&k>3>tzyOheFzX$bl-4M9JbhQKl^sQs>3(-cW8Fd%Ov0^)0x`)*U;_sFNx z7drPnEpYC80?AB$F+cgehgj1Hnpox73<1@B8T704rtqde^}VkK8%3N7YoM9rJ9qA+ z4lrI3txYcyaBzK@)42 zS?dB{YJHeDxQF7IW5!(%X4%9;AQ0=#omYCnee)BaAcfkwd2@9Ivq8eWRB$nxl$}F- znwM~d!D4GLt-YW99|Mte;>FHT41Q)UsXk0S&_g~^>tvlGK7FJVsT^z=cbJr*Z_F-m z$~HR={=PAj-=WDbtdWUIkBESfBunR3jUsiudVhWW^^2=>!5Sfoq2cN?!eO`<|DY`- z^BC~}CQ2tad-f!XuGl_ObnD{x@;CAwx|Xo|=2m1gzynybTd$gS$z+U5R4(?H12&;_ z%kuu!px<^f!<$H3qXL8N6fMQUHAEioyzA9BudhW?cM2~I^C$GJVLdMKu7!AEZ%UM; z_y7Y3yy}n?`I75?uwaJo{>0PCQvLl~@H0~`&cm$0cLM!24amk~G`2%0rV;qSv$J$qn%9yJ?!Fs|Yw?rfMj;C%K{ zXZL-6bbqvv;nuToHx1*npT4mNzUT3|=smpI1y>1d*@r0?`aV2=1|^rq9@gwy zwGtdB6Mm5Cj`AOeI?9{q8B85A6@KWU!PFdT2`Yu0kyUiPx)t(oy)xO)kE8eBynLJ% zBsq&Vw^9BCOD<8rmVR7y{16L)=-z%}fWaXcmbA{ntERP4V0jCD2P7?)Bryaxb?ooe zr7Ujqcah$3g#=#5mfSSgk|ufTT2{`FY(lje+K!70Zmit#U&@HG@>9xk2$4t$jP4e< zchPRS{`gqcMo`Vy%MNZ@-v7|CFJfg!35BRrlW>r;fTGyEjaC8@il-sLYY8MM8+9Q= zD$@p51mcjRQFY#i2GldII~qBKY2pwag;86%z7DU>ruOsC&}xdmn|~eP@8+gJfWMo! z2=I6F7GwO~{3~t4cH8ylVK$xkg^!tAun(~9*4lOAB_X@6h>JL2*YPHKz^>y>NWiY+ zO^n;bTf9a#DGlqkRnrQe=?5(1kx-{x20H9jgFO?h&BB|6$O3qi5LrMGBdcYilnj?| zS2y3j`2PI;%kN)Z{r#<}(IaX}bG-x}7Vb4r9JsI`+#|T5yWtI!nKs1SFFy2i5jSYB z^1G!Ra?YXND~0gt=H=_ltMgYd|H0BKya@sG7HghPO2LWX7(I<_bsI-85WB&UU(R_+ z9V_-~Qss{kRe39OxsE_|`2vK{ zz`RMWAi7QEKy(MMYD_{Oiv%KRqGr=-}$%m_m?j(-~Ang zgy`D#r<=n@Y*RP_&cE_DXVQ;!CMEyVW7=Z#RHJOch02$kF4sGDf?Q#|v*9DusUuXx zjNp2;{G-}L@~O|!P25epJ3!yWTa3{+4Lkmzt60t81jDO%y1s(z zqbt~U&L|@#x`I<@4tk@F6zB?0ok{4;EnN&NU%*}88&;+kU%@E9-NPC56n`;;`jx-M zD5|5W#zhi`0)xECWPangE&$rAs{ybpi+CqlliZ?~RR~1!PM({BdAERf(hno@I@S${U-_W}g5%{(53u=2wBNrx*ix$03evF>s z2kUsBV;_j^)>-2qX@Uk*(inrOc8vp^c*n?Yb_(0^ znCZ{ZW(s0ZBs2gq;4K0W1KuJ4G2ku6AO=NZNE*2aU-6X;*Y{8jCou)$sao;vhKet^ zgp$q-Y@{YKZ(;mOBQ=qEi%GYV2Q8p<#QjvQY4c z#j_~qfB)%EnzKk$1I%UDG(8?BdQ=Y&kh91}xv{TWWM8EQzoYhmC|of#upZIPlx%>=S@V{yYltD?FLZo4&lpk*~Y1``U5_}KJS{Zu& zL5eBWoo`qls7!2`!KO6HP8h}+sj_(m+@om~RFzZU=t>5YP$2nECS8XqAt5nNXh@6; zm3>5vo1nlgGh!U;MNK4VU_=Vwa?SPPNH|`b6=+L}B}R#L^#Cl^u_Ukauq3ZT$V%QM zgsd#mCWNdMVtSz*eg`=^x6TBALayZ-bLAVR^}@#|g7X7UATuOnLp>g-)HrI@bowNu z=b}>kKB*L9}>r}G)Al=gD@$wcAxN47gO0c#I-w|<0 zk|Oxfm?TB&`sjOTSduCYJ;NR%EJ@pVuz3^ek)-@9*fagqbqyl2pTs$&sH~!2L}qau z5Rq9t8av61-65bW`^EiwhVf{cs#va-gIR1MCDl=l@DkdXNC`oak_^ki40QVnM@op( z#3;ShFj7MNCganA66=XRh)A6H+c>(N7CIKNYatjQDkV2RExIKG2<2bS&)>a#dmSl5 zK`=w{7k*eigT6_J_G6yp7zYp8N8&@81>B1bmKwEA69bh#A9hikT{&~?lawfDsOaA|8jG6{r>#L8wn^mHA{0Q;K=tP#hTkv5>qBXYl7R~ zJVEeOY}b_Sc7nP?q;Z}oWOuV%emce9t@~)BDfiKjg;aY?1#P%qY!!{(`8d8!Bzw2M zF=T_N=P>jeqRByz4L*D^7fuJR*7~QM5HHg1UAF{KjLkpA4*)iTIOV%+D6+ z!NL4)-bSPU%hKn$Duy?RWYBYn1%$s~z1lBU2lmvNkCi-%3+=CWj$=5fpSQ_F=MmV5 zy>#%XFVd-KeTsIKPHm6E%S3|9M1s!845-$eQow2MTgg3oH-(?!Fb~#(G85e>dhbda z6tc6DWPByj7xETCnxMqezZE67-(P9-8#WOvOsXMc)p{)}RFqXy{oRht5E2 z3Z=xpMbES21Y>OTnIt5hsY}&+E&#e@@?g z{oOYwC(?zpkg!PKT3_@+8S56iX0zcIlH#~KaJ~DEE1V)u&`Q3eEQTU4 z;-H?E8@nXI&c?)nP~=5`7MiyRYlL~J*WW<8@bW0MirB^T;9kGDc6xo0y^d zso3E-?^@o0_QnvCUwwUZb^hA!eK0~CFiYz628@sjN7ZrFXx>J7J|@{oc`I{_(gEeL zu~&1O<>6K3n&Zu#G`ZInRSR|Vv030+82k;wu@(!R!^!j(z9nv@NZ-B3geyZ#=cH6CSZdz77?Gy4~m(LNkTJtl9=czr;s1 zVD&P={yC_9V!uq46Jz~x#SqLM&xo@XzKZ^j+6>Uudd6OW^!(8Z;=GNtY=nyl7hQP_ zH-4>@B)<2glC(Njk`y)d2=^xcIuCagvgs>aV}cA$z2~UzRvpYp6Eui(W1S@F;HXy6 z-8TPCjw(cWCPoc4J|~VUol($&x5`6Dm6FM$+IuWn=64$nk1BitucH5@XI8?(!e_S2 z|KFe4ZpNm75-}5Jmc`R&mgS){%cl5p`PVeuQK$?GBlYd+8?T4zCA-!ET^_5^!8- z9;E-dvF!-6za;T9YVj{Tj9N2aqW;{jMYYe( zEmz;{+dM=1tztt(VxuBsvGXFe;e(N|Pmu<w?G!vpiL-%Ut~JuNSZ;U(7f#TfM(T$6mYa&#+&2V zc80=ZoXF*%&p8y$NC$N)P}L0H%=mB;uNyk|Y~|c;Wz$i97lNcOBypLz0~^<=jJo(U zwDr*1$uE>?HWrC5iaY@GE+B_~ELL9>GywB1%27B|VPZ|RSy8r>a(p)B?%zDi;@Nq-$iBJLSDr80BjoeR=|U2#1@Lmq)^vbfSP*)&lbuAii|mLg9g@Y zDk=-990A)DBV{Lm41NO9C*Sq8-fuDGUKXKqz=~pvNSG zA|#RDVj)3IS_nBp`M@5dMpRY^<>Nqj3Tos?iBUd|IHg9AltYvcOi4Elh*WKIjcvD~ z@xlp>D{-@BKi%(*$Wf(D_^l{MAHk!-;qt-;eoD0y*^fti-VkavUZ@#qoYfTfAA^Wo z0f4xPJ}@|SW29cZ%@j3vQS@}shm1lOAYL@l1zpr9PP_(iSq_KT*b(+x85L6q0=hox zP>y>)f_8cjg7$Gn0&`BonN)81KAgeHkH-CqA zNw9W~ES-M5UeI8Qb6Mo`7-n>9n-t_v=Q$cwVFp#r92D1u4E5@6Cj_5zf_)U$`MU49 zY{7g7$R zf0vOob}PIEV^UBOje-~)6s6UpyJELH?SU9CO)Ku+5LUO;rBVrTvASjD2otD9G!}y_ z%OIUpskje%@hYb@ZRG?Zg+Th#pMaEgcem*G(Q`EqFaGxaZ`W7fUVL*6np#=SIDf!; zfXTfa&u>|U64gtv>n2`AATH!Xai}KY%(#-!V1H|)<7CHdq@ZBb#{bfJFDp7cM@j6D zObk}ztKn+Ed97y*t~N**#NM0P)TgqUg@keV3p8q4lA=KXz6_HXlt5zO^tUQv3`Ht~ zBnD-e#GnKc11BR0z3NCLOZG@%ot=xz_|@fi*H$=7GJ_=N8i1X|LZ|@HfQF?vHT+;X zb)>gLcnOX3u<$;T-=@M1rL!+3xCosUmNuJQX0*UGEOR7FG*xO+d}|~Q{Z`qBeAcA~5^~$Vg1$KBa|zbocsie&&`0XXh^%UUIsZ>rVEu=g z#VQWZVij8%ZWU)|5~~%55>;mOpfQ4S z-Xwf{s@z=OqvUlJq|l5zcB*9syMpdYw%%I`HXHB@dR5t|2hv&MqxbgSbwi7 zGVEAOpku|1j+Np0D?t`cu(emEnL)2>Y`UZ6jE+|EG+TRBP0pd;V3r5!KY$-boj*8S zRagb9K-tCRN8S0Gq3u?n?M~E#e59&y{87~35HJN%;814fiF@y!HM@h3opN(bR{!Py z{uKRMR)~~U5f9s~XeTdBN$8;KTJZmp1`uk5em|(hv5O9?{bDKW{yvFbtyh2C3x`?T z3L{a#Cip|quemYuk%>6EKnhEDn1WSs#pHgYYpnQF=}t~UCQS52l%HDfN;ShUsKSOp z1%|h zbKqK)2@d6PJiIH*U$Zt1fV>_)VID(DZCrse7%G8qjGGzKrPY>Fii;h&T3FT2xYb$` z)Eg^Z-?PAaqk9`sHfd6$b#ojuM00Yj zY+Wq=>9A_xrQM8Sbw+W(3R;1UkgA)}cV=wk9?eeaSdgfwtjvGlds3zj8@H3HgudA6 zVjpMGZogK-Q|?}$G=p8cpg%a%&1Q^T8ys=M2Gbo6?g=i(Z$))l!6_x{siQAZv+qTD z;N(diJ&vw^SZrk4bfijgEL7F^tIM0Wmjb231=9O#gJe>|8q4;bDBwLUy+@0GirQKN zoa($v%RU(Sj0J^qpQGf;6(nShD?0$P!v(9Ia6qL%cC|Fd9m$xK88H_FG1Y5QuSN;n z`&Q0%emQrz5usMT!}xaLrof3gHXm2rnZt4i0*}Puy+nlF#jmwEvE$5n&(JtY9G-My za;=gU%gq?eJCewZya8L}7A7hoIuw$mVxn#tDm`D2^eC)bLeP^aLu~kDV>lA9!p6yx z`5!g4;_ok_l>eWPDv*T9n~Acs;?kJl%c19kq%$ToGrM@4aF8gvx4;EXG)uF;ZY}>> z&D{Vh3UilBhgM7lWWiS879XQ$H#diF@nN^fU?ET<(!@*)f3%oqQHKnE8BCQThPr^y ziLu`f!z+^%CYb0&F_I$#F0JVR=&ANW3QJz(x-=Rx+3*Xe_%5BxH9$j2W|(QDoUtvG zofa_kNg386NlD>Udx$8H28Rkgog8jd>`~0-Bma2AByOadHIy0l8G!_$iHRd~6kp#T1OO%nGr=>Zt@-fX2BJW z71gSevO>ji)w-04=tbYGx4coKs4)fgAd6I|&V)GGtarObyJTYlz<1~GuP&}^2+(na zZ&WV^u5c1AJ3|^B>1&)FT;(-ZB?u%8jk&@}xNr<K92d;3}u_5VF_j*LmHfU#T zgH~;WoZmiZ8;Fk@RSb_F06TlRI$v4mI+?-wMkqMLa_q{1uZ=IHA(kXFcg8!t^C<}r znbL>VL~@1;YCGw|z8%sT7Xge%Rf2U!CVy#Ot5RYPMX3 zzh@#Qe`|iQ-bNxgg%M8tU`bewfI=By)7S|U{9XRzB|J&Pv(<$+Jkw#OHg?Yzadb)+ z3NsNF3^Ng?!%S`Lo-N{BbVFFrGll9AKANvzUtE2A{t9~4&)5xMgN%Wv2$&%JuYtcB zx~>y_;w<$c1#3F=w&pG;jZ9||%f7H4LOaeGrkYsx7q2hAKewKpdPYR3j?L&tjkG#8 z!yh%$YCr^z8fkT66sECk!#Xh>FJ5x-x;cU^GU~yf={5T;LJRVf|St4OiAKJQBF>Y!`fv#E9A)YuPnKr`1~gyTCbi_T(eG%Vv0GIU9?`E z>0Hai;m;8GHiGbNwSmDACw&lu`cyL#pp&VUAw{^MA1nJ6nXh#>G+%Rg@ixJLLM7q8X-^2BM1xj&BX0shh!5jxa)P{*os ztz)&x;2yxf>^cwWSalw}a_U0sSZy-62Xa&%R{cRPK{-Fyd`86p)s4Gpq<>7(5bDzC zE2-3~bv#d@+WC@x8CjNPVJ3uBmpgM1snBwOFu{->*FXngE5AELN(B1U=kIl zqD?)+R;`V#nv__WIggR1s?g97rBn`-Qs@tI63gL4@ew0UCPMZ|#wN#+ixW9&Vcg0#!;~Z3Mri>(GB_(FnS@=N9x)NYwpRx2 z&_R^J*I_NXRwNTy-sTvzDn2T)r|0jvhvEfAVa0V7f-To|JO{R1*K<4vwal;zp&jZP zFcDK|hq{@e_cTUdEie)<_L}uau;rQ4#V=Dopt&{$P?P*&faZt2SnCLSnb>fdoZGjJ z=PZ*1`URJ%C9{@khGkj<8~OM$xid>mVtMzFnH{L#T4nbq$<@>($m87g`Y2ACA7!rl z-qLw8b7is-B0d(lcw3kli8R}97^SG;!rAg z6Ngf{n`AVVd&q7l3k)rUR*c#EJOt%(R)z&i&wT&7YVJ>M)@GBK)b4VawF#_QjpQd6 zvtp@u8bMBr2A!CcOaLbFX>sV=8>m@C23ebs9@?aqViQ-f#cuOP6)mbTFHkX{L}^sj zBEA_cOsW);5;og$fis8M-OmqiN=aMSSfeQUCaPxWGSIIsZ^Z5L{>964^uV<=tPz2Y z-rGM~K4|_y=52iONGj68h+#X8Ez%o6_ZiYS8bBtF^Sd=bSw4ykYNk2MZGD1&y%PyJ(t6{@Ub7da3%P|U^KH~bokw_2O+r^v~n zK6TxUl08z)4M4Fo! z=2K%>&ttDoZtU^Mb7Be$onO5D{)M$^8kM?5Lob`&hihN|KhGc<@{i0ur+~fPrVksg7&33g|-Ezs$ih2nLSp$I^+&jhE z!+&n&Cz(MO(hxJn*{mrZm^|2#*zLE?=H&FLtU|V3-)@_G3Bi)r&A%eKuGtO=?Qnru z@ln*A<`2R1q0gB*X0Qe8c>0vpxzV}ioib3!eje~6@OD;i%>Z>a0O~B#V*mtbBAVhb zDSb%PGB)G^wxc;f*qdgCc+e7j=rdjG< zz^xWTrF_o+y5IZ`JwbFs{8tOEe>n}!{w&LZE3J`HNZG6e;w99sf_AxSSMyN`8x*wy zy;YiTvK95bw1#G;Z?^22ZDzH~&h)LzkDrzo&@6{$*vb%_{_^VO{->*tH&=hXxPJNV z&AXT4z)627EP7|U-1Tx`&iHc}e`mVPQk%<<8p0H?7#eye6ty$GW+)P28x}ANOn0!v ztRSc%bdf<9Ys(Pfdtwh=Y;uX=7-?pD*cZm{fSP5{4EpCAZ~;55r>0$|9_Me@#<1#{ zXF+mkmd~4(HirIrc9Cp`wM3yFYTa-rbVIE|e^@l=))Ki%JGPZ9#k);I*%_#b{BCSk zDqDNSf9DceIBK1Y9@}R+JQYGKh+qI=t)Ml`A93bWNZNEL_Qn!(jRkXlarN@@?c1mD zd<_Fjddy>K3FTUd?~Uhr4ej??n)Zre=XSh@eks*Y}~!ttWPltK?o4H_pH`ugJS zpU>Zm6a-^9E*Fwx03(ds8HQmChT&+~xiz%z=@B*<5|!HA47>B}SU&6{jiLmZ-R3j8 z36$>yL*ASSdaE#%0mxgc45r5Mzbf7x=8gUsb@vZASF4EB|Vb4BPw}tes3V zQA;aac(DCv5V*Ic#vdijO(lz=0i=>4+E_Dz+HDaXIWG90tMlvYcha#aOn*}s>GYV0 z*A)k)cIV|876%hEA}dBqo18zKhS2|ajQVM3P!~G ztMenVj=>Vo6;|T)#ntusTe~R1f;cT0fMd{^)>gNwhZ$Qbw3$p)Y{_uelginLc8R4Q zm(Pa+P6-5>mBN+r5%*XMJEI}WMO-EfD{tbXb`is)y=Kx;SAceAgx01d+JMR1*_Te> zC3?cbL!~phZ9KiMwR0mUvwJOSf-kr_!jH#~hs9p(T2ZfBAQ%Ls?c&{sT&gP{$}^Qx z$!%VKbUv4ts7| zV3i!jRkha8#I_d>*R%}~!qr1EHaKC80X%vM;o5fStwm^moa@v`Cz2ndXSM@y5koTI1GK(Yi}{Sr-pbzT*p&YH z@GC~P_=>3F!?#(95GCMXQO8Djw)o-TulZ0S_e$H&cCT198ar27I_+F(X?Qx_xisO@ zteH2L2zG#-daaSCK9!*4 zi*%%jd4Lj1x%mn!H!x#;9#n2rNOuer-}WX=QS z``eqV^S9TktbvN@+&9}Fj6Xo!c>26pRCshHvqpayfX~&hcT5xulX!Yj>ifV%+J|%= z*q;k%x>8)1kX^f8p_4gsFtutMJed*9OZcXwfIuEUnlzqcKv8f`l)j@$)8Wxf6Xzxz zY6qqyiIU<%U<+ZrT7E(j{lUkX>f#8a$C)N1c${fMA99@OBtZ_Y6(%-DCrS$5uR9U5 z=$O))R9r@1T6`ML_>DC>6~hbDHy6W~;>V%0e&pz&VG16qQ$v%)Z~7jY9A!1c@*G|1 zzkX{NyX8owq6#7~sZ!A_EaGXVMLbEIJwX!K6Ue|(znGHp|4G}zHxF|*!|_hYf;SB{ zzMsT@)6_@uxtef!xrkKl5;PxiMikBSkc~!jodee7P7WCVsDWnsxv*Bsg*2A!NTFum z=#@u-^#~_B<|Anjc9@PlM`^gDuQ65)7WodWnU?XC#X^rfF=?6qS~)ESC(i(KA>fcW zE%WdRD~UQ`b?=-o2|ye^{rPWqf<)id;W_U7OgRd6!rRNQzx(FOj#^_Kk|xLQ_86|z zYU<`VJ}Bxp+Vc_j4{^7f|Jg*0x?Aj*}&t_V$m;ErAOE6 zc?x2#nNK%D(DYiRe^uIX-(eRw70w z?f0(F@g;wfjK~R)1Q5rZ$cH8Cs7Og1eRJ_vK}6^elARL92`->-FTZ>JD!O>{ z?)CW_;eUGl;`;nO9((lt#f#|u`HR=DFJFp@eEIcQ{1HN)Fk7>tc3mC^&vKqWIBMt4 zWv;=I-Au=|jPRXs%vvA#LsUe!_SWY9SPw7{eIn@aP#?Wq$QeVVZ(SJvrd57Lqc7Nb`k8y9RNmHV;l`IerWLRVXcSbp!Bk(}?;vb+#KmDJ@nWy9gA#9NBbwcY!lOSoQ9~;UHvC@O_a~n}dh`fgUs2n1k?DH$ zFWtYdK0k|`5m~WCXUrT8Zw5Nax7bPKcM`jW4su-Rpc7VQnxswJ;wtgdqa>V1&`hcz zaZ0g6Nq&r;so5CJp9%8A1IPoCC4P?3hk*(3PUMI4Ea;l4om=Nri0{9 zU6}l-GvrTIJ1_x;$H7(KdTj-?@eK8CUw8H0G&JgmTAPffa#)rJ2I}pzJ1XPU_fK&h0YA^;wMEZr`U#~ z!=`H#N24$~M)vIcm*2mF{W{6w$I|emrL!l^Gb5=s#G3S>2%=XqaaIhy{S@&R$hx6? z@QncZX`sW82X;`UL*=~4l)CLLkT^Y(mRx={ItGi=bbW6%X=@vT~kZ6d+(avV2>WM~EZ$8bm7pFY*+LDp%J;sjF}vRqDP4?+w??qerJ) z2=VQ=ziF302=|U<*5Lc`$*#S*TYPNxPsh>1-C9xxav{w=@U3|#1q6Z(vwF6nVWhgv!?8V#H7jGdcEAnLpLMt>|bjBLf zU=ARodK#uGCp~;AO|6}gjWaeau9Hk5ANa&Wy{VV)_)Oe<`{LEB7uPQUR>itJXfk!C z)KMOzqKk=BYl?MxE+#52G6tS)GHCPQ6=a~GdiPF$bh;QiUH)ufoW{VI(JlRH42=B( z-O_jzsyQBofo>^})A*u(f38;5fy}Wm7@hTV*0v9?Z6Cwh=7W4#XfbJ1^vN-6&UALn z`CmmG@$1)@FaPos-eHz4b#l0EA0EDJeWI7GoS&Bl%ZB1AiG8417Kf17QN;RWGD)CM zg3zZ&GE8@W7SX$AD^vhelVq`ODRc$U*%Mt!&9yNaq3c!Nc#k()=5DlJl^vygqvf#C z_<-^PMFjfH#Dw^{gMt8#n@*mCH(c9KUthlcvj{_;@^kR!>d!at&d>ki7L)2B)q6Zl z)kCVcPbR4r`XVo=*9d5jJS(*)X9N!I|MyjNGB~!;KZnv8)(05GMo(~W2*jpNa1WW{ zaW}~Ch8B|`-#!fT?G4D6cf>B9?T6=NnM$XHtJnD_^w=dbRP4sRBK?eH@xBasMf!4D zf>lQnto*O{iuC2QSEMh0fe5U$2rPc#&9!S~77#Xr2X|Fpg;lb?GHN%LL=IlBuco&# z39HFH0aF^k#gTVJRWd86e9P|84grikvD&|wvE|;~D$UVWseyv7uV-|!w&2bY=wc6q zQ&W$j!Lc?9tclf8V7>2;Y_Ov77q`2=>9>sCpIC2L-KEJHK3a3>uy@}g{Ysl=r~D@RojWJTPBy(1@u!cA z9e=yzU*AN#yY*q&$pTC(7A<*~ycI4(?#{lQu>rx79Q9lEGHN^Rx9U~YcFb?pQ}O_J zCos`(+}fqlp9WqNYV|0{10KH~JEPl-Rx|Cp88WaV!4uo5Iu+wZW&1FaxCbP$7uAe3 zo1@B5eHdWeGdii>_GYfe3qwsirF#g2jyml6es)PT)jWJ}PB^8@IJP3j@08|E%*`|5 zl;*7nTrEC*^oR$mjOlOgl;*t%YE)%xO7n~!Zr&sh9d6!+OdM|hHGPOv+F##GOj}^n z@+J>0@5O(jHQaP&=+Wx8+^Xfq!22)37Y;}~8EX`gSNXw^0cp<3mOr2q3Dp4&@8+;)AhSNoT)mDv!UwaR9!RX$^_af5f_uN-gFPcncy-0=U35*s0nz=2N6Ac77^I> zd|d<$QpeiE?H_m1PVghEg&Uv!LL*a>Ib4Y55xjTJVQK4CY?{@Ao_ub9@wuH_N%uB| zyyH!Bg}kGg2YF|hOL;S;Fjj6VXC+fPWe=W1OEakCAzWMT#8jSI9qJ2HbY#AXF?h1S z)(HQ?)Eb$a=rMdU8SAr&^TrP%A3J{jSkH;+dHu^LydLYkiNwZpBC*~lk9FJB(2eI4 zfx1s_#`@ftK4-u5$zy$PJOybU^yK!q&ttV9B#=)~cY3KkU!8yb-JegbTBY0BK}?}Zeuh@k z=ozW0!oQ}|HB|(g%5+T?-Xfo_slr>3k(w$;jITnTa&7hBUITM6n zrj(tsWCUM;u>Mt6KU85ce6&YZSWcm=ig>3kt5Ofks-)26F4hxMqOvNfGc#STX9g0g z`OKuw)O4mGO))5|VyHfO69eI}FyP$DA{r@sGFBx8l|y-o$}D(*6)Nui&woNW6Z*mZ z?i6%LFw94@FL;|g;05JPfcer3a_tG;3xegs-e(ZloajMsJmt6z4mj{8##ZtrLzGFH z4|-6LL5U1w-|yCnhgzVV&uqfCWTe)W`{)Px(Vp0zsO<4Hc6F>WM-@MLGo5OmCdeZr znq?@Xy-Z|elMIXNW$<-ArK}~8HQYL0PCTDUtcfG)&LNKA9|ay;kKe3Nl2}W13Kor% zhWU>|pfcnsQX%1q_#pzEMOs6Eler~Z$-n)m}z3kB6aMeA_a~X*-co; zET3M;<5kQ;o;BWtPOf4;Jo<=sXk-b4F-YDd_qaJGmT@a&CkKu&|>AJ9rx{ zZ2hcb2_2r?ekg3!UA9{Hoy_oc;7SqKzyxCH?d3PG-k*OXE42LWZ-29{z@(h9Vo-^7 z6nj=CsGjO5_Kddz=4U_9gtwS1m}SQ7VzR!9{tq6bHgUW4>W`w%7-OjVRrHDN(deu2 zg_#iJ&qkxq2BTMYlNdcl96g4MM8_QSDwbaT)sQrWx0s53mPt6XleYmrbd*e*IbMIw zHpQg==Ny`v1P@KE$pZy9J{FO}roaz=?p>vSekJ!Pys()uB1rC>*m#YBuZ-ri@-_-_ zlecpE*IT{mtRA2WosP~vSP>I_ZAozUp>mjxF2G#0(;-eS1!9kx7`$dZOinLfUtXQR zf)@jpaza2+P%WHdQWmgugbL=r8Ak;hqbupA3R&{61BEPki$Ebu-Xc)QvP{@mAxke; z#K7lHQ9CJm0@@rFpqs&dRiXI4O!F+rZ8*=q!}n&W3^$*G@qkzr8!i6 z8Lth)TM^T0qBaa~HkB1IIdFHMLPn3hG14NQq&Mabf?9oQ0w*)dIrGMokN`EH*yCrP zv6Ef>T(C!WBixi?(n9f|RL3*=lsN#HR8YnrJ=`i^ZNEJ1?f@vTr615+gO+^?Wn7xU zo-pd#cZHGe=HoQe7Y`PNP`a`#13WBnOg(J3V^ZQ_6umo|AoiA#loKdHo}LcRAZ zah}zGkPc^eH1Q zk2E-}0GaxxNC^UmMM{I7#uQSkMpYie%*o9eTnJSHPmM;KcFHjuCpAK*!a3o)b+B&Y zDj{%m6>aBul~dlraEpvpIps|h)NYi?v`kgbQ%zcolS+#WQ_ApGS|2#Ba>~Cm#T_$8 zDrNC_?a$t-3Z`P_FZ;DAqxlPeZR%HMiLY9x)e4}#X0RcQ1{cU3v@{o|#BLyy^~=G( z;#x2EUky<)AP#~ia2BK=THo7gyIeFCeK+Z1vzUQ!~sIlkJ&flVuMaW|ki#0?b8kBlS+Hzu_u@Y|FyN zN(Mm-UnX#wmHF}fwmIzOaDXB+Nm8RXP6ioL+>96$6s)1mr13J*O^*^UwNtOl!=CzJ z(iLx#hkPDc5h@4An@rI@@PWn3ddP^w7sWpgtp}!owjOOTE2k8LpP|(xjv^~VIEt(a z;V7~ygrmr+Q5;29DML`ujgNvTqy;B(Cp0tb`P+9l2u`v4{SZze$;+kAZZ*QJqCt%? zBXK|@%t#*42s1(^G{VRYxkoB{@#f9d)hQo(`V^W#7~bDR5$?aadM$i?+(5}ieYW=! zRr&3|Syt)$<|k1VDq1djCNPQy{^wu|m6gmNwAx4ldog)HRUvk#obYyo}843*t%9UyM74r&6v(#^hpQ<^%U9UUyZ+7}L?rh3IpEc8`xe1=;Hh7xb;Aw8h zPqU~{dFVDb%k}z)!)Da5`|i~{K^*h@|7P1xL!YvC#^D9T*OA+a^}5@2 z&!heQ#-Nl0Zuf+L<_Ab7kMS`*mET9|ANk*ppC4{k?5Dl$2vvxh+Og!bG;yFZSvPq^ zR1>2?Vfbd&JL@2P)7IxF6%N%WnU?a^SIWQf=u}R*er#CDFboxOi7hc42+S1xs>cqC z%=L_9(o!Q*lNhE$@?pe-VPyFcx`GeI-ig6fDc;0@FiSLHc}#{Arg0p+?a$?(0b5R5|hc^sBpc|0k( z@|XtXQl7+GE+qpAkVA`nOfKb#9_LN~WDes|L#aTZh9~d1;c$K(ZGPCFMdFZ1!F03P zZ;^1y6QYGvF%(X@?VJ(K4bm)fXN0MdUp10nTp-{kMu61=0hX1}#7HoLC76>Ckwdmo z1#LtIO9^7mDf1_?jTbAU5OAG@3+OMT=uqE(fq!xoh%|y7zByGBXwGb&nbT4^vJj&M z@({Gk!<#P|x*f4EZ+w*H~OeLhw;;&bTZdad2 zk&rx7st@5hJm%}_g(Z9R3d_gF^|K#Xv^#8B^pX9M|1H=FdVUx?MQkhhFjc1D&P+27 z$!Xv#rO}_n4t@N5)!uBDY;`KkM-Mm_rZa5e<+(ww;F2{tmQXn$%f?f0azK`i#`p3f zo=&gjErPmV4o2B1gf=gzzG?DIQ3xE+Rg+h-BO!bc+V9>@?iTYN9ikfFEM=}Yi$fPI zK1Rp*(3ECeKa4*LVREJhZ2|7_&Jwpd|&auZ9jw2zFZk^J(fz@P%1UXf9J21 zpx%D3)nhAKw`RD&!%>aC*1!uJ4lww=*g0L$gL zvyP;0!=0tmo>9|Rkyed5EABYxES=F=N?-xe?S%VE!+iw?30!+IDUUjP&+d2s8}}AZ zZ8xL09f3))y~W4_<6@?>W!o5*qZck7+q{cOglnYog&UY9z4iPEYWG zj2`O>JE)CK56;09o9HOmVq=7CyosUlWJ5F#fhHk1x|v*E>gI00UhPiA0J;6x-R!p1 z+OY*hz{WwKMGPh+MkHYkt%zr^kMdT^Tb*~QWMA4YO)E3DBALYE7LW`x(c6Rsd#gzJ zLcLWXrZ}%vZVnU3ovQw7{7p^ zn7`1iRBc*uB-L4Tj_mfnk##Qkx7f^*dW+%Mk;(c9O>}ltW{MvdQN8O-3bRv~>MW>H z7eM4U3N|V-bJe0$pNt#zC?By{P!I@W0lI?&>@QX{Lx{UAIdY}pC1EB?VKIl^%wOkhQ;b#fZDY`Ojz zeOz}qZ9o$=PRIqbw&jpVIcvR>{K(bWDNNF1=jBwaQz+7Nd;Z({uB zi4#kAaPnX1o=UC^80KQXW6R#@h8*lYs&2-gA4G~3IwDrLJ+`04N5f0@9QDLF>~#c) z3krEs_+*P;GX8JPYGh(jU+1afMVU{l;)TWn{zj^J5vb$MH>e3c&P*Ssp^Nm)_pgGi#yX0N);NmE&{3Sht^sC)3OR~X9L6dj&{ZNw zv6JIpK%}c2Ch+Ib#5jsO>?n4%HfkKj6g!HYOs=9cH@qbRC>ReUIl)^wsc@N=`u*|FE%kmV06hGSH3*z7P>Az*7!0V3(w%a?jYkGOCAb>d6gz5@` zu2Dm#VAgkZ>}~oz#&`;vj0k=fzMR2|%1eygR0$9jw9-hLs`2SGRp)GU5t>c`Rao>v zzgN+Ru$@I8#C8^a2-{hzU{zfcj4Db+Mmw78(m?+_*v>LGz{e7jSuL26B+$&j9?Q;x zlTbsWdzOj8YgV!6c{wyQz)UgI$9PLpK|?a{d35IUQs^J`JkK_p+rN~|dmi-9H_b*< zDYJOyYqPoi%gEe@b7wH0+s7RGNIYXMp&1D^bKtbH($4kuiV?^ z$dIy_bP$w9*g;Sh1Q?jDf6Jj^DN)A%=wr$_K;+Du%;-&NTz0s~rHLo`%UYXoUIS1m z;nhYJEA0~TriT@uKULInB`>Sp`mm+!sr=DL>BhUiXWgRNbAxNk9?RAy>Ms8r*U-kb zX8!>rnK5aQSTt6ol{W!z(^wU4-o_Y`z3&z(+u<#g#F$fTo_GctoQX%ksZl0I?>M}& zp~I^rGZs*o8Xb{v603h;MY)s#oP@d;bcHYIQdkaI-PK5EjF~<@sn}feIUqhp40}ywq=_?EXF^7U;DOSIlceN zqYXH7tn$xM5pd~M)bEEa1AOD7Msf)ys#EWYr$;9~aaaVERe7Rn1=*#b@l>%O{=ErC zV(!1Hqen{a5n3#^?;w*!(s%j#da@9n8!50 zULxzcT7TDUSr@eeR=Hf?F6dDy&aW>}y<$nDq*`y9ZFA2h%XSy36TOpM=6kl=?*@vZ zARKm!_y`j;NTE|DljpZej?Qm6uv@)woK- zs&SQ078wwstHC@H%m%3UJ8zLoH9)MsWas0{Dw$U!JGTnkITdiLGE)J>E_^Xu_$&`z zGgYS81j?#+vRNw)+qQju4!_WsYFa&PVaquSTb};IH)W-N$|kfSRIT+3!BG04SuSjF z7MzDw9zU>3t5Xz_|2}XG483~#P@&}%I9CD#WJOR^e0F~-f3#Xd&6^$T{uPhgoEz$# z8|)RXifO@790`tQj^HQ)GiEBFrT@8tV}>K5D#L=KoFO>MX~98`1P7fG93t^do`QRM z5Rlj?DR}Xb*l=Y+6+<)t$qjeis~K`bvygD(&5;`o#d2fEklZlz>dAk(+!)N*Zy+_u zuap`ja0ZAe$}mT24CIEbk}^1 z^^rVbbL2@Kn9JJC<$ta`sb|QOCM-{y8SMo9>^Bf8^jC@$8aM{pS>n<(%o8cEF0LFC3RjZ1 zI*J)6ypTR{K-LuO#(@dCfytOm9;j7meiN%yiEOytVI%Fo{T<`Yv=w+H3SYc@dHzn% zz_0>~S(3|lZ!fQ}zI*r14#i}4RJi(bUHo37dVYq6lax;t3sF8*EJXQKu@L1`#YQQg zJO;s+$59j!+#gstF7`qk8V6q?PmuVT6g-gyT2#GZf69hHivl)vZ`hwG&d9?+i>f!N z{4D}n?C!)? zjFw_YYN4@Q^V6eT6esGx+fREIt+yT9p6Y$N*eIyC!gz~ciT{w7y+Ebz*Ix)W0tKWv zS+V`c_4bE}$1LG7>V+5YKxFN;=Ys$5#Dlm9^Ts5&*l>L>oFvq_LvjH zv(sRi*EIC_O=+u8gIZTJi6x(XrD68b$)g=Y5);5uPs}%ve2%fj5X12q=cxi@upa^B zQbMDAa^CWxkdZa-r{^sr)AMHh6?Hpz-a`I+l3Qtj^chzgqgPg!uN`PeLr-Lfzp<3cW0y%R=&s zPeQlgB3UNT$>Ktr1^ppvq80lHzdEcIKOWQ%pGxYSvq%BSk6sTy5pB%}?F-TZjw`s3 zvVy36NjXE#L5+eKQ^h-Cc2E zG$eRlnmH*_M3+t&Pv|0TK84pJ;Y#DYP55-vStmi)8Xr&SB9u%gbP+na*{g}3VF#oND|dhy1{GdgP%?KX@q`UN$=GZGelU>O~z-v&QuR>Fi~+g@;eAyrwp z=Xsxn(PLgOa)GAAw3D{^6&eq$2oMTQENo}INMpr-NJl2s0_Ks&{gFJDR)Q!Q4Q>dc z%~*ssR{(Iw!%Ubyya^`osWXp)kQfr5sne^w;hRM07@Ki=0jNDXZOn#EJau$TX<~lG z-(3BL+r+P5zP^zQ`10HHmwz$+6(x(=cF})QnPIB?eDgNi*s^=caTCculFNu2Rsw-9 z{Exx}TP}9{CqLfYv8FqHDy^Qu|E3B(vB2uU)V@nK95LL`796;nk{>un)gZ4H=cUt`=Vv&uk=+s8FXq z$6cNJHbjOu#DI;p)BmegD`o;GzF09p5XWD8? zdM7I|Eueumn+iJDY_f@gV@yO%yFN%a5MA?Ix#M3g_ILbZg1d|T#5bcryNE~g|Mgr> zpLy$tyg&c$N{;l@PN13OaT=&P2RFeOn@|nRw8@}aNDeLZ?Undfs`lJoI5;iOByTX} zgj4@y{#WU;9&)%kpGEywBd*#J`nS3;=K=Hj)Wo;b>Y;!rVcMtm$IL_Ziq1 zcAbhKDzq+wW<^~BGa#=)!l&mgbV>qED&U1Mdn5u_K>>J}9t2z)U-_L244-?lshCK-KCj8;#Qu zt+XyNDNEhV*s016omN>8ZIOp?NHx)WE@RG~^UQSGs+pD?&R;yjm`Xjx|A2+iNJ(59 zQW{-bcE8>ajU%{(#Hxt}c`~?t`Wbe4-G&XKy3IqDZr#oyTB+L*(MnAx^QdYXwnJ(f z^di)Bju)ZsLPRTd7a&@x0a#A3U7p3ifnjc3njaU-jyBtFXpj$Fp76Wj^M92+T>}Ds zVnJ9OFbr!p8Q7?gqNfs;VK0#W$daxV4=&E_)|PbY^vqaTIK`pveK$vJZVv3X>u1=` zbwA^T^&yu-4F=;FyON|P-Lj1UCqb0akt5<$v)OFdo9#lBSb!}tW;iSM3-P$eEqe@% z{Pu?%#Z^%%_;Vg{;#b<5oI6TG2=ovitIke8F+zMt> z>y9CRcLT)~$6=gJJQ=HO5}(9BqE-IZ{MH4c=;{NM3WfKK}sCOCWi)EzfFtz zij9>gdg1Syo%G-_wu-npWBhn>&Fw;po8lAOp9!SwZq1FKkHd8hxZ9f~>~3$8pkCah zlkRr2mPhfJCIuz|{AfqPXwpfyU6XkXpA^-!obu5(DSe2KzR5zvG-{dff?~BGsG|8a zqb3WhXiXM&<}?|d(u`&(i%lNZ(V9FDDvM1{W-E(EN;?dG&5ZDGQy3$ybEd?RRfXXR z9wAY5dZMSKcc!G6adHYE^>n5r!!DS{q<+U~Z07`3<&j>F?GIQwG`q;kb+et0Dw&^L zUEKhT?c(j9|0zGe!vADX0%Vtu`!O2GE+4O7-Y6a@A)PV!>v3W-ZJSE*CXW{|Z>q^C zPXqDJiJn#zdg?EsJuE1Wr^=S}YQS8aco*1<YLCEmF7llI%i%Qx?$ zPSAH9R$Io+ou*wfg@ao2M{T(P?${F$r^e0@7tj0iZ@#-ae}%?t7!_OU7#fE7qK$P# znc|2tb0Up;YBNm*sv{@Egcg%GCtB~4|2~wAbKA}$hG09HiOIBzAGGxX#qn!ep$E490z`DnSqJhDuout2(5frsW$U0 zR7Hn)gZ|ipbM(*_Ot10N*g~pridl>?l(hvw?3ig|{U$>t-F77`7}_it3v0pb@jFda z8yWmcXG)V~6is2PF%8h3ZAK^2o^7s=Ui*-vr@hIGehxyp&1al0Tdi^gq1@U+ zCgTX@7Vxr}_mGxD#X^AkVl1o&c`$8}&&z`uoBm=N-`p131IVwLhfY80^@9-lZ5fBx z12SVr5&A7cp!&JvXSpZaGVH-^tB?n`t)@?!x+jH8TDhbDxYOcD0K62UOk5D_!xrp? z#(K6#A-Sg!lxXBP;w_Ujw-LW9SGP>RV68~0dwv7k`=%l@#vFwAwX=Y(EdX7qS9rJN zc(3&c0W%|r(~=qEA>r}Vv&K{Bfgnz+>rjrEplv;4$3e2^cyF6om#a?q91r5O4V@0+ zwC$v?PBrlrAq-q1QiPjhAy>Isa!s%MB&pT8$QYqW8Uu9q)+vgz^HlzldVY+KKuf|m zEFfIRFZ)>t*OpGkciPT#Ex1HkW8$3##Jl0Js1z_;K6KuGCc3%tF!2%j_*8*xbl6tSC24NhHkgb{Vo!bqGtKA`6Qh; zg7#cm=#mygKr4Z1|B?Da{r49}?+3->Ip2n>-Qsq|y3>Qhrztn0FoftG6KNW&PyB6P z+D!=2!|~jyRz?r=7;7fnXm{pOo2s+fI$H@<70=94u^(@lTpRgZ@pbPJ$p)1;&{O0R z-K`JHE?Th<{1Up81sBjkV>2^(O&08%t3O{|{M-3cx%xUMX3OaMgW>L1T{N*H=ERQd z&hNEEBK3n58&yC-OqyCkv&gcLnZCvax3uN>)MW)ktWXLY)W>jUT-%2-<7gb2;> zdBmMZW0O45xq%r&3GM6*8r!JAcqSR2B|);%>zmt&P0r~#~2-GesaoAWm>-~HXGamn}THeKSh~G zn2j_XLZPXRUD;rcqf%3d%8l<>Dw8mi7(XT-J|?{JX%^i03hO!K8HIfLSKJCnHfjK=~1)HrvY6d=U` zfJ%H)u#0_CFelF1ngQJ}T9ra#KR*&lW?T6S^s-MdrU!xu={QeOec?-lob`g? z8~mA&KU*!#lMdOX;X9@?>5$2YUg*1VyZE=(t2&)FIdLC!s?KTPKIk$U-dZM>>99(4 zm2aqRJaQlW5@FKiGxl^I7A9RzCxv3^yV+D`r2M`JYdKw!hr3abpiF}d!wH#I8WCT5 zM^pKZ%P>Li*X+G=#;TMgB-6?n8?Tx%@d^vdl|FB1y7S>jQexM(B0iBre0!V56EaOF zE6&cn?#PU>k;(WsleyO&F&UU6xz`;rtmY30vuGKsJWOn__7J?X4!c#mI-JVa z)dpx>Vt0u?N|t_68sI`jg1F1YFo{AqOD^6;_a=>7#rQ?OxHu^Hhvj}j8*ZiR?^UAK zqiC~~88wjv?6a-P!&%^;>$1rj?FawqL zg{e~;rYVr!tTG0K~~{dx>d*K zaRpUPtK&E_f|J>hvi@hTrvOR}ridWB@jrv)C*S zlsjYbgUg)>slcLV0)PPzfdpWe>;lakvnhtLibgvJoh2U0n-w5=_0`Sn$iNDmcxU3X zpeAqZVWtC1!kG?ClH!!Y^Nz9o{pRekF+W&pvK?%As5!&PewLbS2SA?*WWUpbXkfq9 zB9qcdh+x8IlL-;SECb+?V8UecXGC~-)Q>YF6t8)hu{i?D=2M#m!GxhEvmokW7DP&* z4bf9oqAUof>@~{_8*_oOAW~;0a+Bdu3@c;D(8N;Ck5$HIxyf)CuZ+!dTT{bZ8QX`G z6yYN2A{|uC{v~9{Y=%X~ieQk0A<7qDeYg=WWCq-;qtqP?Y&5Ut&PqDicbE!!gkYAH z(*(1uG{vPbuUMax<5wj~K8w?rmEojrR>coVC}9wx^Hmi0=aVqNb&gi@W)+>BaN?N- z>$@JAa57Ck%}DO4<~2Ft2-a;--3rug-x+ooGG&&Dn7L)n$t+r%)sQcWG%pAx4_Jjw zX%u*R9S%&f8Uj;CA=IRRMtVsSZ$%E)4`nZ(C+dL4Ex@^N?iXAEghCWBT|f;peiT(* zR&k3EG+VHUKnfG1-c7E#2f7Bir@D`P;Q z7TBh8=A$(BXO3(tz9DcElYE{JY${N;dQg$6V^cw1q!yv{6J4_1&4z7-LM%cn^;1^@ zN0Y5H*iDtuN@JY$o59!9`n7zYGP&Btt$ez0Bp!Cr7tzVZ+v}S*Fa9P)|H+Hj*EcWU zeRuQC`}6Pxq;@ zyB`~f*j(w`_#rQBCo>L>0Rxk1-(rc>#*m-AR)*uW@wnc()l7ymPN+&T#WqR5-kvPJ zik~i?K^LAb{`4n!g;J<9TYpF^5_Z( zyT!XW+{A>9y|e?pNL@Qxiwc9?KL7XCzwe)H4!gUZPUL&ivG#C#BYw79+}{X_gwKcV z#YE+2qAX6_o<&J})L_FmlzJZe>dP;q&$pk0z&N#)6}cdJ{FRj?uFy7(<_YgEEWEpr z@Mg1wH=7dPvxcP}GcB4}P{Q}KBz*rMdD%~Qst?NWDvm=koHuzupLpvjb)A15ggsTU zvR`OHz?|q5`_c!W?#w z9-#Oc;Zem|91tG7Nj@n&cmom^9=sKu*8HkCpNd%Wuk&fSz*~^8T;Q$fL(X6^YfO z`Vy_;YQ`nXTLmm2-eT%1;$H{u$0{Z>?nmD0L3a_EzKh6=yQq$T={czL;5kq^MACfL zQeAFKCD+9hd>dMa?x4)I@TQuwM`9OUUA(!ue0P2E=HlPZwH`ch5{aV{auQXsigt`R ziTKy~w3CRpAk$7F-hxg$iK@6A3#aq1^z7WS{SDi0S8L%T`Um{bgu>a-ZDXHJU<8N{ z5cjX8FaqneaYi6{2T6tiAkt-nCjI0@bW(QkH2T*FKAfCJUq*jW{|@USDGK?_r!HhF zEx9&ui{5JT?J}=v*^$A_$h-?U6_n0;iLz@l#^lh%Q4_vd_|}8{;QvZJZzk|&q4kS5 z=P4F8w;S>HBF@p~o2 zUtXPy{Mma!;>sh<)6N_}DL& z9Yfwp(GR`N+avEJ2yZCSouhq@U5~tpIjR}SfrtiS6v8sxcGE+Q25-gRptCCV(`C8W~rJkMb*A_;Cpfa{HBckKbvD2E*{@^$q z0D~k#)zv$;W-qLcj37t?4u`|t;r?^|KtbBonlA-aA=Ow=d&9R7M!S43NgFNsdm)!U z96a<6CHx!_Ietc_C#lFC@bz>PRb1`bfHG2}v{iB&}zw{QDW2xGFv6(kqe%gVvjfG}eFZXM)5L;MD%V@J- zx>aA)pBus4l6Bj&N8+t#kL25cef?j6LV}r5wMg)AY=TUId=1e8aRNtR8OwxBC8m^# zu^|kt3x=FQ!aXFx9+Gemb0ZEr*In(sM}>`z?6HX{;_dT%5&I)6(Jo5zakVbe_fDMG z7+#E?0pP`uAh!7iAPbd(bM7z=bZf%}e{H#tY)0;(dXp43Byc3cOSDlzyd}@vAYS;Y zhHam(7mo}v0&e{gD>;a#gyLd^?qe9J9Eg||i?v7Q`XH|kHs^~sZ(hC<>*Nf2fa5F` zmK12A?idDCR=i`Qb9AI6nkDVX!o*{fqce*Zqdi?a+Q~PrIwewX?MLLOY8BinQ zCOc6iS{;~(!)d6;rvXO$1=~$3&PfOsUbF})&PfOsUbGlhoD-&(Rm*C2EmpBa!gus% zu~oH;&F*t_vsm)2$!h}0rbyl)0p~t$7CR^s(A1F6v5Ic_?P~M+Tr7Y>UcSpqKavorz-D63E>EUZu`EOeGHnuN~sMH4ouEz33%Kw&gKT3G$j%ga|+ z>HO)F$4`E~m;>fp^eBpzJZ9JR=5DljVE+baHL<79+5~kv9@>pm_9#TJLQfw=3nAmh7{nj<9{MAHe)&=jA79Up(4hI03aFc~0kH#& zf562KW_)BN&a>z5u6~|Bef;+EY;j_V+{Hm1q%*m6aneM;ldov&-(is2KSG->c=(YZ zBm(Uz?x?h;hiprcsF_pr4u!vr7{~^F3iprj=Y66 zJ4|m`LJjgZ^+RNS=US*#t1e2T*~jYzy9R~b;Ad`6eB)83w9mAl!sYs1G#h!{S(Kb0 z(J+B$oc~iST3z;H__73>V7aRyH9Jj*7ee6`PdHo$`1GJnm8S9JGWg=8VhYuDP#j8v ze!&NlK|ly`VJa$4TxNldG0kGVF($pegJ26XwlSueHV%bpHDB&;ZsxGbY1dNJsL~Ja z^+?%*=g}pgwcY|-wTmr4U2i2+o7^&0(FEW_Ksi(OJ^>M}T`*x=ZY@NsYz=0mEb+G8 zGq4sr@tV)zA6ag1VZ&|h4hs<%3x=_Dey5|Ea&6odw&E#(wQYBL16uDkDsjo*byJy? z1iLQl@4C2OrkIs9>Z3|AD{0h6m10&>=kB^5$6-*gd`PnXu;EXrY- z=9B9Yxl^6ZjWS^#@~Nje3o&6a>QhgPDW7^;1bymh5%Q_0MaZX~mcOY_JuQ#&si)^#heq&lMGNaQABa3iIT`H= zIZ$cPnIJRyP~I@6oC!i)y3T|F*=p`+C&M+;b}|)HT&Kr56MFqr@pVu^!F}wReJ(c{ zJ`NyDnPnrZRFJ4rD!0dm8~z>&`fVI0bU{hrUtFI0Ni+ESH2O|5o4jC!`4LuK%1v0r zD5Q&M!_Y9XnH9bo&`nvVk+8LPo6l#D)*CUV6#z;}*@7L#9HnuyrlUdQ2=kN%6F_tq z053^8?^GAm52hno9JDmE*rbfbPDfmCcNR9%vKUjUoUWppZae0YOpXA%nuNQG7R#7p zK1+f@Fbv>;$=g?N z<`*xY&gXwQOaA&mwu~MUnTd2us9P zEab$=3Ul;YxcdMgzu^>khyvm>y9+;`L^JF1$`HwIe944>+(ZjDqCo#PWG%zXy2P-q z{)slyv<$ixvyz2mf2I#~rlwdywuve3pRU6c<4TlKaNs^GY@rf#pJfH{=P`v%97PEo zK$?>ms%aTh1!YVXlrdFM#?<37rq;u1!!ia6WR8oNc2LCBM~Ij@C}QfMh-oH8jP1Fw zbb1n|#ij7Hw-j1j3Qygo(E3ZE2}_vfC<)VqB@7#sFfDVY@KD0E2NH&bB@7En7&a|o z{!y~FVF}ZQB}^NZFl|`E@UVp8M@bkyDPb7#=h2rid`!Z0(-Ni&N|-JvVY-lnA@Qh$ zA?6IITP$0!hP12p8!(T*!7{b=QrO%zKsVJpb}f0xT0&bikGL|ub+HT8cDIrbY~a`Z z5}mJt-L?I7H*()Ua~-YlFyHaf^L&t)1U(-lrXkMj|bq@5`Mr9fK0)azxAkTUj{vYS42|E`UugQ7;a zYp6)Qh0-x?BrDHsYFSHrcP-YspucVbd8@6$Y89({uWI8+7$$t2CISD%*?tG5xevqe zr1wp|R*g=%-%j-chhr2ww%}nJA#uP#Mo7?VCAun9uclOnmziFtmWA^^3+n`>;c{!@ zvW%Y+jP4eel3!I}soOPjc#h|jLk>Mski(fh2;`F0*OheM>*90flD5D-$q__k6R(X2 zf}#jLWV5mt7j-DR)TB!;KKHs2wx>wYo+8Dha(48xD&vr{K@cipLf)1}kBD(HQH>xO zJD{FTg)v^o=;i8QF4Z+XlMsB3BrLdJT?e5&9>RP_GrERkFS zL^dZfy>6K3g$RCcZPbR}m`x3(GwvjK+@c! zw4yOC5QUF%uwS^H0s0;uJ~*_K_Fv+;nm2W?v2zIeFm#Niy@7DDd-)QA>LQbY_xSn0J^uGA^Q&aq zA&xZ;LTq7(7OB3;KwR;ii=JV+u({jZQ!~g`GdRV%Rt;Wl7h8BK)EfrR7mmy3bB(|l z`HzqOE_Ash`te8TG(JV8STSuZBGM~f4(gkEs!pQCrmNBZ4rVT$jGND81YKOm)Ke0( zG>xefMw4gLn1P}J#pih7?)EtzmtS7IeEie%3pJOPOqMhmJE~tgCrR*ShkUtEeByKt z^N+^QuybMqtOo&3Cf2C!H3_>o@;shgN-poHfdKE#REv`by<I|o^-eVCYdoWbw=q;@#Q(M}>hW6dV=syp4w3<%tXm!w$lQ(f_N7LtIL~+AXZAO0H zUEWM)_vOuTy9*2IMFu|Nx7zj?J+5Qym~9VFz9zQ4Hh}AO)V6m-a#G$N$=!BO;}Z#r zhkKe4wce)24>J#NQ{$7#2RT|Qqnlb6Nt{->Z4>{x8I+3@Xp zwQLnUgV2OG`}Iy{(1ASmz*UmOkOXnh;46QA~ zHcgR+cFIEAG=#|(vOa}AWpnbE3v(2g_3_fvJhyV7$R_hYieO}3fsuJ*a-bNG%p3QD z`I11@gmyl^vAX(y(1~1NuwdR_^TbljIFW0|iA+4QW3*u9h=t5O2QM&Ou@j3+a#B z{u*@G+|l_DqOU(nPtZ%zIs4RLh<8z%12`J1(lzh-K^|>kstKiJ=m@h+;^8$3c+Kkc z@Cc)&phq|c3;OHTub|aZ&~R9OL8o1VMHNzki|W_828(K1X@t*R%Y$19Lx4()Iwl1! zy%v4Cfm46Dpjz$Mt;F%!ts=hM?l<=QUxV{Ftlh5o7T~5g5ifCtBMM-~<{Js_;=qTeocJS(znHbr5&VhS?vwr)D_zX3D*+ zo3PN>nKAB5Z|vSOVI(+qFx{rduB{LyS)DAEcqcw?^o??xsi4p{Az|~~0 zBbCq&9IY%V+8FGEp&IIC!P%%ttT8jPXv5Q?&A<`V(t^jh9XscV{&vhY)(_#{f#S$f z9NuN(keupCWzmg~tFhzaK`@|VvW}{_Ov2;R#Z;|M4*YiYE&oMU3f$0Ld*^GUQch`U*S%ZqcZXORdJO_q#r@n0(%b z-`0!eHWGTg*jnBXpba3bkM77Q%zz4xlZct1?yEms#>UmLQRiCsT*TkRzbtDtjwGarl=|k36dyB%m9VV zHKbA%=IT0#_*&LM#MiQ>Au82OQ;GGdL|iI0K}(`+%)AcNp0zu-i%2PmV}(`|3>PaK z_El($Z^!q0gCD+FiSf0I4QD&G=d0`!+=iX& zUh>Iy*RJ+5Q1}!pLG?bp=8NUmv=+uPG~N@%{;W}tG7>Iy?Z-< zcKQ6`<*UD*dK30aXw|P?KL7XAC>Da+E|yMKGGTG)08o~vd6HlQke~_m{Q1SHy=+F@ zxx2qh6e@$)lGv9n#FZ`-?1D7O(!}OnnsP-#e#F>J8!v#k<1E_)O*TlT%a}YnfvBESPNo=HKGKiRxP!KUCp+g`_ zLP5kdA3X%3`4k8k&4VCdG!KD*(L4kKMvLDR1dJ9(fq>Cs5(JEvlOSNUI0^)emQx^L zv>XBfqva$B7%h(l0i)$)@EoNf5HLzZAYhb+K)@&+1p%WK=1AS}`OS*`!i~RS%{Sd@ za|`&LtBpyZJ&&G=h6){D`Nsj)bFoqWcIBd0euov?-3Zpur6a)kF7DtrAGk)t+HhIx zTPEbmlgVzgxdh~M$nO#v@@BPs50M*!vh@L$6a3*>C4YaYfIpwkpI-bK z7h?E)fYu=tFRJRqwy`Q~xY}H!rBY;+V5^{?ls56W0pXD4In?0VU2j(V_tz3!lkGPf zzC7?_ZKEx(H|!dS1WXEevT(@r{WemZpq~fV_$PL=-$LwKEf2=e!J&4TK>MCA`KI2f zL~`KE9>om`a4Zpkl_hvve-hjVNWk~(NR`boRVr3A(q3tyHdxtHrQ~2qf=k20Lz7Uo zu2Qg&Zj9*RL*wl@iN5;|-xD-ODGM5-lm(4Z%0k8{W$YNI25rM^+lHX2C<3*0hv|(~ zLWihKJ13pE6|O;4$v88p6q^oUu?WdKM6}e)LU+@t-`W!%u_wU+k5*~4FX%8( zw#vqnKfYj_$!OOq3;DMy5{h=M$f$qI9u)X>+g`oCcsW$IP3wGLSG7$(%=3x?$wv>R zBJ8$tWEBVDXfd`ij;zYDue?~Z3S-Tvqc&!#*TiU+v>%R!?3Nox)_6Etl^aWZJRGem zj4Nw69L++v=#!7g=*vPF%kMH^Y}xWpa2#N(qEr}&He8&hD(qRrP~aCl7NcX%E?&NJ zG}Wpwu}BT^o?V#+7*#fsq98lHt-GxhLwJ`_#F(#$xe&glV89cN;frffA)^Yu+;R?^ zrBTD9kBi;4(H=qjlwd-Fm-T}z%upYERRWC6wruErPTzS%94Sb&pm@t0oK@1EOqMVP+A%glGNy{sH$+(NmXft6qs*RrY z1I()q0(6gp>RMH64^KK+qOZ{fe zZM5N;x=_<~PVHnQu@97EihDU-l(jZ}g&z9)SKHa3L!fGd)=^+RUFO{{8P_(R=Z;o?8!0MHM_^I~vZpuH$%W=cyCR_ASGISf)F z#9T>lF)F$mimK9Oe8}2)g->x}ZbPER0-qi50?YaB3`|6AR2{~gXvFf2q za1?=GW)PUB^e8uK%E^MN!}e#5_GjiaNnH0-jYX2^;I2ljF4JK}g*u%4RHrojY6I_M z!+FbIIB%U9{ojh4q9<My9VJyzP6;C@|FTk5v5YB1n3+RCr! zlD066AUSm(9fhdQX;^;bY|5DjiAG4U%+tsFAwF``Ke5?Lbz$^r?sARCd9wC0!vEgL-*Sb8iPzYK8b;%~}>zWQOC+aXai4P$9 z^lL!MZ+It+(j|i|nHAO@!_8Q?^i&;@h>l8q_JWK@Eiqx;Tr>Rp$9eJhloK*|o!F0Pjjn2={Bj=2{RYb(y+hf|; z^0e(FMRz|w(7(YqhUwa3@?UROlKDYFslhKLX88R%Y8@Yiq!B&Cj-grQ2OD^_WFebh z<9p5^$>;9Jd-qP@0L02|ruVL*bCx%w9_zv)?+zeUjUEmj>O6{GnNN%?q|yVSx1ysC(0 zvL^oTCy6mHUP*k_ zy;Cp6{l{b@74*n?c61f^SYv!(lwvOb$aiMK+-a5kvE-g|?c7y=5bB2n5izqaVI#I; zJwdt49X~&~OFC&rn3)I9PU_BB|ISHI=AQJ_oiUt8>qgZbg6_tdoW6bkAh_=A49lk+ z&Ttb4`L&6)#Z?TtvRK`pzSOh324>1Go`>GzX>9qY@y-|{rOK%WK{!}EO%hKnp2h?k zV2{1C+KEnUhA|TKn{U4{vStfKewS>3Ri+nVlaSz$b!ps@Mc5?ls}^CCYF#R?zhV)Z z&zFJFX^FC6=abp_Ov8gSmR~~K{(M#yHZnRp9h}cR?)AMP$ImD132-POHfOOd>#bS* zXs0L(Cz3Xq$q=yTgla_-Y+-YaofX}C3Z4LugmyIK2uIyG-+i!yB4IaAL+ICWmN7xe zvD>)ESwY77WEm?DORZe*vWZaPdW@A|0C!_x-LpYS!P0}iS3`Xdi;8RhsTMl?;~1Hl@il&jv*p?QcnZXiJ*lHTbwo{rmWP%M_)G!VB0SG>$^TG%8ClgX&ZRdU8|swUiFD zl!=`KMcj6rt!4b#1CIqB$zZfTQ`m8s*xSlom}$Rr2_4d*;4>kB zL#!vf?AB)MBafQE9UTzDET#uTVG~2~T@#}Nt#P2yS(M=MT+@X|%VIs+B<~%9(-NCZ zj&|fTY?-pKG0rro$%tjjlK3A{E52H^u_V0mm@=lP_B%F>avy1V8Gco&_XC~}oisJg z!CFc2NRXvQN`H-~%>4|QQ(+5h`@QXa&^gEq(qzI8O!ovOH_Oa<{a_Hnu|o=5Sjs~i zw5pVMeA~CC)X$drGa59bSjGZo6eDrajAA5|&cUWJ`X@B7+1;&uh|x5?ZNKcB9Z5T8 zcldJR?)Kh2OD#0V$AeK=ZagGoK2Mfg;68_1y{DjuWX$Qwib()e-9{5V70es`?$c^x zT>})`Xi352gWxKs(X<3C{~-x@Fo{RhHe+SbEzC+5rVx$86r$t^3dyR_pcN;B>;J%a zm!R`*`p}5cpr4&pAwN5-f_`>Zg$Y^({p_p`daPKj_X}DN9{IF=N@e8mltldRUlv`< zI~h4}b@Afz=T}#6FJJ!g&hMQi-0ZvVX1~3bsEq%@1p{>UNSoDk;IN%F{nw|-kcH4} zc>N0shWao!9beOoz?QIP61IdjA=nbugwi?~Gie=tFkbWwGB%pmaj<$--tfCER|v8| z`KNC#|9tUA0mscwqT8BnRuC8_FjiHZwdOQ` zsH(VXF$rN3DU0TSppv&0w#d_qKc7b5vE(!o|HLPt#+)T5uD;+!o7k0N@LA;wK;>Qk zI-m}>!C-5~V^uKMD<>MOa-vq!oAq|E?)Ws{^B~^`!TTA4_m72=uyOEy*7Z>dT)YN` znD(Q14Xm@lFvEBaEh5^F;Wf0fob+#o*U-lF7$}7{#)$SI*G`)Zp(Y?+Lz~1$y+lQ} zjzko;$&gfT-8lY3yoNSmN8&ZK=_FW4n})zb+B5_f(xxG>kTx3y3u!ZABIIfb)F9o% za^Zpz@CT3x@2)Q9PcPqGJTcPZN(XqETsc6lj-)hHv9b!OeZAY9%6iH3ovd?gdAiLE z2FW;dW1E>}ISSp_Vw&M7bYn{p-Ej=MvBeX+@!I7rF_`VcwaZl-gW29VVNLE4;@#*m zgg)G^OxPu>xAMe9;z)lq2%CNAhL80&Vq$uB8i&(BU`Pb&6(U;5P*1T|xBHu&D$fzs zVsm?6%lbM8c{p!%fc%Qz;~^vV=k@ByADOyKf6NB%ey+4UwRSqb(=u+~`{;gUascFklIFqVEXC zxVMObpAHFfZk&F)yDe(Cc#0^Qy^s1B3nw<L(J+eUUmQi5I;Dj@c6d%oQb7lNP7 zyj-8}qF3|BPoBJZ_4GoTUDtPm zrVd7nw4KkA%yl=-H2TBYBe;sERBc6qqqAn>h##k|Oy6^-MH=@|DSid*YcpUnsGW=t z*wK>ZyEj5sMhJnSh#+%Ij9_!_IS)dbtBI zwYYb+#x2$PZmB~JAMYSjCueOK0>5opFma&e@pR(AfI+A3n@-Pf5e1()dlOH5LV6Jw zj<4Lnt-AyaL*uudNm;0mdndlpJxOxr)16Hp*re^q*G^|Qc@WxmCLufX60*%=;_=ix zsTKxGg?OX)w^vU3qaVse@&^9Xxvf8V7EBrw|&6pd@(%N8OauN|Lh;o%AM4Mc z@@)C$gNx^n2*Q5e*3QSr<5?VXU2uffAM*5)k^mQp^HhL7{zQ;*Wsp9td zs8tG)u&R1W6DQ`-e$cVZt&VPp1e&@ByXKie4(zv!IKoNLA|^KU zWZD`pL!LxVL%>L!j(QR~#eLwmUe8(0t`U9njZXO#Yh0GAQWpO9dbPi4K_cw8N(?9? zOZyq%{^*w9t~Q_j#eY|O!rd3mKCEtpktO7oY9V!7XauGHdP5Dn1|u}(VfcGL0IRmmELh0ujLk7$33`*EG-KpM~y*=V{i{# z!~YM4<0;R&2G9|AZ-7&7>+LVXR+q-Gt{bYN1ki~n8n^YXR{W#`2;|Q@1$D%Ey9L&3 zq`QgR%}6q;2|4HyQc&+fuSdO?;9{+(m4GIcD9RfWT9eIaq9`}vDD_Rfxt(u!tF>N{ z@`vqt^!P@Maw*+(H{fPd7i2-6{n7wGMT^~*-*i#)SrY;%C*yOa-|&t`#MSrmPn_*{ zd^@mX+iobJLHS*G#$BO}$vdqNT(mf97A&2^S+H~tXBHG-sCxV{)e*T)beyb?$T5ZR zpHLlt8h%y=j)*Lj0qTOE<}=>Ug=3YyN}ri`X@HBgC=^Xarz zxcLTj1K2)RAGk#E6zq5QNdD?P$0$DIz%sm>264Nq3s%*e_j~XHDt9{QDo|KYspikN^G3{M;YR41W-6_j0%StQVE~a`tE`2nfY- z_=m+xB0=ci%`Z5346qz`Rr4<71md09I9iV_-KTWQ>h!E2S*s?qEiemfsG3c01Zs?S zWJ`w;yEyEC?=TfHaoV`0Wx6B|k4l-8%%x4{+0tENFo_1M7+LJIE3RS1ml7aurFJIx zLkZ`c>MKcbqG^9Sag-`p z-RGXPD@+uG7k!?kMNFIkg|1)|`=#jvSW)5w&z~F6tOp4Cqly%(TEjqNw%SW8&q$Ox zJYor#w)gH~|4JP|LAl?*G>+Z=mFNo@0Z{Ht{R-->KIcKYoBmOm!8An>FpC_cV-yv| z|Ij1(cRtN+KlM>*%B^!0{;})~&e7O)!04^2H=|Y=@#iyq7}w!p+}M`f(P>HLBC6eu z-T|zRnbk8htDBYRoG<`ZGQ>?PHQTzAmJ{GSZR8#J3}}5On}ToYL9_zA9(m>}zDhg> zxCd4;#01P%n`palAn|^=JHdxYt`e(yscUCzQx9J09;9mf1KOQq542jP!Qmxwp-<2y zdEPd2xKm|-T4Du#UtMLARfro$Dnx@r^NIu`bGr&taE4C%Is?a`*(k>_q^@E|ts--p z7^g$t!r|w;M-@HFxxTb6d|=qsIJ{WL(#m%uo$O%&a-lwDS97}No5iY?NAyDULxq-8 zVf+8WF(gHz_}#s4pWx2-ZgI;YcgmS*HT4Ih@}|EIPk&>kf9&+TljeKO-TBD|=BLr< zT1lI!pb`goUHlV!)6-%sSQjpa(Xk^~lpVpMI?panssR=n>7&a+-sU0AI7xi`#mvTm zX2il{Y|R))p$0p&kw?8)ol4+i?xA%i53Q}*uB_yKYJl=d-Q=x%cou|IsfE@h5D^h(K#O%aIeXIz!VU z+9)AWI%f%9nkwW>2D_3>RxLsnv|n6U)vYX!rT9@2h1D{Sy|(+jFi5q@YQ(DdDA@LO z0N}@kuus6ul)jK_Zgzh86?c49N(WZDhokZlO(qTIXX9lPi-?;xTrGT7 z`O;fT`hUh+aWq&MSHQ#-|4hdR{tC?;{s~Ba@sBCKR~?2_7cnu-h%S%925K-tw1PWp zGGP0T=gWC#?IaBnEY#>ed@yjRP?l@9xLNELyyu*e)j_W2Z!ce5i2pqK6FNRc=cKqy z;<|O>Cgj)X$5&Tx#be)sO^q%9aR(iA0f-AzhZZ!>1Ca}&MIdrPv+m|e*wHZbb2V-n85mxG#k-^ zPKO?d7Hm57fX1cWLJ!Xu|M9~^NsC{1bZD8f3~61W2@RbciZ&srcpB3Hl!s_RCek{^ zWvZ$wu-dDNA-+aGO8)vUK7(}U1Lokk6G$9 zmK`E4k=`o5m9;(mm;#I_P&C73uU0#RYs;vAK_ylz`$uNwi^rpTSWYzduf}jq2-7J<+JoSxJEcN}q-qhkARkBj=cd|7s2pJUypicG| z`M8fV!9%e9?c$Rxnx)jh`j$IyI#&qc1_@VBgXq{?_5&Pfvg7yq@(hm1l+Zhil9TBE z=yjAD7}F%j7Sn2uH`4k>qNmN}ARjsdzZ)Kq zgW)@-1nR(KQmM|~9Cp?zUwP;=)I9V~NIJ3PWM5||(My%rs*_kHPnmTm!IGu_5CVc6 zuF~T)a#ia+6I}Ky`Aa`{jLXE*5LCvojFI@%n-{y`wWbomSP6EBX4k-N)CF$Ka3gA& z+KB4TEAJz|Mn9TA&t9X8SP>hYlj8A z`vI`ZtNqRq&~k56Z(@_VL*iW~_&Rrt`^04T9QL3f20dOg>4mD|B6$Y{jqU=R1qjwq zm0cD}23fu|+pjETCV!c$GoH8zN#U+-Ff7J z-uHCaL;daV6UrZsBZ=c6gCy#B-l%V?oU)RKN`d=rb*BFZkRA71d4RJQre36GyBDYB z?AXVuNl83)>?tk>F#lb=l979cQZ^Z6fN zzI!sCOQ*K^0=P=Vrpdm$dVX>7I+_XEiQT2$&Vh_4m?n=Hod@mR3;GU~;{G4l>0q=L zO)%JfR0B#d+I>_5N@Tb@a}QZJN#UKciZ(2yB_&xrr6su@uUGf4;LrgCgWR_S9X|7& z%!FOa3{`$pe~zSU3T)2(7D_^`)~As$?ypsx>ry{ancz=vK7+cV4#B_&CPQE$fA&Pi zzDwR-b?(DtB`U`FdMDw`&Gxl02Whqf-gXBbwatFH#2j4c*$qG2T|;&T7{RL+%dR_R zS6*Gc(RYbm;?>ps+2iL|7f4bWCl3kd4RKBo&a#vgrQ_8~G8#HX5N)Ph%QPX#<&Zn; zotB!qF+z+1ZRWBSFtn9d#7?X$R9*coQErl~=yKPq3}2N{waEqn^f#z^DX}f2fgKghANW6n;J;hJz8zy9&_83`B{NwfN2B)1#gGZfS0`dqj zr0+7qe(2CS*>=9>o4FDNk@X=Z`J^@x>G#0rAyEFlk`yO*otNAbd(D3Pt+|31PIP1Y zt|0D_Xd_i6B1qp^-$0HKlA?hiXa?-D zVB}Xx9U)O%>d z36!qx&Rl8Vc+wszG1E^%xgjB@q}#JqlfRetQ<3Kx&VQqP;bj&(JS)E%U$}U(wog=# z&mQV7+xM7bgR#Q)q6t>G>Ri{Q*A+Z|ABkTQEy#3=kZ3W@IMbvL7A~bpD=n+eCu!!7 zLnaGT@t9&DLLmVlF`UWDGrSzdXLkAWZBo2D(S5ak;v|@BESgv!u&-Ts-JC3LBQ77! z829gLu7A1us8><*Sue5M8mfwI4i!HOZ6dTk4l3Ac(@O88ewYD=_`rqXxxHR(c6u?v zn!ZudX>#RrXJ_{p+MxpU?M!X0_w8nDOW27qnLIEGGSR<4pu{@sR|#D8|M)@#$$-flP>>Mr5Yc(wWX85xI!O{ze2He zl*QOiRho@)%9YF`!_g z8P<&$i1wrDL9Is@c}(1W47{0W#>Qij#5)FxFN$CLIrc8{7umEP$~LIMIat5I`WKsSG`yL?9Dw$p4Q(_75YF2{H!5^F$ltLm5IKqX6}9dE12` zqiMK!h-eeadlyYYdGDeLI|71C^feCXzG+Q{1Xa!aF(L*T41f9@A$8({$o@KrMwusksBnX+j@wY-DlMnm#Fl74ne-aMao2Q6{g_u?Hjh5EIQ_U1l zX-5LHX=?4VVOTQJ!hqZl)kUXS+FNFgU1s59*OUdS!qF6CnhO^~i+D{;4~Mb_#(L-m z5t{$sS7*u3U;QyU6J|af#_j}T%&+U4`#(Q^et)rK_qU(7_hlmC>b=H`KEHONEcN|5 z&F$H{mrveazIrK7$zc0?;0Gulppq$`8igejV-3@^4bqf{Y06E+(kLvMXhSDp$;4$A zf+eGAF#cIInShQJS0{Y}s!7oD&tj7oG6YK|I4JIM&|s+d7$%u`ymGdKI`7y-L%KiS zF=-QKad=1??r8#(OthJVd{Uo2=99Q<6!S@6H%=}Gk&I?}kA{Z;SwnDSK>OfOQ?obL zN4-$L&c?d`hr4(OamYZ3eC-sbQ*c~jD~zXb$i(%jxlt`lls|EYO?q1_kKJJ-2$>Rk zAs8~)vA=fQIz4x6+=NWQkcsQ`t6|7s&;b}SV23GFEXzY-epwz0^ULy3m|s?mhWTZM zvUXv+SuR%FR8V%A$~5N1aURIds zz^-rV5o{82Qe?%rlfq9f*CU+8=#j`YB5zX09p;QLRLDiov6PMAN{I`T#(WmSm7-Y) zS4y-P%Lo^jWc>P*-KVRMzzmMcg0lK`Q=aMVS;>-5F63A@7EiCGn)(LeZS#z2-*SXjvDyQs&3s7VH-u2N#LrO`*<2> z5R0SFm~Al3U_U&n$j%V#%&V)nPkwr`S3NN=lsH(4F#V{j$cU{;=sS3*4IjbTkq|9W z|n5Wax0~I(eW`dO)E~Qi)qV63LKa z=DCnWqx6tS2^F_`RFa{_41!$kt@JcKBvVqJMwv$@nefU8l=a42%hT+TOi3Yb^~lti z@Se&I@5wwe!7=1+wb7Zs`^^SY#8fh*Fl?RWBF{v3@*GuSPRhGl=P?jjv3cO#0+BX4 z+(|~KuHongLe(1a^Y%Qtl-cfpR_8pY`E0^nC4$}cf`5Sb0bEJFWS`G}Hz;r<2?TQz zIg`=B=RQQJYMG{bII!3yP8KAr+FH!nDe-t?L`)jW!RWS1GUD^)>F;495EoB=I(MG7 zIOpe)5ejFI02UtY@y+U@$m=)gf%&Nd`4Y`<4C_wkklV8*9~D?hfd`E1CEyHz-y zeqy{CVj4FphE4_yi^q#$Uj5t8tJN>FlfkY_M~H6s5!zuVw3(B0_vi<{%2P#b|7fsB zhJw*U_2hK>xgVP zI`g=`?%y4FtVSVIrM4BWl#Y5r69>U1tLW((+b5bx=A_3ts0* z<1+YHN?xO3O-NqUuYlsC(zmtJ*MTn6(sz(5Zyc(Cm}?y+6(W4xNj@L%{DBh1V^pH7 z4d-nGaNnU4#Vr8x;VH0v-+>Y(t5&t%`Ep;0Qa2tbQL>s<>jO3Pl_+)Vff6OlTqz|A zZ|y5l>ed4#sw1dG;jMioO5S>?M9B(RN{PZ_@V*kIZaq+6p0BcQO>!&X)|eo^mUUl8^l6Bxoa2~22u65xR31S+92+Wz-H1f z0=J4Xo^BSmi``rbjuUf>HKNqbp2>z58;OlCqL1eVO~z!^{+4UpQhh=aUWw91Rj*7& zof{+}paEP#?6}@8eH+&4hW0gBU&a=l6H;D4a?AckpY_18Bmkeu&@bm9ANlt(?nt>w zWO$N{Gw+YXy8b0zsbXIju@t%v?ts*XH5JXUm72nRvxpQ6OCM{LDiJDviA+cxL~%Im zA>F8?^pHr!{St~)&Fr#;jzO37e@eVp%x*;rH_KPFQ2&O!N$nY&A}Ddmag$ zMh6TE!WdX9*TNJcQK&SGM;}+4U!si=Bs*X2ccvPoVT=QVH7vC@Of>|x&Eu+zWnb*r zCu-r4_GN?iz>h*6%a72M;Su6y_&5HP;N5smm&=qfHzIau0UH-O2>@XFTEMBN>kuMq zOdbHc_BT{vlEmI^u$NU{7#un6>3H5wgu;eQIK^E7v2g~NkKjj{_SPv&@w3HUU#*k&`#9k4E`z-qo-K@YiCOVBeK1p9e z!|=4yjlH5?6Qf+0{n#sHk-{W_4kx0iHs&z7abvH%^Jt=wK$@L#$okI@6)p`MaKt4E{%h%jJnayOJdzQXCnE@xBNVJsrQ+5Ke z6^sAPSDk;04TC48K`gGl-~(?WX>5-CV)w`o6<|sNKqy4z=rr6}112^r##nAbr^2Kp zG3IYBE?xpg`Q_XB>$h*BS)V#~V3kbTpb$Tfoi0w@*HucM`H|dC*cPd1C}M(C^2|1- zloKbO8@|fSd7kG|sTEk&cq%nON0)LY&Shz1t_l0-8zEnAi&~OA4VOZ+a>5GfmNJ$&+OiQLP%t)&d z+tSK?N#T*dHRVJ70z66K5r&8RqAJ!g#xm;mB@;UUHZlEaP|S)Jr8jEMf^Sk#2)ynx zchqNMRx#6-bi}-hy07wv-i4=0m5pPBwz2anQsBzX4Y*;-yfHZdqoPd^jV_O+PT5se z9ynb{me{kGEy0nV{?ACwDS(IdUB*BojT-iOMN!H)6QTpd33@&?LC9`!4?a*+h z_}os0=Sf-p#mXATF(0pERZ|C!9_RYES7`}b-(@Ov`e)a6x)y3P>Z{u&G zAAX3wS$q@CR$V9B2;)SZ0-oB|C(1$@ejFT~9{)IKJ^46wz<>M$ReSSD`B*iVvzc)R zoPgv;aXXDbV1nWDX>i0m2#%Ns!4dNyIAT5yj+ocP_;{Yk9b0;ff4KAeyW$@}mgKXo zJlp&MpzkiNZ_kZtjN1JMPYA$T68rK$*~Mc&;#DS~vOkVUPcbCXvBvS<SV_UP;?Ro(xHy`T_y1bFonvt-}yqOHU z%$rcyWzIrjmpK~^yUZCn5ufs#|NFU14`Q6P7!9%(Vc`o_BUuhl9~`8A~w~jE)@Djd4^r$x%fd;;14Haa0kHa#Rspj@s2bPoh26 z8vhm~+H$qz|E061dv`E@MI4;JA_>i3k%Z>2NJi$bm@H^di!?ZYX>k71@%c-ci(_x* z&w(<(e0llg=L=0sreMyl;c#Bk@qrsbV#w`0?2z0k3+)I+W|8oRAt(y0F+VyX5~N}* zyWLGoAPqOWc99F6SpQlE@4nBE>yNtN_pl0x5%&2kIo&B zED@1iNIb$W$|Et#E`$bD=ps~VkQP{Ka7=|RMoSHfOH#vu<3*VNpM?3pR44hGJG?6g z+<^y)8ts19Wg*y0UdxIvP zw_BJC2b8PAl&gZ2tAmuQ$0%1%Q?3qDt_f1E8K+#MDEH(i!(2Y$?C)dtK+y#4fuaf7 z0|g7&0|lG12aw8aY)fX-TXGxRlH1^x+>UR_t=N*6d?7f9x!Zcw%gG{thB&D=dnVpq6t=69Vx^rnwUHzdkUHq9zIsV&D0LpYL#fnQN*1( zh_q1Ez%%E(L7pQz0FUgt-pDwd+wJ=YxRYPLp8vT}PhA&ta6v}btL^SVFXUBWF3i69 zcKiP>zd4PT^{qu5FFK9PlzP?5vox;?Cq1Lkh-)JdW`zPAkJGkt@zCIF^y7NJ+dlF- z@?^FCtYXoUsw%`R#S}vFrRMQcY94PnyI!ttR_~#XQS=zViJ|=#LT-hw0(yqr&CZi=ToqE>yo9^2-o3tf^ZeDT*LU;*iv~+kL5?lpqVO|mJ#P7KzZNfG zH~Urr6sb&R1Z9Eu%tiCHQPl*KfFoeT=kS2Je89{hmQvZO+#RC)Du(FYWP%<_JR2Q> z_m$8b;m*nCDtAQpt-Z&oDvYMb^t^c5wkbo#5vW@kDItOjI zi2X4*aR4LHo48UVN&H8jx(m@T(w$a7LO(=WPI+^inZgL;P?TjxgF*nT6%Ycv7!U%n z*`G_I0DM#Ca*6y3D+GGp_IGnD@-&J zHsaQv?3K9!uI%#4>7D#4c+o!kQ7?~OZ(T3mJ%4-oF_W5qkUiErZ{cj$kJvR}u4^yU3#QYxJXc&m()-t)L%T-t6DM z2azigr_Q6-fVwL2mF3x=c+}@ep8kmr-rmu%3$k!3glj{IDe>sO2$qdrKE3$q-5Ws^V=0lGul`TUJ(}k+FE3rk3 zU?sNDCof)u1b_GP&BfymDFR^rd3pNgQWyzXcJCg7X*$i!3Qyk2uo$WG09R=yKC=Es1Dv9N-^emG_aD! z)D&}c@gS-9lu6Wgs!-pL-HB;JrgmbQ(8-;cCM>iQ(==8)aW}LR+b1alG;A9gMi6TH z?RtkCO;ZCx&iW1~7lfRq)6~n3vCzI?>k(fw&4Q5lGz&rEQxby2rz8l8Pe~9GpOR5X zdAaw3t-1brM@7|o!@&+byi%oUaTAuPjiE#KaMp{5dv@&Yn&nm;3(EOm8V@Y z5yLCa=I#^})8VC=N{_jR3BPYru8DWxHMjM8a2R(;(rP?=n0AL`RtD3#g>I_G_*yAf1O zXMEbdt>|%JEuHDa-z#!&uK;a7t%@dg{AjXFme?x@T5YtpX{uvo^=PeKTv_EhG~uhT zQp~hH8k@-Nz7Z?Y%w329ecSpmeWNE!~rBfOk>*tJ1J^ zuhJu>`!H=((HB)iZCyjU*^Y01h=4-6`rZuwyxpFhD{-?}zL%{}qZ$4UNCB5GE}p%5 zlf1or@+a%vtz-~h%;VG&RKiUO6VfH9sbZV<=-zK;cr>lC{E6bx7@Mf6>21z9H6)&@ z4p5QcK2Q<84`0%7ofT6nigrG^6E7m6 z$|twrD*vi2xGE;M;Hn6dzR;vk^Fz{SnBQI%N07e!he?0Km+yDi9`RdAe6jtiYnI-n zVQ=1NZ{pIsq>~gXS&%}Yr%MX40SZ~MLP?lHlpaSReXt0g`mI|y3 z3=}~7Ff6-Xv+n&lT*By?@RQc{cKdO)X%8P{t~lAia?jBHw7Z2mF%TQg7T#g!j2^*7 z%CyKR_sR;w*XT$4TqAq2rXb!Pt|(YlLH9{jh1@4q9de&kbw(|b%GV`Z&u6qcYcpI%pA8#)db5AR!yk{i|jI*&piZ2It>Z2ItvN0 zIvW*YHKh66LQEF;7p4y#u$cidTP)`?q)Xf)|1W{RtPHEOpbV?CP#}G64`)UK>1z^5 ztTkZ>wvP`+bf%h&SCGURC6j^obsh@5uk%pgeVva6-q*Q`@x{msCle0F3Dp!|-1$BK z1UX=liB>l^@Y`NSoYh+8jZT$Y_Z|Jssm@Kne%qf|)Yj_4##-3j$<-Tcgh?Eodn}MN zF!#X_dgs8%MlZrIUhIBdFny-e`DZ##V)k(%FN&5|FW$bMKYo7k=B=q2tUHR4oANHM z;=9-L58c*AAl1rnBxzAO@>zb>vo4xH!p0T|X{eg1j6C9M%f?%RkWzJtC1!_WkLrs0 z{O1T(JXyjJ0x{<3g={AW+Y7sv&!fS>|C*}6|0Wv<{1@gZHVX&-2PRWJCV0?ZSF!F; zJNS3q@KMAaeLw%eO}y*8mw{aE#{iNHD#aMck4u9_BbbsXBVY7!EGXzh(|S>wiD z4aOdXozG=@YbZPl8y-lpu%%ZAExkHu>D5z~9xTzthR>Cu7yW2l#%7`y>-mNQRF2m0 z)JW#i*F5vH4n{(-cWf=2_f$^zj%MUmV*H32NQH^>;{-aas6Nt1Gne$7a7hfjd*7Y zbQOi7_TAbUaUFWK489B6_O-OOCH!@&3cc1mZ< z%ZZC&FTaXsx%YU}VuRSPR<|ZMT@yoN057?i0(c(8?61J5A^jVxW&49m?HL?)t=DUZ z)M5(Z$#6kO3a=t?#4WZ_yLTKSb*pJx^{V70)F;|;wB?4jBvbX+J=%7pM_XbGz(zQT zN0IjP+?yrwUGVjsoJ5Lw;56{#HDBssMjtoz+Fh%h9M?+?8P+-bRi^zdF*ed8u9BYN zhJ^XYiQgG=l>@BUByo>i#X-o5e)U5`kb9A!7xHCy9635_+)uq2NbB#aJ4+4U_%zhO zH6lnNqi>V#9L5eST&P?x-#veBUf7_IAnlXZUC)j35sXEBkCR99)7@S-PV9?Sj2YU=1M)N5h1xU^?{QM9ch6OO08bgTWc)uZ=@E{3yc&B#?N6bel?9aLvF z4YAOcEBy>z;8$z6&dy-x;E}a@n#?Tbtk3gj zFXopomA>`Bjr?dd{K}|Fs~YLZ!K`!qW{ixnI}9?l0>`NVuN0uAYWA1KU(Z2qKoXsH z6iY}^_>UaC8tZ>^=AQ(?l$+cjXXf_6K!umb*o1_lE*p8^JQZKwC=A!8O1#kKGS1z& z%tjwI$JwBT%(5vyNq|p&=aJ9st1bz5w<~9V1+DcD?&ZaDzvU-NN6>ndWE$WYm$XF? zD!D0WkhI}|)~1X@q*ZBcU6pv~uVqYJRPv@gDnh0yRi;3kRs(tj1K;o11a!=}PZ}D8 z3vVb15{Cv83>zBCYiKGJ4_u|O&v#xVYExlU{>Yo~l9T0cAFacO-(%vwlN>yFx9gjod6P*e zWx66=*YF{AL#XZJ^hwF1g9X~SXH9>=rCRU4CfWfK&Og9Jt86Si2vcR!zKd@n+&WC zmjhy9yMYDm24?Jrr0tD6?TuSozGfdf1+b{MudmEW&PlXiF1&KO2O6g~ryl}1jF6&` zK)|a94c$aX$Csc9}9LMxPb7Bv=>p zHnFfJ(Z(TfQ!6crBm<-05%`YLKQt-Fdp#7|mgn+l;~=ZIaZq@+NlQrvhzZB8*E{@uG){S3)s~_b9!uErVJ?TZRJ1TPLP(#3F3Vpyk=pIA{^JROi+* zGU$L-sF5y396Jz=yy!40t)=0pw3bdrrL|QkDy^+TQE6=zib`v%(Wtbxc9hLu7B@G_ z6uYnDUS#~VdsVIvrBFInQ(MQu!`-$fp~Kx4D`AZt?zRZRK6JP%TVN%uL7VAU+d6G? z#NlMy=)=jxg*D+xkHmmW+Yb>DwvJNMg>iEzgzO8#D}n_N9a|PuI$K7M5kf5F0&G>z zRP3<7e>v!UYfVAqxOP@A6oCfP#^ivs1sOi=9kzJDki_-ehN;WL)a7C7@}TfmplF$6 z%9tJWz?i`u^y~~r(jDb&Y`b7OON;4H$8MpqJ#cvSCok4PJ&%pb%t%dXthX)duA%gB zqAB^hZHtFXI`bgj1CLo~+u~slJWoh)+u}+c&N@DrVb(V6fFcPS+_&1@re4o53scFN z-712+WbRNew1p?SwvMn)-P$_hYxJXh*dup8ym*_=<{|N^JS5%1;4YbEa71B9QKjG|#U42b1D^0KkH&Tx2ixlpOylUwN=HHja@!{~6_pu>>?bhs4HZ+IPMv9AD!>rEyQnPpRIGQ4xT*l2seL?H(_cvhMM&NHL+#|Z^G1Uj-)0Ecs3Gt z&Dpfpz=B!>3u+B*P-|$%wFXE_>DY3o&FE+b$L!tWhHqt23suS@YBvk0*K-oV&M2s{ zwFMB>?%HhI`C`R(H}aTXK54sxRPL=g^o-PoF5e}?Smj$zrFqM4+tcX${M_AgTBBaj z{+5&B3TsXH_2{`K#~Qk$=b9YLS&g1+a&B0rb$1=_fPixYi_N@)P51DGD-b*C?vVh| z?Y597sGifIJhj-`(whMvS!hF^@_(r3GSE4yH}4G=E5wihd4+WWMJ!)D{vY#aPwhLx zfOQ-J>qtzczW<)1WnswD#iqOs8&deYjA-5xntrY{eQn^1KFd-zGwAav%s(#lP8mJa zWoPl!&a!idCjf)7D~32ia}=);FVHWMJ_`F57P8~J#8}QrFPn#83mf|4c)|ULpnWz1 z{MRLu_L(Aw(YlW7#X9`1UImsyy<3Jpz4V-Km0LfL5? ziD8*9c-Q0(+!di6xC>Tp?XYqy>FrfkRF0Q!?I2AZsvm6F2iSzaSkMRs8S!TR`ts!; z=Wm5A@Zz;=q3fHl7{v+tv0!&zEZORIAtQz)rV8BnAJ`qeyYhq5r3J2%Qtz%w?Ch?E zM;Z(X>YUxR@MuFNBpHcg%i>9SnipOhQ|iNRuSo&0wQd_T3texQE{ti>p=pu1yL4^~ zQy?zc_8MFOpSJs3TO;z>yXVj6P=`S_)yOLw-Yzy={Bbwhv=7`XSnwl)k{>;w4}6wQ z#I85dw*D|@*RDsStBgmZWwOhS_GnZGSnTQx)F8QCH0SWg#AV9Y**yI#JIprMH*QtvUc(sMKCo|tLO37y*}aYLg!Og><) z$aMnLZuk;Hbj}_voB0~PoC%#*bX@!?jGOhz3Fa*db`ry~ebs=Jw#yAYqRZwSmpFk4 zi8oE`2r`X>%uYY5Z0 zlOWW8GYJw_RnCH}7Bj*wieGMS#9CP_Wp&lp(M|o?W1IE}w&7+>qlHd7ZrG;wdQ40L zrj|re^zyYVV0Q;|!F55q@30J>N>;<4bxFJv`zqtYD0(i8!aYyvbSWE9;{Az8Vst-r zIvh!C0|R+@RZQ&uC6u-{Mh(xTi3j>%(!^=M4>>v)I|E*q45e%jcR_v->IH=H57GKB z-|qja3+wF9%|Fr=B-Y(&^!nY^&-2UIkDoq$GxNZ9s~GXQ-3kUcce;&^EOZwK@fL?@ zLyvflUO;Usd4Gcoh?*ACHc5#0ro8v2goNLuE6b9W^xkAN7tw@;R(utwCUDRL((qrE z$^{)4ZDC&}1Dp(_i6+3b)I)*ETwP4GVAEwCs#wM@(LQoC_7seR^uT9_J;+RSa^spp zC{t9M5O9&;M-5y=Y}GFdTomKm2sxrQk5}&&&O;0;9N>0GcTdE&($>3LZYvL5ktWM- zo<{uBZc{T|Vyd?x!paG43!)7RYztLvBAcd|Bq!6`f@nbl+k$AqLLsVETm-@vMGLbu zDo+r*neZ#2913Fdvqx)o{fp8R_01G-cGng4x_~634YawIBuibAVN4RGE%f19Nk_YV z*;hL%qqvWRU#}sk;r062QdXvpG6ma;ka^!F_9lk=srz7$_c3}&FonNgU<(7TQ4LD! znz@qtFr6QD+aG=f8w0z*!W@{ON!66slY%oz zgNkgDX+<{A4i(v?#3yCPD6-b#hBa|2DQ2NIHG?7}K7IG%^$9q8+WqZ%w#Hp2$&RsX zMKh~`^)yn`f|%2*L7Q@d8xaRNb2psan;9ZOQnN+~b_ZDzzKW-+LAjxC&MA0w;O4u4 zh$NeC09^|>)P!2Akxnv?N=4cMiAU_56)H3Yj&R&SzYc=m4&GpaXn&b^ z8_r!WDrk5P3msKh67OXtcpLO1@fGi09y!2rdVr-FVCO|Lc5sF^@QxnRx(sdn>G9L~ z&liuMUc9j{r8>Tm+OiX=JxLc0RFG?$a(ft8Nz8J)1Zq>+(kO|e`&@#MKjZscLdg;P z9Hry?ob1E)<67xaqWh3;Z zlhmBL?{P^M*h)$L)Cn-ptl+9zPd%w~ih@h4|D)BTMGKTHS#P;xlP09%B}${ONzwU~ zPhD@QXr_1KLO$q!-L8MED`y!UF4>V zWjaWm5;>WhKGNZqra-C~gXtxuX8AbHkZ-zU``95FE3;&sW`(2BvwF*;izh$7dUNrw zKSo^N-MyS{A2xAo0uCl$HBi?i#MyNL($Z>uymn>h0~ac>=^acC1y z|{w8i-^_v2dmes`dFvqarm5eL{xRxU}%pxU@qxE;V_%flj1x(5OgL zZFeWh@qHMvCAeS{%}Tq~!70V~0Y#dI4;Io?pA)*9S>|tMX%;@{NHgQJ89SgzGa5V! zNil?G;!RpfpE#gMWp?lMSx8EbAPzC7E=BKEme*vU{?ze93L5qJ@k5%^spE%Ks?xM? zuo-JCEkZRM{y*;Cy}6Ft$`}1Rx60q4+xH^#hR!Z4i%j+*g(<9YjlUm zgYjx`4U6e|QW~DY)~my+R^Di9YtHpJ>+#MbJl?tA<85S>^2&)~PRwdw^}Q(pDe$TS zz$(~}csItpbL>T7FIXP*lIMOedG312i(=Xf5$7wk8qdgL3eo`beCJk(0KcLUFUg(>pTy-&hwz_JomfK^9a{@9_>2MBV6aXs&6=* zUduj?kR-jw_jz#83&bFvV=@U*;2`Lc1;B)Zn2cfg$tDOiKH+{k z${|Ed`g|DFkEp@`Gi7jKbJ6o$!&@wDR_ZSLajW=0#^sf=E=> zh6LZ#=+4;Vwkfk%ldvXHG?Hb`-CT;J>YgG_)7`Vq8^@~N7p>zAFK22r=!b7NL;-;9 zJ)!lD0vzO?sYGRPD#1N&(PAXw(IsZ?IYIl5b_Agw8iG6gO;y>^!a(vh*_7fnS_)HQr>a$hSqvdP?9NS;x`Y zQbWXX9D-hhLhI0;AY3s7vJToZ4P_m$CQ@UWC1GSO!V^=b#3xVfrIL9f?7w=ulv(&@ zC?W5(bGA$Bv_T%(0>@D1)4bm-cJzqvfXlP<*B2*=36z(aPHQ&(smA@uA*NkgG3^XK z7BTGtx74mO$$u4C2=VqO&{)rJV?%R`+V&8MLP*K?P*RU%tK1%0hb}q3o1x zK$R}uqjZr!bK#FSanl=LZU;Nk2w8+tXL~zg1^^)7b&ez&(6eO^&elHU7kPv zU&roR^1QhXet)@GvJG>zHW9Bf0>e{E3{OFt-eU3)zY5s{4+iqM^yGHN3#@%<0K~^@weTTyP z4(WZ@xckl}i(dC@E6GKt*&b6E6bgfAOR#!sCnsLrkiKB{VJurevyBQ`mu*DQx@=Ws zA)iFTR+Y2eDmrazjv~h#mLRN^z1#?bTwg@&EYaQuF`p$?n9rI_h<3nymiSJXPw49( z_Q`5#$F(^r5L@$yPkO<*29HOuf;O?5qvK$}c$SvtnAsawm{|TebSZd)vebcZi2<8{ zX~`|9oXHv+z9lC`Hi92JLNAB4SU&=91FS$zL5RtitLw*0T_7P+4!(*jhP{X|kOZ`yAyAGD>xN&V;8SY?ZaWrBNwh)6Y zpoy$SJ(u@+@4<@XVqdOkDTrWwV2zTSj72&IYiM9emC97o5m=*wk7X+9D7IR{$0#Ie zD{d!pN!wHtlD2?;Wa+&m?PQwsJb7C(WEy z@wfl4uD+{ut}#%u-yf~TK{p$+(#hDh?RszoPzAg}^EN;wd4mefu6Nu2z;FBS)w`jy zb}2LVP3iT{io!7loH#!2h-Di}3*g`9^z=6y^6z`PbhPxU4thJQT2ryO4&1h|o!?ax z@^)5XgP>|O6^rY@g;(86d9Io$uw|u?Q(on{(%`9VsxEZPv}JpF>Ker;&)e00Lum4| zSe$8w2#@GQ5rPPXv6odF#$Hx!2zyzzVeDnqMhIyf#9mf7jJ>RI#N^;0_Oj|i*vqQ( zVlS)Ci@mHmFZQw`L7!MfluxV~4n$|#wlHTT273wnG%6{sB5}vdWDw6J#Z{0&Jed?X zeYWHm!_JthC-+E-o4YmQ@~tZB&9|!PXG$omXvFyG7f2|p2LAwudnS~*7okX(;6#Qr z_98q#eg5M7u`xPS-UMDsA~Hj)HkU7Pu3FePWjJS|hMb9RbW_@KsXCZ5QHOITYRH-B zMmMDs>Dly_JIf5)IJ9aA`OG`CYEaHA$Dvhzfk zjHd|VNNTWLqMR>x8?lI4&1)lf9dQ{k;xatq(o1~xi9;5dBzN?%d4^m?47myqx$>H) zpE%?yWZ2fV*RZW?uVGu)Uc_ZX^2A2K&+mojNrRJ9TOt(HR``MN z2Ro6JAJJpBx|YLhFdGKqHD^4fcUpL5w>ENlg2%QgqFhQ%8R4;QO6655CiCM3fxlTB z)Xt>4N)wt_1N^{ClyRgj7}omF#;k52=X>6)ZlHET>6q0v5$L2^EZ=s!y_$3t&*}IY zB5bt426X#*>ED2EKgle8-yX_G`{Q}hqX^$&4dkHA@nf?lKG*gqjkET<#AC-gy*BR77v?3hp=@XcI9|6douleX8*%4HSi<`;90_H>*-N+*+AeshhU+snksy zjP5tBite|E5ZSa%HRQa(_lxc)xMM1c*XUgD9zNMkc@!Ejd`d@kbwnffy1`_Va7e4^ z((tRgp!1^XLdl#>=l3&-HYB1mB-|MiWKC~~-vuPv^bx)3!@cQ)u!E)#d1o5x_0BZZ z>z!$+*E`eDpm(Mjly?Rn;Op`f)$pR>PTrZQ*jY0~xxpK#h&C5HLr@NFGIlnt<;YLM z`Z!AOLnxViQtS-*?Gg03>=6`UkDxDMk08H2f=6{UM-bQ}?Z_Un6Rl9t9zkJy1c5!$j_i^26YLQbXOEy5djx5FWIB%qRnFR=o=o1r z26es08+@Cr*`nOg+vJvRxA=HZLDA|q}pgyex_g8gmfVU4`vLi5FbvOH`e#;=KDKdU@!`~z&r z=a7doQ-op>5%nNB z=7`F|ycmdvGw2ae1I+SbAjs$UJtiV;eV!EqMdbRUL1(Vd6CI$zm$^Q10UXdrpfF6V z)i5zHeMB3CiM3&vSgT=Te)@>))zB&rFGZ`dRkOSl zEs$-^@=~;=WUQL!rD)5Di78R|fZMzjlX4q&Vj1=kw=%h&y|GHI>oJFMRb}w3&+w|W zRhWpQg=%s0;-;;&$ve-h5~j&$MMXJ3O-5_XhbfwjR;8*((PXqxJ?<_v87(mB&eLSH zz@$4#lfjnV(bF?x8+EZX8DmYhjY|({W70!f-OLwkmZyB&fKk#RmJGFrMBu@{3{lfMq!9H}weP%qu={_L<}(&LYO2e*yW3 zbN>MId&)oOKF$7J&&QL1(-mfBDhwq;k&cDKU zxlvLJB5!?2x9gK(eew`N6Rx-nj&+K;5oUt%m|J`Oz>kS;!k&Pf7CeMQ4speH6Yd-q zjz=59oH|W-S17l>?B25f0~`b92Hd~}h>%-s+PJeXl^>NleO_=hJz@8f^(&|C5;Vx% zXgd*eCagGS(v#Kg`UWqS{NL)t>Bid)5&t;h?Nv^;CUfV>C#(JLYQ;-0@u~mQi!-g* z+I7tVDY#fC57>WB5(UiFtyTm3zkx3%dysm7`sRMQU0f~I4J7zRlp-x|q;C@bC;t8C zZzc6TvkH!+EqM0&oc;H&uispNBF%PwBA~;^THLY+2?xi3*|>Jsm`%s^VypW=@GWJZ zbN&Zt01wT?W)q*5VhWThWud= zZz@x0qGR>uMdgTl64#oz!B7ZPBeNR|C|%~1V6R7)IF@lRULp|MG)|r65lI+VDZV?{ z0qezD{*g^R|L=Ev3oEH$>rc*I$QSkW{M>XUDrSlspm`tbPH>_c6*SGz+QWa?P7r?`BqYH@w!7_r>ix}z%CjZ@%SUg3fvp<3gSXcT`L(If(tY_N zsYA>cF~kV`md(g-sg)@ltYw2m#4aoHDz$IitV|uhItJS6`KlbajYtQ)`=UgYxWPCG zsQoNUBA|i+maTgXFkB-CcVQ;2&oaU;W_RCtgq>#Cn&TrNYVhG7AB#b z9?Y%fc|I*nh>uST_o`23HQoG>L;8hH8`DdA7diTnFnIhBb8@A_XNHN_XMZL zWV$?Sx*|tamM7mbz2>iPUi@znN#Ps|bf?t`t)K|Lg@c^{Ar(xOTN+tD`tqbIOg|Ou zqbwXHzvK=K-5IddAPP7*85MA4M_V3)-|`slY4;yG1fP9iA;E1l)lmFf;*n#lwIm2jqVH!mhL&326x#0aIxlW zCp!MkE(_+FcA3gErHAxlX;mX=7RwtwXTKlRO&HZs@4~^&F4r;QViY5`-AG*?iV=5V zbY_?97;!O*5j#*3X|=)-v?c5?SN9njuV+q5w{SO`v2MS(=|yoYWnR%OH$7y@u8}## z6ljaWgzMDDCZcP4QwGmap|xXsLY=^D2Q@*dEj|#44;L|^%|+-0utPYIF59T+$}j|> z3k6C&Fo>=s!7fy3@ZRsdkx{*h{20DZwrg%qa`RY-`qAP!v3ED3yD%Q64#KJP%U6-$ z@g;#X4kb%@(@qWVRMxtfG}t9c3_&bE6YG+*Q=!06Z3o9oYZvxYWZe_u0fpD1 zO@sRj=p%YtJY>0*ugR~~krtk&;DNCmF|z2OaP087DASd8*7Sj4H*fQHt@8YP>&JC~ ztem7P?7D;dH?t@UdydbO@I+C^^4N^+$rHr2KJJ{lW+!34WqZIL0VH{OMu0rdPhpQ@gtdU_PVjmL!8ubxt)Eh0vbU1T5yj*3h zzw%$XjaBUc4C#A;)d<%$MdIufp-jHw^=v%9SgFJp`bycJm`|@R-ix* z+N+pPnJ1(?JW5s-db6h2yVY`gq-xgP?)J&UME!EJyoOClQZX`QUmUq}aS%XG+7)db zwpt=9DS02F6%Km>9U?!HDMua=TYtOn#*RE9(U57SMI0WBIFg~@8W2f>H%G5R^5BHz z;R(ru6OxA~qzFz(p`3!Vbw){n=1VKe23~XY1ju5p28*{e~QgD7IQxxH0McNMBT+g-(fO}@XSw`BcMJ2%9&a*#?u>WJm2H3Vuh zm02cLiZH`^P5A56Sc_!3?3GMMMO=P)H9OM++qa2nrh)Qy^N>28{&LmO*2cwAxIV!O(^Q zv_ue63qmLRpg29jsSiI(WI>uZ{4B9bc-n@9!OtFmX9>h3<}u@>125qec$UxuFJayq zH({LTiiGQZ5~%m-^IVZ&y-yOZ_er4M=Zxnn3aWOb+@Jq?b;_fz|I*P{=qicIbR)XX z464WOP;*pNp&9O{oG{1w>~M*!YG27gvfDF*4<7s2ZQm#fhcAc@Ukno*2o+=i6CJ*| zqi^&8-V0r$8c{U!J!;h2>Rz9Qa_##xIE8(xa_!5~O~7f5>~~kYPbC;Nlegb;wbmbGQ@|>p zJNfY0S$Xj6U*R($aSQ9#704*~Si_2sp6JkfUw>a~?8Th#u&xjk@HHGQ2KPlx-G38E1eH6D&8KbxFjzeE-UVYWedn7F*}~5vDceMJhJ-sq zLe8sRlCy<2fv^;On*i!j-WgeT|6S1gox%6p1-%BD&BwcY;haYk8Pib4u@?z79EWD@ z0)az=i5H&v_JDw|uy+BC=nM^aM%R?IcY)g(q3@%?*#)A7vkOE{O-gFB3ku=rETF-? z(RcUW1vCvI@n{-C;?Z#NNvexa4iohds#H%TjVeCr1s6RO?%^C@6dmA3JD{;4iiIh(&vbA5Ns z=I>LeDN~Ld$)I*ppd=WGrAcR?>BYh3XyL^i(&FxzL#DX1wYg$@cO^sSUvqBs&DRDf zbTVon_P&Cl938CpiGC_dx{o`$JsyAk>&0?8dOn*}tI^k-rRM9T$2*+phaJuDniF_a za`b=p+nuDBn0(Xmqa?XtAHcxzj`LCM-mj9yj^1t)yrGhomVaFXEhQdnKnut;3*FT6;mIv?1f3SJO_^AgGi!K~O1e zqClmz`O=_L+5|zR6vco_DGGr~DGItFDY^%!l(xzXSoOvWh}nxq>zQj(%rA*4r2zMu zKSEF}Xx3(+Q0sIOG$#A5at&EOb-E$DXOw(rvYUMh9~>fH`6^>Z^M6@X5|1g#0^nA%cmIQcVY$+pxe4q&D@_ zL5i0vU?Be=^X_o$nGPCN-Wq$S7-3E5;K%ui4oIM%`lo~RqeGZRkZLHJ2kAGY;kg_D zLN<%^8`5xhhSY=fOALre3>Q#Du?DH}vkY0pkTN}_d~~c3v^8@5B91`XRG zF9U|{09Na)VLJdKZ4MzdNE*Fy)*rm1&=C$Z;Bl__P{{HEBU7S)kD~!n@_Zd2q=qtL z?SM0U4k6_}TtTFEANX#v3^tC9GMlCh8*PIOS*2y4HX~1@Zc#<7w#+A)BcK^7O|WWa zpd8OY6-%%>)M0|vq4pB24t2!Qt~~^+_N6HuPoof{d_<##rnLaYXaSnw-7_=+&QhiX z00fJvNA$y*k{zd+SS6iE-B{Ay`_<;1@KYqKjeGHH=++cL><|H08vw30s}l|=JV;0e zxi`vdKpN#m?bGhOrS+n`hV~99uffXBx9)quu1%o41~3-pv(5*|=$J%#4gJ_`&oR0q z$ZNns=*NI#Kwbmr@pG2s&;`*mL-$*NyoN3+gg-Fvji)*^uIVlC#dT{ty4?t2OB@`1V%&11DcI(z!;Z>JXt zvk1maL+hS*?Vs>&4eKIfSeFj);51Kx_{+e$Y~nB0qy*wG1M5Og3ytc^N2o5ChFpWX z1{>66>C-qZQn-aJekSDj!zks_n+IAFyj~~o@p89KmaE-jSP<#%85Wx@IAz2|%4V(K zUtX_P@64-|%egIGnVvPZk?E|NCI&1g<#lP+k8RSzxRR|`9KMGo>=xQ7{9aZ$2)wxz1|=*0O9piq+ZE}M@ zvgzLPSQB@NCuFtRP$FYXs=5%wh_7jg1 zgX6B!;J7OpPsDv{#}oOl$@kDjwp{&cNoD<(aHPgzK!hw#5xKJmqb4FE_T$uNHtS$h z_py|f3d_hBg3WkQH}q<;<JUCNMhf)$<%?G@E;vE1CUJtfFcb0e=`%G0mRicXMFMIm6OgG?OS5c3E!81EE=MEP zQdfaE%1mb@M>uk9J5Y(($BHL8uPh}c6Vy5|a}!)9{F4Q~S^PKEu_mVFSxJI#PA`tW zSqRP5$NB^bV_BzO1x!`E(*b`&?>3t_#IbptA;my6Hx9T|yIqx+&Un7|(T$ zDwt|T?~M>GZI2e>`9rt#c1w415*A9KUH`b+yvG{>Jo+KY)m5N#-r0VUB%JK}POk8d zzQ-Tg(GVz(W9vqMT1Kf|%gA&pq#Ls)I^sCE3TtH)R_O9`*}IF2pExLp9nXuOU?p^R zeU{qkZZ*7zgmh=tMCr~|>UO0>+CQW(=CjN5*KaRgy!wmYPcjZ|LN$C-iP=hahB}LF z?;RhB6~8#&y(|B(}lM`L~!r8pUfwLu=y^rKuFDtEp73rqXM8f-emF+v>>Qk;dB}MG-Z=)dchbrvtGMy{5pNg*}XAWpa9c{`%Yn7FbK@NJtvO%CROyNl1DqAqzA6 z!>6+HD~Ty-iJ9awos`yMr$}hDO&^7 z&zTba^7VJn7j=8cGXkT59hwDc&{z|7e^i}29=BAMqgNboxxYAjbNb8~B4z9Hk=aFT zu~uu!*_~hiO*4R}AkF1N-@JYH?DWkWICz;NS(~bR@+-6{eHKDipn!#t6(nFGWP%dh zXCY+VNS(G2vQqlSyPKY43W6RGVG5|mmJ0;9vDb_KMCWbsAienLdbQ!^8NPbI+Sukp zCK9u_`GCgeLjlLP)DEJ?vLABW@sU;9LsVM^MDEODrR}VGm8HyTmC=anZvT)&^32-JNOi3aSOohAs%ItgH3tTwMT+Um;Ei}9wg~U zXK!7smfPQ3;t;}Yvwk!X7Ng6WZncYk3A+Bbi^4BW%IBmhWX-AE-L1G-V1ZxC< zmqTV9tFMb5_@0iG{61!qUHcK)`3Fqii|1B10bn*8m}hMwaxGb_Kz1Q(;o}*?Ss&4r zKB_ByAh(dU@F$GnOjaD4?JEthE`Y_Q9gF+|IJn$83y~Q2-gV40J+|z!q z?T$P8`6ui;zv1Wf=;GPgN%HnN`w!g_%i75E5Y-QB0#rXPf-rR&>0O#z2*TC{yk6s9 zsPO5$ev=5SEBEd&Yl!V!CiDKy_Rt;)1%!|9;gjv^1OMgNyeqteb12hl3jyurQB4fC zWg>k+F zUahw$+`hhHwzWBqK^kP%1bMxndF>mr+vnBRU7^($R;UTDP-ECktrbe`$qf=9vnB@T zaR@z@M@X-b?f=hPG+v>~;UR)`f^)WHX1?WBi&(k4tzD3?jWr3Z9lGP%Nnv{V{Pf5F zcnW^9_2J$T@(YbK|#QNgw?{D6|G)20}4dtXZ*HpkglVL%5fSE~n z_S-G@ub4S%!yBU2@+Wr?wb`LwJx0~8IY>K$>a;kQp_`IF$|f01;qzbwKgTEz-O5^$ z5V{rTomU&o!@7Rn!98nf2YPOPg;q0wpIoZxb3Un@lmVYqPEf!nm5Z>2&nK001%28l zmG`B=YhDU&^Ci9+yQa=n{5s|LrO24&p>6ISe{=fk`Q;h=5BFytWyidM`0jhW*zujn zcjeRbGZhG5(kr}MFr~zVzxg-hZ#~@!G%f_hbvWGZ9Js={86#tU;>fPcG z-F_I+FEO$6^6gI-FP=SpbD@>H7sFiE*DaHt3xav5k?Ev_{}ukEJwCSX_u`d#x*)N* zInrq7W1|EDowEZAEghwlY6ps4*gSWxe^r5XOy!Up?_fTZ;Wq&pv*%4DUSW=`&!!uK)!I>$t0Cy5=0mLL!_V@Zwoh&jG=x#>B-PMUJp6){4N zEM$>;Se#@7=_C}1S}-878|thqVFje~zvDhEJ7iHcMG5aJZKC+P44F<=6I<^rG+EnZaRpq|WO`7o1NTm>>KpTe`wre2F}Nx` zIIvjE;9RA;0ODrPi!{gDWQ7jZM1_WP8~a-fGh1_H<&CT$d#V;|5z_>jeUf}5FriFq z2F(JD3fbwIX7~ zcbA26$EOcZcn|lQ$qunoI@v)omicjhz1Hd|qENm)bYV>EqK9k<*9EOpO|iX?ZJMN`tjg!ZX8@ z3xMX%Fm}%HNOBq?qVZQBb0(t4e^_(gu>-!o6NM}kYJnl|W1S3N{iTTeh>93i=7p6k zeDK3FJRrX3az7e-S&O(b5AXL9DC;IQt}i%0!ZHi7-G0j8BaT=RR5wdqBWIoh_RCC9 z;Sbw<^7P2^nu9$(#dvyzors7%Ju=O^Fipf=pVl@xsxbBqIqH|0A7L}11E$&HbIngl zz=LM{iJkeWM7l(3&rd1lr!-AUQOX+Gz9xYeHngE%W`4NY*|&BAAWK@^bRK=;SOxk*8cvl;~bd80?@wR?_RAW!WvSJ`MniVtxIWcc5UU5!qn`# zv}G31Gt8tMvlc-_aoH+FafL?+-0|HIMYzbG=ObKXAEUd|k;-FjG6dmS5oZ^t@_kL| zyszO1S@lT!Es?yE?79A7;yd$7LKj}V;w&0JzWC|%{OIgQCc2mm`|M+t9wLc4>ZKi9w^{2Ne+lKW7A^HqINPy!&Is!wXAs&5O`0Mj^3=8PR|6@ zm>15(0Irz8T3g>-EoTe@$@t1YWtPw~sfExB#!u^CXDe#}xm zgOeL!kXLD{DgA6D2ZE2a{~cMN%_1M&mQ0t+B|8$APwY4A;;K> zsZ8(%+V6fo`es9Z>3=>+j()zRH@jmoGw||U6V(x0ZFQ$64<-Otxl91AaW__5+p5wk zbXBOKv~6k+h5afr34b2-eo9Z7n7^X*&R=nVErtEOSzNJ&K6|%&PH*=gj;yyT7Z4gH z0p^aMvQpv6nea?iiVVH1>XFqs@oVz^>o;%c?b&L(v$c|^H`~>T(LJ_6O5AH5MXL@* z?XbSiiQaj>v_PFae5f^x_lujG1mA2Z?mtSHt3b8#N73H;x_B<`IPt3}G{4x29P9*> z-Cm%{q`I_KeX+i2YfeI6(pu7Ccc(O$31a0VlfYqCr3{Pv3c|0m85|YhJLeeI^tI=L z@HhzrznS1MB|K(^b&a*rA=TWby+lrLg7qA51)S^C;;WsD*mvacqLsva-v}`N%@HpI zE@BJmvG78_IQ!|(Pn}`bVNJ2p?CbO1sjBu5Gj`H-*fkqyD(Z^UpCJyBH_%EeCiRpj zIexwjkKqrA@!K!f{8)m&xN0J{B>+ihb?FL)eV`Qz`ur=T*TOcu%XI7}z1LnqGNFXm z@;=0kbaS(6@pIWXXq=f^8E(ZXGqq~(Q5-}HodavUY9o}ImV6Owyu$ur;_|n##t)K- zD~x87iB$sy=SVV>SDF$nVbvI+)6x2`>LYlWsW(VY;lk2T7Tb^>7bek3Kh2ueb0!}!endMb@xTQCe zhgH+BTHr)mUh&f`e_#ek#6*(tM4D=4JrXi_Nwo}q2#OieKNnk}4Tjp93USgJ0tv%4k4R zrOf3SKvET9=hje;cpg)sj)fhDhi`{9n>t0I3%6Ezc{5>a!RS4`Mas__wyv`@CTv}6 zT&yQ-U2AiBI&58|8QETR>2DXdt|OqiwSeY+v9NWWN9>^7s~dm8`4M>GFBi71i?C3t zi=a@d3ttlM7o46V!XWvS=_xf!`+V5CmN98x*t(X{$)MI7PhWYdY`a$GDA$3gu>W03LM+0(%i#*PPCP&wMRGkP1>=K z#R0j&9lhbkq|AOb0d8q$3a{?=-C`{y9S>~ZtgaTsWXIOsA=&VVt8HxFPU^ItYLDEW ziqc_qNO`{6BWt64fO$Km!!~nSHf1}mdvS1ai2LF{|FHkB@m2BlNdj*V`vhxYB4??s zoR(wd^bQwlgfU$Ejp6$bS46v+o^2}&)mWLj%UB|Gdk9|7>y|VKiM-cnX$&Cr4x^-XxH^5*t0~`MxI-Aw*`z^0XOn6`XH1>*_~AC(3|?6!-o$(0s0vN-HWSOZ3<=Q&;=v}}Q-aj^9MWZ&LB!nG+|QlwQdw+eAzb zR8*@+uYwHXrV4>zn@aAx(YAzsC|hc@EzR@2uEC}b;$NFu;a|%M*7h6>iKdRhzxw%8 zUpQ#G#n!H1u0rXe)~iY9S?pw>yrZI(-1iSe;q;S45SBe8d!7umSSmI=S(lytZK3gc z(n7?k3Nt9LV9x zbMoMaTGFU^;k+vaiRBu6$_>zw&WSqE{9H9D)E znt-OCnSgR|!}WpyQc|cGemO}9dn^ttQ&0q=P6+_r#(f5FA)&mS>XNsE=@U$tyz=2< zw>6Su`$zWydfo-o(Dsq@;h*Nn;FAMyNTV%RpEu+HxF2UUH=Q@y+;pEWsNQtppnB7N znV@<@{KF)_QBYm5|NQj&FE5^%o+0HH==jaBRX3h!p$i(C-fxX!z=aLkFkSgXkyH!wnujTTeWZh~GDT;KmupcRkGH=`* zWsyix-5n)Y6j%p3lLfFkC{t3U?(Za3tinZ{cx-dKSSpMtO}hOsaK?3>DZiw&->L$^ z?1oxyZx=fbRavO(aKbT6X8jo?TvEk4>z$Ohknk%%}I41?D%eEE#ijtS1-P z(KvMG-Q^YCU9vx2+H)?5nXTPiXeYgUfE#{*J&$+--`8qo>p*KwnMST)@$9M1;%dP* znI7N4207vBS;D~Ldx~!|3{dyj#3mY=@8fVcm-D5k7Wy zp4fM`$F@27dwU^ZLxbl6I|bVF%sv>JS!-J7M)eG8rE0B=h?@mF-)wWSSvrEvc484+ z?Dl4BMbK*@px2tUI1u2wTdPT7(`lp1%VUWEw{1Vc>`~bUDWGeX%WBy+y9lc1EHVV8 zs8Hptg@J%3YnI*_)tdIDv}84E<`xF4g>lHQ^a?p^0!vbdjX+cfjX(r`i1{V4%F!PV z*R`v4eG043H_Pke`l??zEHa_&ZcM;b6?s{ZOl11Vnt2H9s4uq5CtoR{aa>v>3R>mII9Cej5c@_ zgqS^1Rxq`8qBd@m#MD<&#a=ruF85d0yQKTbZE{||;g;9L?Dre)v+L9f(|V(|LT&~Sg>nWRyaTfnMpj0OZFa7<}?Wd@yAfF=*ZoUgnt zeS}(^CEgU>WG2oQrDSR%l6BX71yp3BZ#vd42}J!bGuS2bmUq2;0=V4sCj0 zSMB8O)JEiWx9Q!ywRhNbZRQ_rcK=Nmc~c$SSFc|G`R$KCo}Qa7YR@fp09|MGHxT>#YQ|z6Z%26|O@+K4?7#5uj3qP72>4;<&ut5S zn9TOWSaP||QBW?oISI+-wn#&Axs~_;(pYl2aO84Zge6g1Xw2tKtv&d8dHV9%**}g( z^9xvM``>mcthS7p*3uOGGoy8~o!f|{>9*8Jw8A>|?qjO3v#qUyrLJ0;5It8Dx8+vz zJo2R#dC;>&Fl{a2EU4~m+yD|OIJfkctUo?EI73@@)Yr)`c(YjTb<8eN9y+#UHyODis?*_lXx<**tEtJVA?R9l#vWeIp5dNR4oH*HWYPpPc#s;{M(|m;0Nb8T%5K|;PPZjI#_IG$hL5m5l==W(Nu@_f zC*WcyEs}&2EifU?O%Jy5?x{NX5#a5;5#Y(B>JR|}Z|?{KPwt>P_;KLvC*Z)7yQmIA zq%3<-4_C>{r_Yib{E==RB^TW7Ay7uU%}4&(hHh6kzfjXgGk$Qb@j$DTpagjMqhztp zZ!tMK7XD^8Cd4`@E6tp6NQ5aNvwd{%+|lMzUL5sodC)A6kePAF%btg=wVjvQs|9cX zviFR8yc9T~?46b4zjBR=cT(FxElDR_rctWb9Q!<9PH{3_G#R@f9J}AK5*84uS!2!J zVo&h{wQf9A!z}~uQozfPeCZe5DZzvSHyj?hD|5Frezkh*$%P|jc;Qr`)47EsVdBEJ zPh%EN{6H$hukhv4R|~3z`b2ZJpjs$TG*=6%71fD+wV+yVpHJ6BlCWH6itlfiJRlffKiphk{jhSN|o7|w#pU^vssV8~4d zbIM-x0poWx*{qleIEbR93hyQXZ0t|B2~O54A*i?*Vxox?>_8APR1qDzqqV7dt|OcU znU}Dvl;o{*jv=So^D3z4`e}8}F)(j?-c3dk#e+tyQ#|H(M9lY{b9WNO-dm;AW35^$uSR3&>t$9f(u6-Qgz1y_S*_ zb=$2j+^zPnk&S&=HuhRJ&er>7Dy*t?d;vv{F_jvgQ%X5ErIaz%(?8fyK^5|yt79r4 zGXDCb$v58|lw^dl(1-&UE=r2SMM?1xp~HoXlHy=d(k`kfX%{L=+NI%{>B2=xyI@h$ zE~Y4H7b;5HWno#=g^QAQ;i9Bns3>U{SCq7iC`#JtqNM3W23c2GJ{(>ksRpM{7ol2r z;Zma=03s)AWzBRz{74BfO<1lBT=|CZsp!H5Mms=2W;Um+(*%Mwlj0@JNGOzRS-w3H zW+fMHQrq6r-M={*jlxWq@)&6TaF)XWEDfZ(+i1)yd9j=x}(# zF<79MZsn{R))QXY6K<`dq}GF{3;vs|sI%k@3C5IDRLUBp6kcU%Z5=PsY0{`enH zL4)hMpl;Z8S~r9ll)53jN=}Ius-T8)cL}&j#(oLVW&f{e%)NCdNtS}y)XAL2l53=( zT2@RUh0is<)O5TYbzA}W>b|iGGl*Z4@5Ni;Zk1Vxs4P;+`Lh8DV^o0NYiV?S(9-B2 zoiMj74XtA9>FZ_Et|X&R#P-v3rx}l7)T8Tl$fC0+#=VSWwqb#D8&xcRod_X4 zG2x1idczeR4TUQ@8VXl*LnvI)4YT2jZm`5;&f^uygXHzwi?g>Ek7ZPH*e{9jBFV|z zDmnu(u{>@laYo{M`sZLmlA~ju?kqJ4jx&chCP&KQFX1jK2*P%@`tyT?Nkcm#(hWKy zQja4dMynijM5MJMB1LUY8cB6T1X&T0B6phThzJ@*M2Z}mcq1Yt)e(`_iHO*HoQUcs znFG(PN0Ckfl}xZ5HOY0|TPsS!CX5LN89Ipwr6f9*Vwx}3*V0!bz2nJ*dz?t98&ZC4 zZN-99n}8iMAiKZgAdh_2H4}P=Q4#|T77n19Gb-vgRfxyFDY=`8*dUd4G_38q# z9XkHDw2OE5Pe)zy>EGYCi97*F0Rn&((Ly(F6Xg;LtdI{nO>^vy1PN zZ@(3PgI?*)H;;57g)b(cnke*RYNH=XW695)hu+836>PYekky_E4c>b-v=gpp^U(N_ zDyepjw-5m!?0N~KK9sBN4D=5J94e(M-QS5s!s$W zD5-6Q*-9AEwwyZg~0T#s5Bq0|kcNfSjZSdxpTUv&eqLz~CTM0r>$xPCax|Ym|pgjX>;- zMX|*kTrImwFf+;@d!Jh#5FFn3Fx5frkytk1wBMaHY4Ef)LFI}xD7aB|nw)Q=%HTyY z&|z{9mZ>}YrCkHzP@LgganzY0Js~K9^vqn`pbGTDy~Ab2?|c8||(RnOs+Qj?(X>&8auYczYS|Kau8U zVf98V3G_!LDgx}wfVnKS_E=m=oDWFjCy%6bSJG|LJkxvzw{^K?|qK~c~ zog^>*^78CB>G2Lr=!X8jhB3&e9`FXR1Hr%ZC`nY}3cSV~8t1&&mn>&XQio;|F9MGU z;YReP{MK3vvo`@IIG=A#z-FJtu@is_T3fsvZE?t@>z!OWXNPh7IZx3jE6Yl|B19sA z+>PuSy+oEIMWY-7`?Np|%rophg<((PSh!Zy_ppi8%By`ar4n*51=|lig?6-5>RR_N z71-*&J_B9GT#%E1rR`ZNsy#WqQBiW}AWL869*_$L$vQaK2XScX9_LnQDfd2pOe zL2t+qF@F&EnuXpFD19^1W+!y{8 zDB^lkMD<2tW- z=<8taSzn`=^{YdmgTC=Py!$463G_|y678F)-G+j@4TW|a^6xejvD;d`+wKe%>f18n z@j5jWJ6IubjLJq@M1B#hP>&aYTby zte%n(Sg0S;fTWQH3PNC^en3I6P(P4)un^5g4wXDFbwrb<;nkz5UcFfm4ox*>@g!Pk zt_R{L5-vp3@VTH``SkQuL(b;mLKHO6Pk{?5tdI>9N{%=);dUk5C)(8zjUJ*|!~_7$ zZ5BO5t%Q=Pa^JE|7(+%C3FHiVh>k-X`9X|h7BfVFInwibD5W=x8KOlv;6MxQi=4y^ z(P})3irf`6L?aSVC=eISf`(`rwu@*9m;MZDh*s$YYKYb&hhko%$yCt8A=?A3!nzBs zwC*yGSfQ0~6mBQxp+mHenD*MFoyVPK8FaB{|y zZx3_hj=xJD@G#dXx~1S5Y9J^qm~|nAc{dk@%#&&qAcV*#1?ylo1V&pGG2mLJ*=haw z0;c6*#Cam9%%8HM>69o1D7e6k&DHO>=ErWk@z zQ-M56#uL|<_l_n%V21rAXR_c9QyDW=H9UA3<57J1`O}N1VDeKiKV}1)RB{KBEU#>i z`Yda5XaQ&q%deZ-M;o?+Af%K_%Jch65h&ayvhyQ?1aYK7A#w_4&HMGI;0cj`RzU-%mgnsBMlYK7N>NDjnP$dQ@*?~u8a|~o z;*?5biyL*52e2IvTy5wv|Lq~)yK?KEvI~OU8?WWY)*|bO zX`(tHdhFa53+XssB;VVpEw(HR)=n<*x5?sIw1V+K92Gfn)XdR52CWd-WiE$ov?YrS zfu#n)l-`MHj~=UU_*u$as!YXsC;yOYd<}Tl#R%+`9ny&23~9(iI)G8v+mILcDH(*u zoan}=Q8>IY$V4K}fmHB0zuDPj!E_j_`nsHs-dy(rEGH7NJRQgRlNH1nqA6=kUUv~eRr@QlLCbu$z?fNfO7a-<>-1&Ksv4`mue zW)Gz|>@h?bSc5UJJ~K2sv9Z|$6a#PVxp6egp(^i(%^su)Hiyj~DiXkE4|N*AW)Gr} zw-1{=aIW{1(8(kZlJnDxx96|kJWkFPB0J?C1X026_1{heIpv$vSI;jM z&r@=g9rFg_yYKNr)bJf-Ijj?jlv&a%yj%Q2EjlRv4fz`{>_M1fEBK-K>S;b3=+}{k zZ66z)_P|X+fzu{qoHmrt7(^oe;J_R(w*{;TY%~Zvw{Y6XX@PW$5lkDVxY4i!qb!xS zvUG@^{^~b@9}g%9KORsF{CI%;|2g>afP(Pjp^bzeAF{_-I3foO6vaz2Shn1ZLOirV zY{UTOloMh!5P98uS)FD>|0wA6SkD*zNpi(Ezo^zoZ7-x9wzdd~2Z;GNaZx+!G+^Uh z?Rb;x1Mlj9W5SLDm}PWID;yNv6r9B=40UYuedwZyF@`9vfmr}h)s(d27g-IFzB?n!PYRG-VCv6al;Tyi|f+Vw~g4xp>4#P{03=p>@DWj zoX!{Q((Ha&aqNq}tT^^@AS;fw2xP@|X&%UmV=d;g;@C%0s@{IQ#pGJ4U4(8#i7s~i z(Z$s=;lXmyiG)JLVRGUh@_R?>Pokw!jrh}*YJ?9+{Yq$~mCwp1^>ap8XzjDKRHLkR znrQ8*9O*_{2V+gN_0ikPkxncYID#by5{L-ja9CTQ@mJ8;8j4_1+qcGM)Fb-=3bI|Leu8A78(G^Os}uVuhQlYxmwNYU|!&%^=5VguBpA z=`O8PPi(bIF&YiQ&F#^p>0g{ZPM&e3DzD`r%hWTi)mN!rB4J?D)ZkQ^%f4rAlvJLt zQqS6u@N=2~YLT_z>*}pi&)Nj}0$3Z3Xq&52-=zXZ=B-lC+C)qa(#qgmm3r2M_^Z@+ zDK}7NtJJfPOHY-0_OWn!%~YvpACo|pdbZnARi(b3s8XN8o|RnIcc@aY4w)5CP&ah? z6YM~h|1wv>lQq!!mAUbwvNJw9AZ}b$y=LdsEQeQiVF?33uc<1U1|TvP)u0D-J`W80 zIN*WlQWEgMuoeLi3~Mpxf$35e^y>Gw>#_6Ym(`+&%U}MYT28n__>|m6ri< zjHcFh7#Fq_JM;HHh{Zd0=B98DZ6jg(fTdDG!d|(6SX=|#&ii$ZW|7)@ASMRsU z;&y#QAyb7H-1PosTe_7D?qQVR2w7yKE zRSBKa(BPMsTB_ytQmK+03!R)Wg;KXwc~wk-w1zKKiPBXiDqEGvxQUUsH7N(9O0fMZ z_|h|t@Mg_QZ)tPZK+beiICb3lugUk&YdPCQM&Vr{e$1u2c4TwPa7o6ZT)R9<&@Fbi zc>8W^ZMiZiF*C4ErkU9$rt}xO`4g8`kCQ*7`G*q@8`b|*e=XTR7rp!!SJ>4KAWYId zI3nwBv*Q!x-Lz6k4*s_2jb5KsVbwJ=*)3CY@Ny~LfUi?qpFBq~*ZA^(XuOjS&h!ge^F8;za5q9X{%!f$LaOPEn zeNbB4`$e>Zc@?D6!RH7Itv&D+6!w1UP;gw5R@yr*64f6OtzqM`_lr9&5}KdSx?i|m zmZ!u`lQEg(T_%h&F>)&^YTKZhu*rOmi;SCOMLKp|)bKG8evOgi0;Y_nL3KhT#4~lG zDks#564VKb0_p@M(dxv(8Voo1YWt_vFl_aF^OO&{2s-OqFN)A+WwYey58GpNoy+6* zK*uK^9P_hUAG3pLL%vU()WMTP_kW1E;RcAzBKL-a^%%?zX9-8g@);tMFuObrx$^Qf zB6!JKgrkI--~z0cxjU(GG^$SC5e4kc7|c^A|}gqh%v z^W|N*FI~7VME7Mj=$MmWvIJ`rv{`bZZI&^27}zYifOMe)7J|ZrC3C6Wd-VTY1YCUj zf36h#nZRXEQ(xdR=gNKHEOEu2pQUE%ESa%T5;#jkdjGS;iJ=~QgX;P)2?{B5nuf5> z02=umEedNAz9EZn)T4l?$LyPmGyrU5E&P5w(IyM`B@6c@L!r}D=<B`rs6@@K~)0==}BDix;mXp6vYM<%>TH zw98I3vJf$*rIkxDBm$NtU~oSjLsah#UM_YYWsEdg;|;#0d`Yas0sioLm_Y$ly!jMX zu8`Ga#Io{?IFlc%AT)g2=nJiAQ$JRxP&#c|Tjj{RDtF$IX)aq%v$(@-Y&;!ZFsLY6 z$Hjj$5pcA7clnV6tdEY9E4tgt-1S}rLKQK9eoD{2LsfPUd(>KS2b`UqnJ0?yDl>k0 zBEmC1ny`dr*>7%GbKgbkn{e)}0 zUQ!!=clKKyPHF5DOK4iLSiJhc*i!ioNI#FKYN8;w5Ch`{ha^#SRaUf#bJ&+ zrew*f=SjWdd+guK{mo5c9SyAKm5k=KEbVzUNhnh=%z`>&ZqNuGFzP73=EOgqQ+b*N z*iv<#e!xTx-Rh=JObK)o;ApAU%ywQD5b7YdqT`B!PE$zX0}83Rp(ZW|!UHbh*%dxD z=vVZ^?ysx$clutx5txT1`z!krPqvVk1PqKp}Hdsp2rngtE$nzRG&2(NwYjwV; zN4-}#baxPJ3M4_eq|;{di|5bVJta{+g;X3nm#uPCcB;fi6%-q?ziw_nyDQl|Gbwqq zTD{w^4ZvRQ&QK~bYa?Pj1rhEhfTr_blkefV+VNCa5tV5m$6{bI+dSPQ=g)>Aia~Rv zwNuiBspj@nbYrlQwQyo4)-d`Z90Dm*v*VmhD6@{v31*LZ}X(iipum>O09$v3*Ihgh1c1Lfw`UxE+nB&J}-izBN!5hl7q#aYuZt3l6^YP)$;&!pK8^Ckk z)0>+|$yo0Z&@84jAM^AW-q}Y#3$QGl>@rxXh&7S1#2PzU7j4xz({F%@)66jo8=6|? zn!^L2wUWc5bVx=meD_z1GUVtxq5G?`vHx;_IX@%J5c>98=uM&6KXO|WE=lQZhN^tx zLzBCz#?g^@*>=fMYaCmd3O-Z4$+zzoYt{-Awo%?McGoHim@WQx-|_t}zP5EXJ_NPq z5|mjJz3=Df23ZqL6WC2kJz4An##}h`dPiykB|_hfNOMmRc`KI%Oq!mgJvvrabHrfg#1(TsgOtJ}zIy9VvJc9O^9h zMrVD#wDb4U4?n7(6YWVkVedabyL^4|*VA(&B5PfSMnD%eU9!e4mQBd9SPJIA%<+OY zt`n^kX;qoC7wYj|XoQEc;YNm)ar_WEVtH8Rl(Z5_P7^|GFuM3P`5q?d3A9E5rADpV zD4Q=iFwMqxcZs6Z-m=w1N!jF%a=j;6?$C=R2l(-_EyMWnxdbYY8wuX0wL89@%uB=O zQQ4B9`B>thCI-rwa*wI+g>M;M1SuOLRHyh$I9Ok|E4wscS(jaik&!hC1`taKAkM*$ zOJd?C6UjbGeF%<+D6X|0Pj1-4Q9wxfUAsG{e%UkDBMr&+_Bv#Za=}?_XxqE zyq|y@!aW>x5-a{h0jHl>r9sWON<&`5D)rh-YM%z*BTaO6?@v0X%ii7Tx>%>AEMkhb z-m+{TGY$KM%ZDXT*I8asOIC0vqNYz!GDgc5A(`IOKXR_B%}3$6UqLqfBjqdJCjV#8 zn&IT#&HhS6zl2I>jB%cVw%WXt`aj;Rbr|4Lvf{i-?-yHo!lRV$MP(?i`SG{N-JqYc zW!5wMkBmP^mazpp(nLfbM#63CuCBlpF~3c#EbQv7GQYc1xlAS{D~Q%AY?@ag)7+M5 zZ!XSXJiEAj^Y+i|wV=EF3Xk%pOjp1gG8bd5fHq_<##$Ajlh@2-}&zsOy z-s@>)U%g)42vx;7jAMvM{6Jlip&Up^2DhPI|fHL0+1B@O+WWI|9 z`YK(}S5>Fs$JCI=W4i^MryyB_&?*M$W{y;f41Yu&np-UzuP&P;KfQkTw@W4kF3(Tj zyncKB?DXiz^V8FR=fA#qZl+g&NriS{D6UG#udW)EjXM;`wx-yx$@d3uP~a|povzg*)7shXt0 z>D0ic&*3ZF%6jvBcf+V++Kx>I8e0 z5}tfblRxwVeVsV#D@K#&#qPV5jtwEeF+| zy#@HM$@jPPmaIQM87;*=Y3QC(_S|f(T-G8yD}&agXDSviEtSF6AN0)EX;??7Q*C*UF{rs| z66|W75_rmFRbSCnK_n;t0bR@@x|juV7!oAdaU+ggk)LI;D z&7B0Q=*=mAh5nWi{e{|9l|8ApC!sFG-34a#%AV8_yXRr7UZBLdcyviVmu3i+&lU13 zwDMAO)>Vj_v#vtaoOKkYR!3v?IlyHwvr-D zt-=FlQ|u<$#1`LydCOL9L)bBVn8D7KJn5YiQOiw4t+p5lr$I{Y%Qob4BgDEP`I%I! zMIl0(2PB^KhRY$R~3VUZ%E&!47OT#t_E!5`D2=Y8BLe zva4itUK_mbqzzu>gH3kEe`V`AT(W_%A$4>ETS~FHk8A+*JOL^k+W?S+RFj~|SQBM3 zA~az#7UoHJF&V`)d+Rui3pKo0o>M{>zfe=Bf$#E=hqqS2v$nFWf`?2pIjhn`=w!N1 z18af8uM(?2@K-r?8cL%d&M^Rsm<>5cG|l&OUkh z^qKG;;w!vZvJcEH!vAVlT`-oy_lB_S_>io}bccjT1ssmE{>55iSG^H~T3}a2>a(3i zW!r7FtSc2D!f8^SdOAn&(+F!P{2UY{_-WEGY@rd+Deu6VEUH5p3NZXMS=0pOsh^pr z(Kbxh=iG;OMfVB}B|dHKn<*>GfdA}XcYTvb-Stf#ao0D6zU#@Vx~N!#!8}_!+l35}Pu3AvC4B5ZY|wLIAqurc@U~-xB*m z==la%?{`}pYvk~kKY#o3>^RY+y=$v)Bx*`4z{HGLNnt`Y0ef29X-O-;;vm})-~Hay zvN8kb9k%)B9YSMkUZl&@b+lSn;$QpCDUZ@xcVbhQp^K`KI74x@)v zhn)huFYH$lOW|*X9>j)98h@yyxmT!UUJv{GiwjjD0=yPSyoTAIpFY3*>*>?y7R0lW ziIbhmlm$buFnv=XB4j5QwAemqg$A@*PJWK;S7xq=m4a^aolskT!8d!F+~SWs&dfoz zI`>+~Ll1Qm(`5px(j0oYF=c+|*ccleLloBF5H&%AV~ER|PGJ~5gkufFFgye6P;g*f zREIQc$SiMB6H^9?wURjPxgt-jfyuS8G+QgR+3{n8vjmd#)m>)*@J%0a%6qMOcD90+ zyKQtpXv%F3$}`hq^fvs3ZY~$sH|(Zkw@WG*z{_Kf27hsO`5)|5!Gj}qXt2aBYZ7K{ zX{g?x*=T=)Ag5uriUw5qEKfx_Yx?uSa|T`eq@N0~qT1FD^YqJTheMopI7DcNDD`TG zsIVnmMnIQ9X_R`1(y)4nQm=YA*@Za$kZsg0FGDO{4z`+zvY?uXGOZ>aROQInt(iiz z&#fk+EJ{s8c}Pt}xmQh`U)wyaC!*Y|C!*p@>xrlc>WQd`(GyV-(i2e`)Duzp8TCX| zdi6w9ekMH;RpA>1RbD+2RbN0)M3q-hMD_oeo`~vzo``CtCzdo`Pb9uFBB&1EqNoYi z5kZYstFT>1BsZ~)`9dP7K@oijRuYjhB;`NU^+VttV6=GNfr6z&5DJ$LK`2x@1hslX zhtaiFgWLx&R_iEq20_Nl!yVR6QIp_QO+k<%)Y@aWt5LHyn&@3sGck-@x`ovC=kPKJ zYe3F?dKi+psfb!7NJ68$wMq~adP4S=E7DQ15~7Ngs0oA4bXs}E4zW~j$Ho!l{vd~( zv~Yx&X5Prt!x|)Qnc6B_KPDMDI2Ob{og`w{l9+K2t%Xl9WPL{E5s^6ULdG2e%41*p zl*cwj_RQiGHcua=z#@%^@+prr^(l{&U5Ha2IX|zXGD^BcugWOs61mFQPpFKQ=`;D< zD&vqwO(;;5&#H_-p)sj4&aWs?WX!7)ZR!mjwrTl=RmL_A#=u%>iv(20){tV%sElnE z)J|JTY4Lef#y0b+Ol_Wi9+k1p%kVnq$h*!t`TQzlTcqCc7v=wy%GegjuQIlU%1z7K zc$Lw6DYa$zQfkYHOQ|irmy#U|7c34t$^14X-NyuPS&u|6m|~ZF&xvgWNy>V&A|j3K znkHY9{boa#yRQ{ELC>n7XW3HeA>9fW=@n%UXC^(b{>&*+*h}~mUOl}?Zdd*OMv$B> zcA7~M9(23niD}n(Dahw^k`E`o6X-TxA#A@S9JC}VSF;&Uj*gEZgHr>J*d%9WhP{*k zEf`kFF49&QU0dLl*b~126kQ8!5VcLS&FcpPUaN%wPUGa`n__^RQ0Ajdm{XIoJxE?> z6Lx;#q!(LhJ$h~asE7SWHDlXHNpdDpfjR+jt7lUZ)ogccqI=zq#ZvqMU(w|MP5#J- z`$s*coU!3Z(!nH)70XP=$c*650StkG#8 zm~3*nzQ$XcCr1yC#G-tgEDYABHKgyvvN%SaKml{2t#zE-M#Y+S6K#YIhtMdi$8sUJ zre@SkK55(dC9e!Hv43>V4a_0*S&m+VA=CKTei- zC+SOMxu$M%9C>ioz(iqJ$~xsvSX}D9SR03+%b`PB55@xaF^3`>O)FaOP;*5 z9e)l?ST}gPv#S@vbtexI920Ez$pnh|S7^qkzUH%P17wAagC-gWY!oo;lo4pL#sLE& zio;{=7J}80*hpaxwo9ERIu*4TL3P2hXuH{5)QJQ0Sb{w{&U7SJCV;|ir*lK=1E4U- zdZKefTMH=cAbeY*b3>5@6n5(RwnT$~(Fg==^bevzz^x4e&h3(-{8c(zu?$qx9~t)lB~n0vnsbMLo<_Ib^PopGv)J(01CpssR=(O`*qLoVdYx>|7> zoEMx1=LKh>U^3Rs`vtq8M0c+b-IF*&f!=1pR9Otcq50nCx@1p1>Mg7y&I3_xETcd| zT$}NTtx#tr$TBS1_;|3fu&v>$DWHZN)^&oj>X025qp`qcH)?O3Ia)p~FU8d;)X!Tm z(EjuQ+y)PlH{|mY}zSRB37R zgRx(e@9m*HfiIANhNy&;m<^TBti=(I$lu2r>(-O0fO}8S;m#=2=^!zT7BC`F^3fjAEduDu>2+}z7UH0dP5 zO$i!>6=`rTMXbpKV!S|ia0KDTKTLGb*kPnE$mqwyAN1<=#pTNvuTD+(P^ldU$Z{N* z?x_kGnaxx5|8e)`&2c2jo#@|BX8aD>y*Awd8>I3+$R=eR65RtE9uNu6N~<>u%Z!Kw zN-R{>)WJiV)@R@FI6NZqiUi2k+I!el4}prxjMKx9pZ}b-X@8Gr7Rx*okg$4iwT86( z!&c=;{nq0cLv6t=g5ZcJFi%!{!}cioI{Eki`LG}#R8<5n82NjG^`}*bUA!*+S5&1> z$!OAT?I%2_b*|Ac{itlBqCbT6qd$~}1M(v>2}eP1R>IG%`gy5HO!=&wUw_&0D`UyE zMBqhew(FXT8wBRXObgmc@lRgkP2{dIU^u>~kSuVJZ2EWD7P7=K-=WDj*`e0trm^TuXL3as zj?#y5v!fQTcul-odyR3*@fk*_7yx&bRpere6NBQ+xxYb728<>C|G?6A=&u-fj{WF}U`(ZDN z9*M#M?6LUYPW3~4gue=66MJvXCibWtU)@>xmU0sNKYu`8)v`&v-j60pCtOS4YRCeB zI$k?+_K*|*kW>GVv1asOO~-FFW)U+UuTeRB%>K%QP39l7u1jsZDvgutTa8(emrPN> zH=+XdXl=1{Gv-9B9*&iPU7uSm& zuHb!LI&SxA0R_Hbsq}L{T{965fA{*;IW#*!hzx25toMUnyH=n8q@T#@$&)96*;R$t zebW>Qd!9PmH!mGpt4zp}Q|w%$xp@kQ zng zYFpok^CTGJ;rM{8dJrqgSMMS6x!(m`95L%GHD14S(`dhQ>YgQsv#cRLzjH(U$ChZn zbLyU@q zHt^pzy&8(4wNc=ILlI+AOL2R}4n28GwOT(|!hxg%@-{A=@hxcNpMNfobsHne{Nd)N)k98fAB!_92x1-&=9ADH%qPO|jzZhpkhofxE`7urvD(C-LOvM&i5P;e*#WN&MG1Np5$I-{K}G$@E~8yWiyVFZ1d9 zoTQ%noT#$*Vcp#FKL5?Rm2C!7%d%8;aiNBs#Iya#rEa|iQ1RKhtdz^IdcOZ^3*JLg zukV(mUf(UjF!#i1&kS+uAmypKbC0C%A}~|3o|zu~)QV6V^D$nwr zGo(XdQBL>JvK^H`a zw9{-TJU9f}ib!WG+c*|?2fc#QQM<#I*?R}-u&trOR4*n5wiH{a9l|;*#b3ael((=E zfc*PVjB0XSCKg6T>HhwAoDHviLi~Ysf`;@<+c3o1sA=z38~T#LB73x#QY01usg5;6*d0^FPOSz5Ulwb(fz8p-Rx; z&7Zklyk#3m2HC5Ekj|dP@&n5GWj$VL#-ao>e%S`PlXk`m%-}gCXoineAh3sN|J#MI zy*qtwuxr*3#C>Aq!G66Cn#Gk0;c(p^E)ub%E0fTo7ad?#cKIo@rI)MgOO%p`OLcp2f~%G+S)98bo56=n5XC)g-ZbSE)*49xo(CBmauhNcY9= zZ<0GNQb#1p4Wp_#BgMdNz^AjT$62n%2M?UX!Iz#Y_ba#Rpi-e!sJos6w%y81lXhEQ z-LTdEXmb*v#ne%cZmUQg@u$n|t>uo%T^i{3$eU?**lgC@JvcxASW_tVvwO&Yy1mpz zi)DfhRAs!@rRYd~03Tr^a%f?=H;|1<4_nYKDEr8k>kYimoLj0hzb8u`e^W=@i+2~` zO7A)8XzaZNY3y~<(RjuwOT11xns}XbH1V6qH1Rs=XzFv)(NsF=pm4h7q)YK*uZNDN zlO8&nO?v2P_J74gN3%(%70te>hmPic4;{^aHxC`nrw5yVm50tUA2UFEjA8oVL{L+GQSA*y^Ms?3L#T8sc^s_1a7 z>NIwq6D|Gyz(95!>g?p?r0Wss@iv^D|I54guat9=ELpvk<|2G5>W>NCh5shF6wJg_ zUR#e=nw)2pkZYt*HeFQ|9;?nlWjf%*u{$C5bP8|4-Iehd;O9ECbhHEoU9l5D3wejJHA?P@B`(%3Nz~+lnuNijm$6_G*O<|+B zD%LK*Z**iQ+knmJe4?;Ze3qcwk96;7IMQvZrY1~o)9ta@p<}Z{_3T7n^BViF`pK+6 zG6z-xumPt0HClCkq&Kyp({o9&+vU~nvRy;5MR-87-fq{Q0x3a1*4u^fryH5Y{7NW# z2_l=DrzO75vM`*{Sr+Pa;IZUo7J9OQ8P=+AY`(w9 zP$CK=TQB4fLV*cFo#L>_;)3TNZ`}ePaxaSvbLVXV&3JVOuuxeuCF#koi^D#4TXAGGUUT4>|_Qrr2o=mdiL(m$1?QBhr)L!xL5eu5QG}Ax1Et_ zdYH!HVsb|kW395*4$L@fsDRu>PtoC{jj&NUnSbz2*GRDhhjBXuk!NfmtvgG?-y;Ws zC9^2B%@7C8oM|$z5M?Y0fuUe_Btg5t8Y+Nvs>WaeN@5&MVnY`?^R4)hS+vvyFkAJQ}j zjk24=XK~Kdn8Y8zlpx&FWkgsNhs_4cUDjXN)*jIe8QCfs*@mSpBU?rEEME51F!(VU z;vK8v&05XgH&(@)wVJ(etcrIF=IUe>?-oqeVP-zJ-<>+%?|{Hft%c&11-Ox{=Y9OJ zU*}uS{Q!YqD-xQ4z_02O_{FA|M9oER5%|USWV8am-G)|4c0L)gGaHfS_{%y3esPFR zG@Omv1b!9;6J)UjDvt#nEe>$zBik<81*4Azphnm9-swH|FnGQG1hN}oQF2#95pS^< zB^Bjo09w^IK&S;kEhGgb>(z=0a$OB_Qtlkd`gde83m)t6`*v-DhAncPjZ;LmNOm@= zmbDmroFv$@4NX2rHxA4Q4hNqVfgr|?n)qfsB+X10yu>4IjOl=5^(|T*+MGyp zX%kHZ5#?P9I}i3>HjMZF51)l0(;1jK=7wi^bnej7 z9N#FpzsOr#Ojb#03vZQ&wop|bpptUW#z|5B7vwfJ&R7VyEj=OJw$yo$snJYGT)FF( zRN+%2{K0j{rB}OHLR4{c*lyMUqLtBCkad;?rX;_VAqj*IptqFZt5R5^^cqB zagTdwzhdB?0a75l#H2B5#8Ufwg5SCe92BOA!zTjm6AuX0YzeU~Oj5lvX90Z$UpDH&`ln zr)Q!2^t8mMr)W&|%-jgu=+HhJux<#r`kbd1#5`TWVEE}WYIWFly2DI&bcivGdQ*wV zHA~f0(!s&%U8A2)QuB0V%g?$@K~aH?bhteo9PM!DwRT179SgXs4@&sOBRs99q}mI% zTtG=>q|7E^?h7~YCYq3iJ)ia81TaGJB&bq~#-dwC0 z*k!j_GB0xzZ&J=#G9Pmj3BAlsyh%EL$pDHDu3Brws?xt=GLttcTl;Dfze;pFe--eTdeZZ?;T)#k9b*B*hV6Kk)4r&$`=@M8FtFAzQzm)}a$oVWZ6Vj4!VfBDBa z*dd!(tnbGNuwvq0v1HoSq1e~YU%r2FdU^5u+$=x;Erb;n(12^+;TIt1QmEb!QqQTg{QvIFyh1-WrPYTssu_ zm;CbL{p;7KFSTckZ-V-;+&_Yk533I=@TW-^9jJ|KvR*pd<^1yPv;R47TeN-=-Ojqe zTki$ldUs$H-r@p>xLy6JCl;d6e~Cw-s&Z0Ln@@`O(=R{ng5_ejXDe`SOCGhwP6az32Jcr( zC~&EGAq+_XZ+B1mw6XrriA;p99d3Zbimx=e23+|=*MU7)n&Iws0bs6uc3^~d;8;R2 zi4w$rk5+i#jTDeH9V)X!;=HpEdHD3+a9J|t&pG;TMqM(^H*X3qDMF0E%t7Lx18-#{ z5~aS9WxR9N|x~^o|0uG%4U=-V40vg~&_$fdUc8gHX$Ig+x+BQbXV>>I@`>Z4C#cMx5k zj(K%7c<21P4eh}(8V?frLuw)ZSvP{&NJj5Zn#9zr-3EqtOkP9RZHBO4$q7&lB1C%dSF7FcfQM z;fcUd98JNb_{Tn&6mOznQl#uh4s%p=%uNP-oOGTycAv9&jIaX?kE#-aVH1XnJ@PzwnGxukeghA59N$;@4^7 z)T`6PnJ2f3x6m{_R)#=f_DZH{dd$4#oq5ZqXnMF@nWE|8AJ3-g>F*bptVbF-+A;WE zdKAyWm1y|}Z?8@4DX5=QvPWIADl#C15G zFv44;(+MNIMLCi%!ao98ySn7x5=LM*XXKvF3F(&@hddGd9;E8X!m2fwt*Wsg8RY-r ze}NPX_#EKSCXobQ?@J^haT9tHNqCdglSsmwl%7Nq-o)HlLy07!jWA)L#JI^G%v?r5 z-X>L&u)#K567ue7cX@9zWv%q1-rtXb!5nv+1o?DfE?tGa;o$Z9|$ntqKUbjhp>OTGphD6f8E(TkBpaLG8Yk3`O# z=)vjhi_^E4&)=S1T)sPf4zxx`aDmz*v zVNG+BaUnL}$NbVRaDT-2LoPPN{bM-Nx(^z}Wj#LaJ^nlOc-dcMMR7QmLVHD9tqDcF z$V`rHv=x*Ot!WbVc2#aDO5_lo@!hvarQR?@lS00kvAvgsMndQoT?vsWvYBDNfBvzG z&v8*@$LBzD{cI27DSlxpKIh=>M140t8{dtJn`6DblgJykN+Mj8p`)H8y+tY0PPhz| zv-M#`gT?-F@b8Bm^oMMjAOjF(fmqA7Y(`)C_-n}~hV4x`5b z-!p4cL)9(8TxUGITSnGfYJCmx7t6)!1B3+m{jqjw+JD?x--WQ^V9~&_>+9_GtIKCE zxngy+Tl@!Gw?}Z(A&MFHhtk*b(AL*d{9J+R$@d?Kvl+7$oy(mlA|=TybjLQ`Cb@sl(f-xsUA`i3&SJl9c|5t#p@dPk;*%a{35hq16rc zw3^Y=N@tg}_S(6o$>gYdfE@jIy>aon;i-q)?fm`G|+k$1idxMZ^) z1GkeZPZ7{9;JG9N1cl3PvER8@9oxY3tgp9=C6pJeH=FHxvt95nEx+hugW{&_l_ari z;~vS0T}kx|CKu-e1C$ffS}P$F+kz-6Y{y|zmy;S5>C4^7VWAY}A8u2tr*Q8Xv5#D^ z6W!He&Z+J;+Rrn_am$;C5haX?8wM^fKqcU(1{u+3CXh`?*k|PAf9)A@kyS#)rsT0^ zCBzAkSl7gQuQaCBn_aZ>6eM|Yv%iG8YP>-Ju0>ftN6|+F|GpOAmwMURxwT)f__p7S z7G<_?k7J1mhDV7nxob=OQjvJg7&PJsUH{|Ssr=NxD-;b+R#Myf2fr$4G7ioL4+p9g zhz1S%6emjND^Bml-#qf_kWHG#jhb)F9t%odz zw-_Uf;UCEpMA>rM_xEwVpu*dyTlSSoxM3{6UeaoUn7ZfJL*>5JzR%3|>)FFgL+$)b zEx#TYQg##V`b#^0Jze6HH_=%V#PRFp=>&@Yp(p^ofJV zOcDAy^&;Z2tkcAQDW{q(X1u$aDkg4*^!}8&$B2u=EM@xPf3B!N!zx z0T%dTCkfesQbQ}M2;xXn;!{A=Y{uFu6sgU3gIJI>?+u`sDooYYsjWqk70(ZHh0P!` z?>(Gm1a)~cPA9V<&HaF%G*A7?xcqTo`f09N-I%?yb=q55hY83oZy~DvzzW+o(!g4a z56sl~?Z*`Huy$Npc1K#36I;L;q-z+CY=L5iyevcS9w@zreX5Pi z39E2u2b2S~06aV34#LV?u7fv8y~|xqrYR|*5)Dv^Nu0VybCxhK<^k^lnfZ-rlB7n;DX_@tfdjWAsHEyWkvJiFO?^ zYEuNdjvBS8F7)9TwJGWCKAO(9X;Tak&$ekt%-7dzzSnN*g-9VH%X)DG#RO#{kqjU_ z4wgL=*LnaqcA*aAlGPt|<=3yUbKx@Oq}Mo|&^(mjHNihmUEX6E9~vf|7?$1SJn4f?^;x;|8_+%JM7h z>EG}vWU%%MNoAGIF^f4BgfdeWbJ~_3i#Zim=aj{qfzdf^G4}(o9g}&p7J)N3D>rx< zDD(2LWhanj2jLgk=};1}g~;c_d!rzmd;j3XtTjYK21&p;72XbGcW1&H2D_Vd?QS%O zvrx}bVjI=5HAz{h9S=#@sMaDbi}dDWwoz@1xJ;O{5DBLaRwkaXyB9YbZQ2Soga6)F zG@wx+KjHuFs~Z^xf5$I^Oh)~Ng&E_C;!U)X6!$e`fLeA(l8}Kwqg*)kK!3**t#;=2v}I-Q zWm@_AirtWUmCr2oDxX>ERX(%St9)jeQa;-u0#;b^-UR4k$ zb(f;rYJCKrG5OC+F%h;<%(XL;_Jksevs^nPW6K#?+Jh^!FEX;kX6m%iuE?k(HF5Zb zRu@`ZXj=F^t^h%e+)Egmd9KPOsXB1}C@(EIe^zRbeLAGaWZ?3%W(>BLImq_Zfeoko zaOBJ>p71iA*CR9BkuX43PU+EEH6?%%1@P+G^UIfS-kksO+4DcEX>>;eqh2<>vDg4{ z`xzESynTJRX_(+!u)eI09#COlE!R!GG`p|3MZH}72iLhDK744^PT{Zc3#S@YQ{M+Dq5o>f;R6=){ySYGX$1qhLdOXOk4`oDU57BradngUD+5GGwdjp?1zdd;p{nPi~ zKl*<6eK+dmY54;^HAElTqk$fuHsbYlZmBP`}_RO+Y7-hbNS2r z*Ux3`dbNnESc+Nw@9bB2Z?rrVM>37;#_EOmHTW63AogGmm}T~He^YNR`Mh%TUv9*+ z*XQpq9tE%0D<*8i;LZCB{EOO)f!vIN{q^7o{$y!BxhSv!TdwVHxfGkEc+AXxvX5CF z36j>t0xOH{gxBvo$eVff?ELcdFIX&Tx4x7;(|gDL>m}JTaBn^doZq{xr2EpelD|6@ zm+Tk)^6ce1%+1Lop*6)}RqKM((iz70Sr+3y8|V`H({hvJIbEhEAJ)o}T)}%F@dvYicL^!Gav;d3w7P#Cs~$$pXEj z&kbWC{FDjzoc1>}w*ZeG%< z8W(w?5ru;RuUywiRfiQ4XN;?AoD#uMAH4qM&8v66n%B)@KFCW%!*nBRA=%DYvY)68`n^D3{=nAge_iwesWE5fk5 zI3#rg4gV-YmrI#-5`0?hudOOmKkjrzNv`HK3qDD!D|2okQDA$yR4{t+zu4p2e;#TL zZl<u5tuKUocKD16B8n44KZ~VxGyqQWIGJO!N8BfIJYI@*bH-e5~Q% z&1T6&9#&iL_Qx)%q8^?Gov2%Ahhr30aLB^SnM1B$rnWCGXa1>R6S*NmA5*Ueh1|#p z=HF|rHu##3!Kb^37dW2-C52$RtZ>@U4L(y|wmx~;-bG&ag=IT65n6*U!pRV45&A-$ z1%~g&RQV$Gg*c07G{jj%=2|7o^^PfvQfjH{4pz8`FswNi`7B~>D2+xwi`YiP(kyb)8= zBS296m=!d;RK3N^Xk^)zxQlh*-PXwoZ$}KS71I@&=P?3sry99&C|%%u^sek;Q6N^w`oPP=^5jE;l?Z zHBD%04<5*1I@cnXTvI#jgPZybTxwjuzS`C|H(-ef7r*%u;@9YYTW^kxj4qU7L8zlx z@Lz+UMO%l&w$EucPr)fsnz&& z8w+YH=Ho;0Gw2qzcPMo^QoEwP&Bu;7f}0eCf)P}34Pi>NqyQsDSg^MSluJqf3E^WNBf64rpJ$E+DE-o z!A`QKKp8?8q~1%oue5jF?*e*#@e#zath)~N2SC==1W@ga{v#K$gzc2+@QS++sq*alRaRi$McB#v!>5$UpH8zg8OASAc6ZG&XMHUO(& zv3cy;QU7?~u&;>R0$GV(?cWi{``{;V^d~Hin|e>K88wOy?tV6%7ad>{;$!@U%DO6y zTC8KceZA$j1HV7n=M5urTdc);tLD7+A+&;NR6B8dq`hVOl~?>hb=POm z*>pedAm!SfR=x~QBp|qdd}J!z8@Ygvj?y(fYzc)#R%69Rc@wS5IwDm2ye6zLzIYFK z=Urn=F67QJx;olwV3{j2>Y+A==~6k%sInX!BllPtDsOOVmocf5)RiibEuIe$L49Dn zdt5IfA7H$~DjBWMbkFBSOG^O1KeimvtE8^tZt1&Q- zGCpOwq<{Fqby0u!Bp538S^8PV$_U}Pp~dO!;B!k|33Y;EH zN`DcbGB*Bl%ct)46H(pcWJIOExM?Yh+LXi@uB_Z^hO0B1r=}!Pu7afKgTJe&?4R4z z@fGl`#6|moJs#QyGD2hR1NjGQBZxW_*cGoMxkSd~u@w3;)#hY2xWrk1iA%G@sn_Bt zQxh069vY_yGuWm|WSbhT^-^YfVWNSBiNpTFWZ~?EX}b&4b{7VUO=C~|>yrCY{>yxN zU5fs?)Mj0B|GMOc3&0NJSUo6atV@yluJ2Ok6UWWax(pncZ0x{v<-Qf*kU6DFcTx8o z-fkzhzrwvT?T2_|G{o$_bKNy%;a};}tKgJ6ZXZ`eOI^kNrH)+x6?nwgn=iJ4D8g!z zGN(Ck-PFYcNn;P3JxJpuA0Tx=F!UGe!*2OS>%D>dZR=L;%yp+>!?=P4o^MdJK;N_< z-=BGB^40twS*o|5e^E=q{Jp#cx+U|?3V%IA4S3)c+g0`6DP;m71vQ{MsvcxGtkSSF_Jr!pM z(FK*G$d#@`TQBv-Ob8YpsvP0t%&Sh4js~@p8I#tZw_vW*qij5wtg=b(=0n6ES+?@% z=>EV)=LT1N5_CThfIX{={=MH2@75&V5KAdw59L55qr@~3w?Ma&L4qIatykGw&s}bb zYZ%FVDJ>rCVJaZ|XVwZ+Pr$IGw+t9|Iw3BXEv7G)$dNT3s47`HrI1(QfZdp+{a5#Q z{otewl?*7E#_$c63@F*xO-f)DM~KZ!+t9y1+H_`hgc%2ZaOCau$Xjyj11}eCC^u)G z^a@;V86`Jd)&u;pokhq9T7~IU>OmD6S}FTj<^5x2cf|g;<2f_Y&?@xmPE};?){&re z73mO*O~*1rWwOCz*^^ zD^Hepl_gtP(l&#&2g(7NrbQaYVzri98_(4VV#!d=RjM&pa>32jQCxNFHE+57wAir| zyO4<}oh-g7o%YOj*{ioWK6-S`OPCr&0q)r-wXfD}tHg^Ys5IMlG#Krxs)5^rU;<#} zuWwsnecMs>p-Q!q7TvNB)-5$pC95)zN>*ieRLMM=m`@R_{H1rR%&Ul1xmOXZa<3v* z<&%n7mHTags+dy5s$zyBHfuQxkN#B^cTzQ!+9i1!^`lC^?o}bYelRVdY6e_P%yBUd zU%+KKc>yE8^~41{IHXFe6*kU%vX}DKM)l!8-R+NJ5PL3h^)P96F(*?QzQQ>E#8&WC z6{}>Vf2!11CG)U7RmCbScRN;`qB8l`~Az#0H@Brtt@ei`mRoaTqeA&Gme+I( zSYcRyLwzJYJQ(g5Uls}0TlTjlTgeJy{G0FqEBaqCjSLw<;c5)kuHg)K$ zYEy?=61I*cjPY~n15XQ4WS(n;BCcdrnXe}c5@}&#mQ#Ky@{5uh3l0tPPteW(b6z*V9~4bKMbjoK6|#bzI(BM-ZHxAJmDG zyXIB>`Q_@`dMS}9B)P3;iIhD%{$E@6(bz;OE-979$|tI~GZdNfNa?FOQA$vnI67?# z5CT04t?c&rdRJ#nnC zw9TM0IQ8zpb-x+l%)m*@{F9J-<4d(BJGKvF;vUA_YoXK_FdRuMbA|)Q=0R^bespt< z0mackZ>gsMwJu}(hjqWm4(#FLlQ390eE3uX_kO-)|R@~u+1^nmbykxmJ!yL zy4H%>7;8(70ND}NmYK4y2`6P8#(BP`{BMmEx}!WPbwj>!_1~IIkBr>fU4q-5jCfOP zGKuG{sSnRvQy-qUranAxO-J#(H8b|{P5pULB?o`%J%?AX^M#{f)w^b)|70*dyx7|J z&dFeU-^ZPOkHcdI7(T!>YAei^irg%&nnSx={73LWsXMq$bT(?_#A1^;ceNcsqvThL zTA4JP5i$9@L!&f9^g-3ru*u;|y9vE_OA}72!i|;4saMkSHLHp0U209})rOl;+SAUB z6}vZ96M58Ob^j1-u@F`sF}ga?ny#qc@yh_71l|L?W5En$xqRxnJKY} zwoohkELi{s(P!8l+r0vh<6l;6FC4@2&xh4+aRp4`g4&1gu*+t#-(Bj^g$3Yl5)I&{ z#9?Bp@U8B{L~4lrGzB$RvnMC~5{RZdU0JRH^UK8n|FYm=oNUBC18!>1D7;Hc4?V~Z zEWVN9iBVYmJ%nvTHH=^ZP@;uQVh8Gf7VPV0$sRf|?X9RM#CONdqInGS9sI0*<0jf- z^A^6h6CeEa6RvTpQ|U8TcmajIkxGrfs!OA*x+JybP$ghz;f4iATu26NjO|`T21FNM z^LhN!TGk1FsfvCG=Ju=;K{!y^mEFq+7v!FSW~EIVLWJ76X!M&hi%xX9#|TXkx(LAEzB-x*j}W)T-PfXmDuoQ zu$~1d#xHzV-fRwgU7BGfNp9CI2+p011#3a>02qbb>WOC%_9w2)g+F~RL;3T#^V!p& z|EH%3fyv^g4CGl{qHjX!XD>KUC;aL2Tgomuufqw9|*Et8$O?k6xbjju1w zjJ`CwFL|dgW`2nj8L4?s=d2SyrBg$^5(DEvgQ-IHo)b}0d*2-gKm9bQI*A7(YwtJ! zrol=mgV$-pI@f7~p4f(BXtcC4RyqfkVzq+QwHtKcp)r_2eej*9{5Ojs=69Snk~4`P zsjzU5lo``>#9Ij)|C?IHB*6xmB$}!tuX0CT*$6fyY;Y#;X-|hYZ=SQbt)}v##O4#L ztTrSJ6)#B@!w|06!AhQ(ybb#z7nC)rn{+Zh;l5MXqH}iz!H|_QdSD1<{!NUUptX#q z4YaBHr`576wx(_<@uLRGG-}YD5x%ql0!w0fk&8E;KnngwC6wwLe^`Yx`=dWoPxwx8_pjJj;{Xw?$T$Qz7#kgT(*qZmsskvJTH8TvL+7h^~iSaAqrco+MO z_=~m>%z$;Dm3-V#7%1`VUH(b=!HyiDNV!>gj zHFntn71u4OyGLTjg-QH0Mg(JSl@(n|@;;`;b`q&k&WJ0KeA16j3SZQS6h8WDQjA88 z2xK4fuUrbLD7<=>w+V7oPmG9#LRB~58GyepR+x{=*y0h0N8y*W|O`gF~<4DLEEqdwJJk(;f*!tFsN!E3@!%&maMNnjfv z3+bkw+WV?V%{D#1UVnmpB})7)_K$)Em*Xe$-Z%-^o;Vc_NTFk8MbD3^F*2moA(7IG zl{q{cq)dITPEwXWS0^cT*kHKow`fyoTJ6RL;{b_3cE32b0jV^tw$aG*j^a!zO{;B= zM={`5g`2;l!jP@d3hetBPBTBwTCGtlB%iQipSJtQ_7jAz5;#9r6i4&Ll1bIHBlZ7*ABlBW z)h3L(V!Ev7rY2B}QgMq&<`l|4E84Gz!3A(BK;+}o4&n0>IWM5>va#f>JSYl7Afw@j zkbYU!Hw$83xjW$}Z^2iJN)nTLv*8LAK2>?f_)PBp?XN+--PT`JflCC)i;RW#@`~-7 zFRR0itVV>vOH%t&f=DeRm}ywrAyfD@_}O|iUYclzkJgiKkG@;jFYv?1NTXpYgZT}l zv1O?Xzp{&$;nT+JlBovDO--%h;}pCT&Rdcyd}`g+N=@s~(UFGCah?-0JwnoXcQ!pj z;u|5+BMfJbkROZ}Ye8mCX|OtQg&!`L9h|&~n7@Ich-D1yw zS0sXbDw1SUk9vG*8{9vu>3}P3fnlZB4<3Xct!pS=srYEYYSDD5vQD z)KfJ#J-+)9-#h;*{3nY_`+jQA(1`dS6NjEXLnW(@XV1{M^sG}nqcch9+cSn! zXJXGJzP=$CV!+EEH@3Lo1GJ&1zPM$}`p(Avf4 zt`$T}|3FLaO{?u;#BLiM4bLsNOq_N=%yvJ!ek9A1H2$Q8y(Z->ClamvBdVsHNRCyk z%|5<_ag+qngQf=i?A_~E=MNUUYs(UpHk{+awugJxo{0uef+NspkCoL0nKLLAFmgH$ z7@(C#i;v~Z(AqzK%-9<)D%0=1NFLO+UEIZzju?K1K3#KB^3g6hOKYzWno2`&qUs54 zG@iV)7psep@8VW?XYJrNZM=vM+UVmtUIT_Udira7=EA|wC_@`#ER^_H24lD5C4nf> zXN_5X$hx~%UOONUkCmI&miV=lgZA+v-Utw->Q*Y*tXnCt9NB~P?$TGYTdw!P7q$nQ z$n^&ykFVBiD*w*6-IkFrq=)eNPP&A^-V^`o?A7mV^N&)mkDSs;A3238t&S)*gp8DW zlOib75Hg#xHLU-BzUsRu`e%?3Hvc@oG!-$U5PHeSLyJbrZ z{hHK!{W6Q1Wm+5zol%Wrj_X^T(ZED^?X#+mDVSdT1TG;Gu(;W*xBGgvm!!yIgquOk zgy#%$V-CCQz4KWXdbfR+dbhnIk)7D~0z5o@QaeA+FbCwb5jOs~GQ+s?_%QR*JItK; zhABB-CQtXBR}(B!pF}A9?9@!#q+Av1qoY{aIgW93yWU=e`A=HqKWUZsq*cG;N%PlsVYUCH)&7%K zdrw+(tCMzzC2eLLw`Rt1YxHrWeHYM-z1cr)($->sJJd@&Tqla48A|3Yq2`1+Y@%4a z1s>@NAaW_ban$kNoOEbHIwF@70qYuHKZjQG_FqOB9#jp9BnXOCx{ZY=ayBXRPYO%D!(qD2UVNt=G$y03 z0A8?C`vnRu8gcBewaVIXT9>-BrlqlJXJ?_3@tW_NJ@CjbgeOdvCxtp3I3eq6;-Z{yEZq!LHBKWf@YwN>uAAGEr2XI?kOD3LmqH7iszCJf=y5P6OVGHb?7$h3@ zZ?=BOaT^n_f3r=r9yH?L?1y+nga^Cfr$%iPe`Kaj(9=FxgxcfWzg)4s%w{_RT$6P4 z>m@Kz1C{V*woj_jS7w5`%w26N(N|gAT3qqsSAo95H$TNMV6Ngw(4h4jf-M??!$AYb z0nhf^1&JgfzNE~1A$Q%y1qMM|V>XVF*tHV4+*Fw(S@SZr2?*P4@{VnD?;YEs^*3DM zzCSh~`+tCuo7P_!q?JKU&FUvPK@vmh*A{wuM`(cheMsCs6#i{5nLj7`ptt-8bx*$! zsoMv?mDb8+$?-m5B+({4}nR9)@WPxH}gDyB4LXmzVU3nR@rLfNzN^DcaFnQT9scpp0e0B zI)qaU`4L;%i8&-0hH%YhN0PAQ;I1TG)6$F!u(76FLdxu?o*+9(v z?ELM;<%_eor_V3UoBjKTh#|ryU>`hf)U;G@9-A-JA$o18=2N#B+gsMLFOqzqGVIte z&R%y0Lj41wdLSahLJtJ*3^p~8-l-jgA&g=WT9(eiAhiA%TFVI9x`P-5Pe8kE{i3$j z=XX4y-L_iXjs&#(B0qCQe(RI8e1C^iBAy^sHN(GQtEp@r8b%&g zEZ)Myip5)aSh0AEF;*-ZLisexmR7!x#S!;b40~shB6O28fDc4?Zy?9uoa2Q-Q<~6H%YWU zJeoYi+oZna8Q!LxOrEh5WA2$eB)(YOOyd7|5@4*CKWi=p&;NgNMkHJbw1o!|&M5}e zM(=*!Mqy?ld%2T*YXm^5FYY01JPjea68E!99VU%X%nE|Ew8fGVNJrB`n?GK!7j@Um zwyOAB!v5_>!#s4~t+Pm+vggw&H823RiEG=ab0;b*ZmhE($!O6WH4N~4==v&9e?|SOy+`J~COd2-*^9T)7=fXZE3jN{-^vgViWd*cn`jri z?X$~rdu}T2F&cGT@iyaFUK+NYWvA)j>;;{iNClVc(nySPTp6Rzw(_utUTi3Dg4G;` zd98R0Z=MNn<1zVY=r{Rz8;{AyTTGdJGz62+p7drIGxzHB)w|ORn9mbnZrLsVgRR@6 z`=D?h3#T1f!hPvtr}@i4C`CHRAobcDz4M_Mq9km2waepJkF_QoVNFm;G+sRDw>W)j7Rn4!=x z(0`N;YfUXxY!Mad2w`p(SVEX;ck);?1Z*`G8yh^7o&7=G61ny`Y)hX%RoH_0eo>vj$mW?YV!KHi>Lwklx4?ap>Wd+^ zt=`PkW1z!_dGR{Ib~Y;29v;KeFwj{URA0WiA>792Ycr|KeP|4a13> zg)E|YdCh8iB=Z%tHOGEjF1cmO`+9aBz~}s(i&eWe0xC+iK(TASo5_-Gd}ZLc73HHQ z-5j8sM~cUSZ>Ialyw6aQ?ud^-XIXHQeYci9hM}r1o8BT_&$!+bWg00E+R&xY=`HaA zi)fVV#LckjByM7h6a{T3qZRjj?#+tfZ9K3At}`1~!7!WPMzW zhDLOR2G_W^A=2nZejhf_=2}dgZRA9S<_zynT%KhKPF?9q2Iei&S{p0&z@BITm`{Gu5w&V&`9lTzE zp8IakMIHb5dKUnCTi_{LD0I45ujD00YM@-&3MZgT4K7lj_(jZu=CD}O;8VR_acx=M zX_g)MTJ(S$d+*PmU%Y+x{8Uyu#Xn!1%fFiODwQYCU6m)vLtEuhMa;pza(6-$qJuWl z93_Lr;%N*n8f)^H4!Q9!rn5Rh)R9iRortp>+bHM2U_I86KIk7zUFXvJk)YLp9l80i ze-v!VNBSuE!{G#qPQX7Nnp|}nA&=?A{uDq$kJ-#XQ@9k4vj;cCo5;Jc%H6`HMQ(40IQGDzcnjivl|-wx@G85` zrg;^P$SqC8ziE_w%lqR9kT?BXrcq^xXrbqVPnmhdbz1%ZZ!g6RRM7bTj6y@Bsc{W@EWwXV6{jr8kc^*c3kSKYOEL^Z=&Zn zb^Kf9KyP5moc&YkcxUF!>Vq^L__nB!_ylx`%k#HyF7P3;%r*4UDW6^7=X%z&)FPZt zlYv*j#%B!)&7}v;b0g>9lP-(y$83m{x_}`-+crVfCuZ;W6_3_iE zkrCBs%p~@0+iqZgU>orC@?*s17*1GrlH*Q;iZC53t8Hojb!+rk|xrC_Ua=l$_QZ(Wz?hxL)=6?>^gi4QBf==dN)im8O9h zj;hD4d(}jZW6Y>!3qOO485c>$AQ}gMWx+3E<{wM<=&bEqeuj1)BNolNW|QtUi(s_T zeF<|a2Kk-rgZZkC1Tp9N_S7cfjH^BgwJ)H?YZF}oqZhrr>-#E~d(xVqlUf41B84Ome6|67(+5^L&ZYgc65T@h>UWovuooipP87?=D>aQ^rV$X@hHYcWuP`bmMrVbk>xJ7@TNfCKLWzT<;e3MDZ{5Eou z2|q+=Pf98#B{fYXFJx&`gbG)Mp|Je6lOiB=RcI#^rFOYl-U6g**-NLgTY&U0OFIEA zb^@x2K*dcuX%euogp-E#oiu5Vw?mQ6=ChPPaG~MF_2T`jbL>!dy)I2iELBnbDk|B+BRfg6uKz0VxUiDa>sLx-#K+^p zN-#lb%!QRyrTu1`H!J6OG>pNg6d1O_JI( z(I|8SJk;`rYTwp5Wc-Q%(FVS964X?X`9ZW`t4Q3yfQ1|ZAYNbDv1g3>GZDRZ>|FlJ zV*%BP3`#jj>emrial`$+NLe*cAz!*wyC4{@?y^_-juqdh`d8n(_y# z)Fb&LgPeoP-w8S!c3ZMBztNqQ|CL5F_C_3fZKk`8K|Wo?c3ruaca4Fs9_I|(FrBsy zMH9^@KW-^~#Y_kWL7%Dk)iaUIn2E$c6PnH5wvXib%)h}@r0EO`@vEmIExo2|*H&DY8o6RY>AoXUcGoQVF{__2c(@UUg|4Slt zVEg0qx2JzRd;Q|_*{`RsFB}x>_5kUS+x6kMxUov64MCWJ+0D#k`YDfdaUzs zENRQJIpj>R6(12{f`*9C2;=|SZ5Y|_z|Pno_>q&z0*lqv!{E)5YRI+tsdu}>4M5oh z?(I{(3l6Kr-wsTtqAqqa6?OTk{;~^p>xUgwo0=^7bXo5g9$M^z)O$8n|M(eX{*xu&PDF^|T-F$X_`Re`4i?ip?-d$K1!B<4yH%mYv0&U_f$FyOJ+T`x?f2MJ8}f*osn|@qyCHYUcHn14lA3p^ z10MG&geiZRbHMp!Fqj0bT*B)7-QTS@`>mDlr2l@bWH01BY2zvLQta_2dJl~94`hfb zENmq=$z2qeI=lJ~*piRnq=zuVZoOD-4twdy6aD8$d9}H`;s0E$S3Au`V2*X}m(s|~ zXJ?Vd_SKmcn#d56{GAX>giXYjsw#`=2K{kn%V^^DctCp^Sw`_a#2glm5#d}Dh&de1 zfXhmC+r@(cx2b&;^w1fHOPQG%EFQZbsO_|{mgWB91^|o$D~1~kbEGClh&fW@BSg?* z?wCs!GwB zM0SKKYh8~kS5duG-{K@-&rGlWZShx_$r~U8-N5+(hd&cXL-zqOlf*$oxgA9cz}(vX zIAN*{W-FGRy^Srjv>XfXWQ{L%Ix~ihwYttRY!E$W_02TGAoFWP$7S{b^ znsxO3)CK67pUG7d6kShTgt3uYNcK0ia)kI-&QL#$tsM0Q<}&K3H^5sE-^w9n-x%je z#%5gGZ1URvX6Hs5H(}EU2P!;zM@>n%w;uD7rQ8tME)^yLvgbAWb3eozi@e&ijiI%UIR#~rlVvb`56 zN2%pSy?B0Z{G5RMMMdpByE?BNfy|g$+ls#qwf%k(Oq#~2- zc0$brf8mx9w)n`cy7fx&2y`DaV%B{(+pf!Fzx9&GUh5@~y>?yhulmft?6vFi#Any# z$sD^bPds*Ap3az=)IT$+&#ueU8FpQsdF;A;2CYJ#dF{G9^V)TJ?y>9ge3o68=YG2` z&-GnX4%{_W$B~wiLA%a2mX_LK79Kl3b@Zb-rzFtb@K!_SO}yqsUQ9aEMusE5={3{x z(hEw-%Nbjw^ly<;8)@Z$GcD;1qV0;|o`3TJc~fNbN~g%$3-%x{3TMtLUy5vAd7+GXty5$Z7hhO7b(kziFSqHBamM6Tqrz=U z@Pkiq$Mz2&J~YfKdF^$l=V+?fpi0M>&udLINC$T*b1!vnxC|b;_pe{RdH(0i*QXbk zZ%^O7dH?qL>5=;7>;(p$^F}HTZc>=V5SL55U|hDXU1|t^4SpVYhrQVZ-0$eVHKj+J zlfd%c9BaxNH^9gYmnf z6XVI~@GU!u_s&~isT1C$oPqbwTjG(&Md%g%h2&em8{WGR#Ou?itq932@ZQ!1sEFPT zb8>-km+=KGl%*7AbSB(8=$mkbvZ{LKRuSpS5ZQd&uJ`mf9C>;?P*UOcPao@hOa@Fv z&(nuqkPLMHPH>mPTbqeDL3iSayQoNvIyeG`DZI6Qc@uF8k~T|+5^dAU4T~mu`qW~& z>!@i;8YxVRtVI4Wcy0wlZNpa1HW0+GM1lKy6)ZMEvt8HJ4q848&VVHqzH$=KHE?tC zZ%}Sk>j!|EzE}w|so=2MvYK22OzEL+U??vf`xpFLGDR4EULFU3|GOO4`Sq9G0t|K{ z&`xfTP&X)$aBp0ZE|73q%B zNMq5L&H{)Y9HkHAW=D^$RVe%piK0lot5Eo1#0BQ2jjsaIsoMf3cZo~B*#<0iz#;#3 zDO8*h4W*mXae*`LZ1S0#2=x8tBcJm>%d%waeEtq>%aH9<~ zCB`TL?v#R3)U%R53W-acPC+SZ?Ts0vG%7ma#oT}wi<->pMH6~cP>Mz)D3e=sLjSl> z>&4Y-y#;uXeU<*dtM832*_1voa?ub8Mvn467&*zc%d#M$1S8Xm*kEM-Yw+{tu;1N| z(5xU{>!2WWtb>Ahtpn<}4(KfFV8}F}GfV?|8`Hqb1AYDG;_}tm>r;Fg)BHqXX<4i> zeykMhxSCC7_U&@T3N|YTx?nSiI|{T<2Xn>Bj>j=?(QR6^voh8ST`PI&ptjm8Hkd0m z(uvVru>-dW07woD)BqBJbb82y7*5S7k+)?W;aY}XoO3xV+E|8@OhaYl&1fhimC+E< z0U?6^|1z4B(O_;1H`zYGr_2(@B_amLvhB+ld53Pb!m5M4Jo_^C3xhHybMoxfx%}n* z%a@mD&tIKuBTN`Wqb5-B?o-Wg0-)cO`3o$7?COnhNO248rnYO|!{gR6$|!R_xH-Gh zHk)h>)*V@Iw|w8KQ0U!r#Y-$}Hl9~iCb!5HmqW1nqQ)g<7`Lr1<&ZEd>crBA78_9b zPayhp61;eKasKA*h5p>?vR`p7v1W2N>CBwM)UN`TsaFLoMO+c~t382f=rr-8eag&> z_9?T}lL=J{gl6Pc)+|m?9*9a^k)u239o@OiC)rp_VHTEM@;H1$F8L~|IM6NVf~7QBa-#&xX1L@= zsVvJ&5VWe~24#D3Z+FX0>SjP&EpVSALFXjUzb@sk1BEwAVbnn3jka5O0~PMFR@FzM z&?>xw&`0ZcF%Gpv!&i z)(1%bJ3BuS4o#a)m+NWU&3ean<{}){oKa~xI(z-gn^*6C{d-qcF3BuaxzywyY1CCx z&En}ytf(GRVXB0f?aWn}%4jgXq}@Pd?FyEs2T$F^T~t*qvUa(iC|WT_8}C zu|o`By1tT<>T4qpZOS=ona9$d#o03=4_PNC`or{%dkdezo~U+3=l1=IZ`KU^hDwrPI2Z#({|RLS#2=#Wn4PRG5e{#EQt^{--Is(%&xQvEBi z)6$-Hs&D5i@!G^yqHN-LpjJQ<#n^0qmcPD)*6( zRT#gTK|c1xQrqO0HJpCD{A^XsnBl_2Xa;$~KxtD`I8drUe&Q4>s7f=eF@#2ixo2a= z3M!p?He9Trs$A90_&6&}44Zg;rBP_ip1jg&l6taOs!I28uvCG*B`l76I1|eJIaaGF z#YVdTu$@ey9x4%6RWrsUF_mL1@D*YqN9(>;HKt32hHN{vPc;%N@S%w73m3g6-p4n3 z(sP@+z)d8n8uSEMeF%Gf0CzB;Oq@O-LUE!GT01J7KDf6m!Q>;0blfJ8yQ7b}o2QXVe<^yby+3w=XfvHc$GHR1i#_8fv}!K|yTaPI=DG&YNUu-`7o zhcAz80Et$?Trhzdh+hq_s8N-t@?KgaoXeU%1>TEMRdANx~XK%%&iIpQ1SUPxu zCq3W)V|=z>8>*3TWb_==SS;C&*g4+$8j+o&Aii1yJ00j{9lN>!w<1v?-!Zv)jf`VE zebZw3*oVOdY{nfs(6zpM4?rHm57#{ftaF@Q>yK=^1d=LvjCt<5^W31`vRb`OKS%C$ zaSV1w6yGQm^pRx3`ov_pSb2(suMOU8m#62DQEyJ~_Y8mc>K&M-aD((tW-%3;RW=>eQ>v z))*%otwB{|24Za|SI5>qyKDKW8g1vYTYd^j&+Cj#m7l8f=@XmJEsj)6TX@XysB`~Z zBBRQ1m7nf3IW?%HA=RluRbvIXaf7MG3UFiD@wK##A&o#*p{jc=R7HXjY)D;t75-Y% zSk9SeRU%-j2vuE88i94?H3DnQ?;BnVq4~S(0lB02ZU17|UaEk)Mx}oOms2BNF&R{? z8&~U(Ba`mY6M#;2tlDqO)-p}6bqZ)D#v-ZFj2)Q8E|a`cZ(N%=<&CM|3J%lSB z#p}ZMvGHH-A0OH7#Et;5dHm~U#+~1IJ#RJ9aQ&v^;d&5<*hcR-;`q2snIsL$9lXp9 zuZeSvZEL+oT9eU?!kSJ|!drb9yYOek?`q^_90j`6Xi`p$28mCG+;Q5opb;5w4*P*z z-q5+t`4S70^O{zCFq{_%b7yQK3 z4HQC0L$_`<1@^c@v~K-IeG^WtKp@j4`Cj?7UF_MB)=f?VW1=>~WP(tRc}v!Ni-aCK zI!tPGm_{Yc)!cr!6lVBUD9qyR`etY>E<#(AG;!g125u914BRHVi-D_5TV`G}NqnKf zFpXs57z4vJaq0oXG;!$x!!%$lOoCw=uoZ^EFpf)3U}5G$06(r5Q~+dzhtPx|g8Set zG(eaJ3=IInSm7E4gfacoV~i}2i!%#}#<)ZsjEg>@O{x)4trarV64cSal9nCM&(2HD#4YJDbnphHi3AoHfRK(&Xhd zk4Pg!N~5FklX5i0t=#MGIy(^TrtnXlRnTh$f!&m|rmpl++%)B+4bqfer$B>Tf#aR6 z=BTAj<>R+$RO-<9I!}jk8b7T?gQ1*(5JoR3tUNs4Su!UnpdrM!%GARO)X-_!MEwVhA|w1{z)qVv?mCOVnw4h$$wNrksO8qo zVgqj&@vU?_eF9ql3D9_|iO#ljE*TPro|Pu5K=9~FlWD*X?x)Bt@)@apXKyEg&=90UM< zy!Q{geZ5~0L9GVBqkn> ziX`ELMiqd+^7)(BuY>&!7_#U!(L?#!jM_X=}-}QTusD591*_UA9leHLHHR8-Jn1sshX3*ap5I#oR{{LNM*9>Pe~FNd4a76POy!! zw&oWD!Bgv$h4a=an{(k2#Xjd7Qg7d4$Lusku$~d9f2QFtT2)7!eH5C&2#*e-jLls`HB-kX-<8&<!H{z1+Lm+be2{XM=+RVo;XqvpQkUJy8Kz28)A7?!kF}I(4tzz`R#+W?64y9> zNHueuNFy-j?fAu&SV21>AzfP(LJwW?sf+ntAVjnn^GCcolG(`MZ*PBED|O z@qs(k+`r#)?Oz>bwxa$@LbQ;Ab-c1WE&N?6Ojicum6}acDMJ>PmKIYJsTCJmPR8MA z>5IeB(iexLr7sRgtI;?dt(47mQ-8L#8~l+2XEgX&FQM9~0Bu4;$@lRIU>5*SzSqlN z*H7%ak!Ym@bG;1p6q}eq8_mQSw6F`x#FFnqFS(}?r(0G-oO`hgj*jC09p%9TP!Api zM<7c;CIL{yNjBRZA8X;HS3CUt3;)sI;$L#bROgQ%mjq74fdg{s%%8tedf*OVt+G<9 zRtDvqF6-?T04Q|#YSA;Q01A3of-_~s-&ZeSO`0#kCqS6XRak(Hzgtiy(hjaVWWIV# z{1g5Ge+?g&xy{YC)}&}rXlnx$)dQyL{|Yb=!(R%lD?x=!~DigK~JgbUQxjTnNICOU>3YNHrQ7W?pz zVuCFormz*xfBFfY1M%M7L;1v;HD#Cl!GAlj?Sk!~LJ1ZnW4V_Aj7fM@Qxp!m6Rux-0Sli` zmtpnR@mEQstA$rtpjPWu^5=f=PDBJiJ>D;FKzUxQ1p6S@kJpE-RRJ4{o2|EWXOhmu z_hp@HUF8hS6_FtZe}-xL!j{-Q&K@-vo`lUUGwiehIdR)e6FE zU^oAwIc zFq|x1_%k%a@H!Tl0ke(7X;`K5l9Oi0VFr%i-lUY>%9Xv!Rn`=Vf%dAd!(ih$eHilp z7X?S$h?Kj}ohO+@X-(8_zgA^qa7Gs5B=ODmX}$f>ndjyUe=I*sP8pcNdHwE*xNyNQ zcq#VyrP$(Tmb@V`Rv|{-y5O9tMvm^rHAfRC*2HQ>>7EQ!c5BQ2ZGdU6{e9XUs}Mcz zCh`aS7zX>swVVIL-Mcr*ZDaX@f8UAlcVKIx?JBt>^8voB$6bvrcWcL%w30kMeR~`g zBnV15uF9;b%#!S#_I~!o!Q%j65Pbs7qu0OV3&?qRe9TIk%vBh)Fc*`VO`bcR*a8R+Q@R7R#4ObXp%Ye^v#hGNsW z1UZHD;yaDxMvdv3jT%#OqsG+c97mf} zj$rV~`G!e~-h9U_CH(GVMmq1ujB3?0>RR$85+AVzYy3Ibfi?P^oTA+^UqicNLD23< zH!vE>21a8+r4x@VrHOK6jF>DV+5YHkpx9(>*~J32m5iV^6Xl89d?S`GbH9AK#En_5 zUmkV+ayq1?-;n`6CJ)cgZ=|iU-xQB=H0H}kjDnF4=Zt7s#Dh-0p0wHWYjLSMK0&Ge z?gkPiM%2%Zy%1r{bha?{w%CO0L&$KV(n`Uo`k2t@l>j%`Yr8)Hi|hSuac^?Xi$5)D6Ew07E> z?YAWH)!*YL;;OFJcr0;Yb)9zMI>Dx8Q?2-V@FlEjy+l7I_mP45grvf1A_i2U)}Yr z>SwBvZ(wt4>so#XhhM+7@=p)RyY9Wf9&hUMfJdmqplo<`hchsju9SCS^0Rk?s3osY z&c$x`^Uc-yCD?AhN6kC{jvQ**V^2HQMyw{!d>zK$301rU`BlyjP)_^+qt>9KEZ<_yXdFmmZWLG!@G;X(j!n?18HX4!qo7%%aOe&`hnf?oUjYjJ$H>xq_hNz+XTetq z&(W1JPD07ZM@B|TPw#IXJ3QyzmWvB9=r_PgkEE+~9IdOgo^VG`$jL1yT%~dZ#faq) z>ng1$+%cW(&IYXOZ;Me<>D&|dFr!38+HO`!IH%?b&z1XY)x&rHgR?Gk;p z+g(^5uqyrzG_nwXmp?bZKeIsI#l>R1%mP2uC{l|@{i#w5E&! z(=*G#k`oQDiWL040LAW4pi`;aT*~XZw-DvI`1MpJ;bYo@xfDl?LE?hSRydtWM=;Y& zX7Ul>WlTOodz6Cj)}k>hUitY5!ID=t@u~Fl5rQ?ZZAM5r%|}Rah|R9)gM0)BVG`ye z%%>w@F2c>Z0;#sV*bD!EHXrp*JhoJm`m7v7sZ%0F80-i~Tp9THCWaxdSTd*_;-EF= z1K4s1rvlg_ZLNnV68e`TtOG6<`j%A)p565RjKLfIJIv7NVg^Ifh0CgKYJ0JNMp@S~-0}=bj*}<~y!>Z_kEXo5o=^#)S>lQbTV>~AFhGwRL$evB4(xuib?h4|49>xi?H+4z;&4_*Lb*hxZt+ zcUQ?q-r(+6iKk0P49{G91oCq=$@9zo+rUQ(jDa!;v()-XhtLb)7qZAvlir0tny z)<-&oUI4F9#XAiXn?ExECLVQan}41@lkg93!e_hy%TmE^Ua@KgVNAVV7Qy@aIwx=VEqKjY4GvRf(&f*xJ8{Y_6eK?8EZ%}kTL#=odsFB z{Awlp2xq~(ryyIz6f8(wlxu{$S{r>b2TJ)efeV4MlDMAaxo9dyKbM{8Kn4sd)*CU zxFfZ>y|@^qcF4P%J@x?6y*?mWSluH_q(Z3*&Q$}E?qJhe<&M0wYOq!)x4VPA38)!r z^qGzki!B#=6d)z($dDHVKG9KNfx>Qo)9-~eq99~;-EH@mo4r+$JDiu|E2m*sky}TI z<;s#d-Xh}&BRL--mLn{zvJ(tt5HyrSnuP$d{F&b>KrAv0@}$2snd~T zENHSWN=1e{lJ}@>wLvfXJ|&Rh-kXyW#BJ2}D0%x2Cpy{3MD4B**YYu94>bJw=eYEOiiXP}hNa|#&%2~}^54}q30~q} zqYd$wv+IE|^O^N%r`brdzLYp3*CmW7cYURH204vplsY zpqcY+<<-LSjZ4|@lBf&^)D$%h{6|w0V9UsZl4mwk;{V0m1UZW}iG6aI18$qoO^`## z%)aoAY>kVSRv!c+0%#b3y_AH|7*I8(12D*BLg;smWHG5pQv20DmDz2A`{i&StL7Sm z^t&hDzkZ5~k*D;w<@T_$p!3j?3nGcTTe5sb28MhRm4P9L*bIz5^t}YCWnNGj7}7b+-D? zokER3H=I#^C#WLljP&T_%y@KaKG|bm z&g6{p=;Vy_=;WpG=+u0&$HAjY3tCxz#2(A_vp{I1>|dSPq#CC4x> z*=H{kxp6muL?Ue(xn<{9k|so+oSZ_Xn0K`lW>>rIe$!tF^*nI8UfC{unws`IpxOO9 z)dh14>UVIx=h8L0|9y|B7AVR9qCj20x(44~U(IE;g2G2{v*8*|n738=wUBZ{Nv=`R zT%$5vqY3l2+@oxwmhZ>0j$7}XRGP1po=%>drXtpxlh=!RA36FbV&0q_-4iiyPF_=a zA9)ka`-sP%{sGP$6FHml<>U>c5G3T7hCq;zLpXsTA@VjQ5G3Rf8;^=1NQCa0n{$om zecAnT4u?=N)F4~KE`T)4KGvg?qbDSa+91bp%A=E$SqD*fr_YJN2_nh$PQJytw4n zexqf@v=O4^;dF6*>%$acv?Ata3ABbV4F#uT0remp1jwpt?t z?g1S$6?(i0OyPaG#^kMoPGA${c#+fCs&b6UuE~Wb1hXb6?1+l|IUoypOIpffc6Jl$ zjfF4e3o<*qphLg~W@k5{-dF@ik%7mQynAzbbE#B#9lQr+YOq=ubcB5m=(ftf%~D_Q z+6yj6?voEv2E2ox@2H)-lbl#=jNQ#aIYOZ^#AfeZ3d-ho&^;1+09bgx`&oW^`AV9A zuiyOneMXD@;OpaH6~oM;N5h?|kd$ zixoBsp7~L5h)Bj*i?sl>vWJG=9H$W*aBW+LlP7-?TX8KHTQi#7wNDUk5GeWgUYqQT zBc?Rr&)QMoGw33x8FYd5!ZGi1k=yjLSyxoSj%_5nKs*W-GU33}1zBZ^=I3wqMYG(b zpo9HIVXMsB2{-W-j-p@`Hz`QQRp>J25grwClc{HnqH|+h$LQQOnTygnGhi=LgZ1dV ziYW5nQlDbTCyQ>4G>v3ty94)KQKdG)hxx9#dxg&&U9Q#x)IjgTo9*VHuFySlPClr>A>_GOVMfca zBjwhUT&KxbQcSx|pu^!s)liylQPBzJg)Ws(tDzndok4@BBmLD>z_!pO>+$y7as*$N zxSyE}B14}F*vVo#0Z>x`IK>qIMb14o@3>4n{ER-JTJt|zw9>1C5z2Fp@ z_MN@w=Pf;E-Px>22|Ii`(;oO`bgXe2O6 zl7a^7EsLR%$RUj6ZUfB*wEL+Tg_t#g+J!@&G29GWa*}x{i-P3~o6${^Sv-jh%8tri zTF~!K6@&d%yAnM0NhwMYuHw6EqvK%`zmwytnY_{6PzZZ>`7iy5djJ4!f}XhRg^61I~3ncXgrsu-Ik`t+GEW>Vp$s|ip8FdP zLmnisInXN&%6n!i5U|F;PsKc{H<$!daprU+l@*JTR8~-tR8~-tR8~-tRK}u_)Hul= zM^c|l{_P^A(AOezKxgBGXY&z92&ZDCfH50T0{Tiwo%NdO$_% zz8&YR*JIS9a5s~`|J}ZRMFBF&A!I5&tFUN2_4=xY?6|T`PKyG#>c!#4Q^i@$=P6ur zR}Wog9-S8-QPVF|FTTvJm(Ms;(qh*CU6%2;%CZ&7$m;bLkPC4d6wIPv77cu17p?PR zwqvqjZG;J7CsBQqW=(!2L$JUIaH4!%x+=Yrf<2bA^?{F*lVC5;lF)vcRzd1NoDwZ3 z+ZE`@aun&1X59*uTRDnCxs^jGbYwY%o=(4NIz2s|oh zWI2jLM;2@#(2?Z`8XZ{y!gunro zBPeuaQKqD5C^7dw_M9@MXtzw)&~BL#v|Eyx(Q*j2DrH8XBa6~@;#nffGG9hVmIKJj zkus-TrDZ{(Bg-Mn=*V&amDyBcU!Ay~QtG}sQ^T{spO?@y<p(|gDj%zprsd&$ zcXgPwxHKuyuT&Xf@&rafXJf692WDt+nKnsv(zA=nCOc~)IOEG?Xh!Gbb(Pcwx?a|5 zSz9BkKdL}RK7#qXu|D2%h&8feeY{19<;C2$p}eHYn{x%YE6sL)_7l*s-J!cU*X?_Q zALhS$-(A?0RR2no9SZ+anV8AFX|K(V^X!#ah#b$(ENN)3vY|3BOKc1i&AcpI+ZNMp zmmcD6my0R+kXGd+tuj~-hgT~vM@uyTwkrMCwGk)CAU}5MRV`mQ9$=K@b53Ol(1Hc4 zYDrXkXO*|6TRfXnWV$>%Pc2Z0(#G|kLy|3||3b5N+`w+d24dE4Iaye@uAQ@f<|@hU zj6S^ET!@AB?Trh*@N>MXc8Q~?C5u*Q0wSUIbMHQg>q`htmq`!F2@uN!BSj(SY!4>k z#k*P`5m>*wu#nK-{@KeHFW;QM`RmK4=RZ7ojsC5&r*(y%J_HCgT~E>vFtwoM7!3B) zhw2F|i3MfTZ-Dpb7;6cF=e0jgjzPcU25>k=c@bjBVWl7lylznTI-s)r2&fE63xUd- z*~g8|^5Yuj9%noS`D~VQRT2{y%|hX(0?m5*;`?(+Azz0-B^K-DJ)BroMyZN~fGnTt z6Z}HUyze2>qUGP&wDd615q4GOBkleJl>V3#wAn+I+E#!gx0|NtAu(&-o*~f=d?{0{ z#58Hqc%)WMNX>se3uSW;JY*c=O)xFhu3F4W`nfmsrT=C>%hvGE_cjMvS*7U_JLhmV z15A=#KKP8LODRSZ)b7qu!1EU`UPehk1hN@+^05>$h~d3FBe`=_to%&%6c=4c_NHK0=^)*d7{N80qk zNL&;j!~0X-$L(SF?m{yDa2ltlsd~zr1{snF^zHS=bnT#Uj3>hPOF&qWkGf|N=c=q zlod%~%y5o7B_UV#Q===k$fl}t4%PCuELs1l0B}?~R3#xDDr1*R6Z-c|C7jk2kl$Zv z9|u@6_qV#x#1C`X9RLM@?=G*T6rGcvsw4%J>)qUk( zstP$xB$iNN2rH@pS1v`jnb;XPf`6natLjuHpuLWqV!m zS^Q>c{4KKu=9OpI^o+m!`PuhR?cRHRBZiIAna2${wq71N#GEz^Ff9E26c#+r@>)6r zqv{qNi&aPA4pyDT9n2>FG8A`R6n9Wcz~texmruU^_SN~D7XZ5W()bErJ$>`ztLLx3 zh9l)NDn9$Ca4?h)tISvU&l!|(-_=QI&YxHHDVa1;_4X|b-=F6vO;o*g`4v-t9#W>4 zGwS*Cd>?n^wT-ev%0MZ#Ss=+~_(gtvlsK%PN}KY9S013NPTbXZO_{m;zy06j9e#4x zqQV@_{Hk=kEvlvTqDO;=!omFIvr!sRQSo%3u2 zC$CLvlrj-;e@y-tv>`W#2RQV&x!xB)kg1t~T@^dAF zI&59cO~&hoIBoug^mp&^R_9i#+7f&SorYMA4MmJ($68URDM5^NYB6t?qPBHvbd=mr zWzFh57-NC&n>i0~T^w;bg#5RE6X#O&FxOsXZfyN(W8=lwucq@H>x@z!>O5U>nCqOj ztZIi8eSDas8eVOZ4Ab1Nf~k+i%EUu)i*r*KD^|N;geF`&Z0Wh$E_2GPHrMz;(qIg; z$vFX{PLUU7t&y3_%&Y6UCE`=V-EIYB zq2pRrE6!VGE6DM@DP~2UxXM=K-|oawJgr`F%4(9Q)ih5d4WhbP#nYMfB3HXMPfT&20un?-^yxPim>b9vR?xxr+X*0;2K9Slh0j7;X$# zaIj4ZYTs}xe8)sR*gB-jx7?Ut%~Y%CStbtxqRwAea*T7Oz=BG7dVRgS4otgRSko@r zCDa*)6Nvfq%WLspkR}8FAN;me`(&`k;CX?J5VlE46F#zV!q9t$Aqgl}xZEY`Zu=eN z@4DaIoh?@is$;^XvS`Ketmqo8gczpS-1P3s>FJmKJUTxN9xcreJLXNYAJE)yFz7Rj z)&;xmIVV)o4O)$`hL0u~+)e7R3!z6>(QMpJ zro~8iICM}-VV##(ynkRX>n==i7eblfnci$ShfQ~}`9Bpph4FZ6kcoYW#SU)|Z|)@( z;qKf$efGoolkdNO@y&_OJUW4`bdYe3f-A}Z%RBXYdNei$)aa_SylrwX0Z@HR9&WGH ztRLgpMbg5#PId~fZs?85tTmX=ZdBgPY*ZC!;Knm?^7Q$OfBEsd*KQ$9Z=N*kf{035 z;s71#$e6Ej4{VM$q!xtF)JNwLY>|5w-CVNCt=SUCzH5pFPYn`=Jg%3!bEL`h8O^pS zRveOIg=RbRxWhrAy}UgC_UU&|e*FH;`493x&%Sx``px;9H{J|r#O+4o0mYEy8fFtm zGY?6Q5!1Wasoj~K-}f(Gyu=Bz738U-a?uHvcDpj>CRol+aC>ukeu=mrdmo&J(MH#UZ#UmF*jOW93G@tWAwB)?#A8xFM8_wb9j4eU}Gbttt&Vr8TwTQI)#Se_mew4|fN! zfs_u}v~#~Ry1StPTWa(_8rDztt3=Z?X|cNCKiim(aKA-yE(kwLE4p*l@>?Y zU5?^SyMvRv7?`+wsxxlQyzPM~1I@z^*flMcVbEYcY8NOT(}ciEXmoc}ugggTaa3q14}nXo%`!{%*IImjg2O zuNuUvJ6cSAzwIG>Zh)#c?`dxk`!)_>+jNWdbxnU{B>|4$e0J$dG1aZ$!5v@afC;=W zjWsk=;mLL`X8BGYq%Ka$0g%A#7KR(U8RSl=_z0l=K-w&5d>7&6&tBT7%KaqyZewyr z+k^P@U{dBbN^8jw5!F1fl*VsoNZMsG} zSk#xQ4|n&=?JP3^d>zy59khx?7$ zqYM1Yf(^%Y`f!0q69^dlV1eT=77^i68IQ^EgUvVwF>~**yLSQ24{k5Uqt?M)S61Q6 zb<8!5%k|dbAE#c1j4#;R6&`>#Z7ACzSoJnF4$ZM%Pu9n44hF{ZqJw#&&_c$G?(O;| zPkw;fmR=-4>VOw$P&AHqWQ0^TfAN#YNrp$P#gOR24rF99T5F3t7r-Ff3|-m1Rc3Fd zIcsg6E-}LvqQS?^u$qskBQt#V{NJ7+7i@D2u3Y-~&AFQbjbd~}EjFAg#*buzQM=XK zyc6&j<0Fd|JLk}Tqi3g}HLkYclvx|D1~bVJqPzXskrKe`gEoJ5o(w~v3u_z`XHEO( z-0@L9;?VD=yv9BkYZ+~wwCG$2z#;M@Y^*;#d+ykW&a6Ly zM*?+RYwFOUEO&%4z#9NqtsSQj_aqVyE#W`nE>i7f+&ZYa->p#ca}r*)~+lf7_542(8H!4Xe`qndrbLtbXp^ zN0CC6F^21}u|;}t_4^K&vMw+{)V4O)zBmT6Y`a+nTg-#4MtFJ4mw7o_xwqiuovGs) zvfG)8Drqh-_HFvy2fzltmXjO6>c82GiOshgy_={yZYcb+L4>y(XuY+>u9ELe*Vkv; z4F~h|01CxMN?6s9u+!P_0NJM$40JnqcW{#lQuy3s=eXm4nI+inF9!A`(2 zaKjcG0ed!U5!$S+?gSizMQHoQ9B6d7G-MWOS|5?cHQEe zd_gph*V@J{mc_>H)|Rs++qfO(Y|=c#xPFUivrEt5q;1>|%j%$*QwQ^mPzUF1<91-n zwsAXrgjzTlwU8GdrxwnUlm?$i!0_%uK5_Up5x>aY-h(9|$8;K&(7V{XVt=tS72V^_ z#l;+H=`25!;|Cdjk)Xu`K>BioB`muC5GKlIe%PxOwoKCR*wC@rovh=jvQA^h`TTA3 zlZD>Z$3p%8=bz(~G2bRgm6}YCj>@$dgpZZpw4>D;Vh|1ONMXOUBc)1pXd3(2T`U+u z`@y=@3hC}R^`|RlPkMb+2Dh{wAh7UZoZf>jOUXUxoKYItgDz``J?O|Z-7cr}!!CE; zoMYf`|4-86oFb3+p#@{Nh)VSP4o6qmoXYlCRqM(*RW0{Wbw7?{bgpuAff`)tXe2qc zD;!aI$*JL8810$s7`6}cr{l-|I%cz2haih}@+lIyXT*6Y9 z`)Hs0#+2tn<1^=QdF^(rUc;&prL)X*M0qQY@NT+goX)PDl`#Vm;dt}n#Sc%O|Mk_= z?_T4&G$z22hegwQivw;S;OJW8&1$P#Eq0*0J%u1H;OM?pX4pP?yW0&9z?75L*j9W1 zKnl>vLc|&tnx_n)4UTn51@gbP9fIRRAK&b*DV^DUAJgpcAYjbdERj! zTwi{abmeA^?7oj;^{-#Ip6<5V^$HL0NUxI1i&G~%zjmCeAM2EXnfXC{`8t7O#T$CE zoRgD9q|@kR$;!)aXecevwsehfxLIaV{x1d+ekiI0#Z7TTvtKTeWJbuOmr z;UiW^{*jjaBULKanbJqEW+2$bk)B8IEGpC_i?b>k>F86Vgw^fsBOTwqdhwDBb$olh zyZZl7tfNn@nG%n6^r>^af8tn2pV40OKBK(keMSNX^%)&J=t<+S&ndv5K3@YE)aOL> zpf6UeOF^znK>-H!#R|Zno`UJ=8LcezjN-XHBLRbYZDPe^9lefvQL&C*8%2w;j=pr} z#E}8rSF-}3BLqMY>*%X=G1k#nw`c!-W!QgpJNB<*9llRHh;?{40dK_t5+zm3#B1+z zspvw2+-8Jg8_jWUuEqVu+irJ(mpt+it3x9!ffv{CFaHNcIQkV~#~#Cuu?RkS;3B}pPpwPTgy7{{`GbD>!)+k_pL2nTXNC&tu0mdfn_C+oOxAN#9j2$ z@RYrMM+cyKOg*0MMA`GXWoPNM1>&Mx+INJWI!|cdtq2qJ9UUgO6ho=BHnv#ER`iqMa99v)WQI*K5li_cr(o$3cVkkAiQAfX?qKtexIfrMU= zx}sPcNLYv>^n#8e^kPjE;bRZaxDZC**&K^!2t1qRujT460?$4ojPU3Y9Y^39ZN>AP z^d|6pMI3?WYvKqzN5%h`^YLPKA?p=kgsE1;i*#A5;l=F@0A5&V=Z}me1Uk*1AZz^Q zDs*9^3h!LpAKq>FyLf_vQsn3J%eUu)xX|w0dG2)T-fV?{;EWa!oKXUTGfF^kMhOT` zW@z$qv5^Ze8|_doq{-kplnVvhNvYe1*X7xG@PDmODWB~rIcpg>b7K) z)8-$R7W){*YH&V=uDdmR+EIRN?inCay6#qp!JZa_{TeaYuM&gG4v9gh@mU8L^BiFJ z?oojR&R6JOoYuW~Lmn!F=oyJ5@L|P71}uwT6-nTOVN@wwDTwWDrcl|aM7($@RfyL= zzI^GPVf`WiaD*B}i(4pYw@5f?F{?b1+QZ}~v#MguZ}LoMH(KDDcbyblA$H0cBw=rb zuGRio2&0emH{+4~3Uj3<)qlpsMcan22xRe*6yqi}Fakw0u-Ur4#w%Ei71_lxIJ|d2 z44-D=f_6npkXOTz}&12W%mc z`Avg@N~zzqeS?i{EiI;Nv>0DZgxTqS?_wU|n5YiG_BlDtDTjQKWq*>rTV==%xm}c5 z=yGCF(2jfd!})iwo<3DDOfD=iV1zD?2sDrpx}jK1Dj5oHu$-ziz;dcmz;c2H^hc;g zKK#PKR!ovv&uk2SLEDBFhDnJdw+vVZHwWN-Q7)SB)$PtALGCS1Kpo|z^GWHL&R4a zO=R3%To&xa8X%G(kXgxz1wIy%X0q z9}uDItoCyWC;t*??c|5^zdU*N<}CT)&G~D|G~Z~zG^ZlP;G+iYO0mEzuxWbUc`fU- zD6+xzp*1x=Sv|{k$8>sz5JO#G&ggj{Hc&2(=7BP?HS9m1g`N`zdM=y?$9(LeTfsZg z_REh%bBkjvzWp#ejcRT=Mu%_znV(`bi{E6hmOQAXps;*E(=r}I7<$@Ln4kbcc^aWK zy1SDdB8Pqvyk+2Xn^n2Z>d7WO1E)0k!4=8P67F!s{Gp#?5c9fg_Cn#F;0Ev|8EJ+r zV<740o4n=J4_FUkZe={pZUS0vXBgQ!2eOQ_ALz{^^C^eH`e!=NmlS{+51z3aTO}`~ z7V+{}EhTm2Z_LqXzpFvm=(yhvQ5=hUggTBKNgt0zqomA&qzs5Dvv3|=1T5aPF9ORs z&^-Z%(URM&%__1vp40{Xz3#3oT7b^6{k%BFfJDX#nB7l^-yB2j+tiWFp#UkpcU@1lLjLi{z zIrko8TojmhirC`#MvUYqf;m7LkK{{#$|dbN5GDHvk}nDVE=oS*)FeqhIrhXN5;1yW z-7IV}=Zq^hXagduMId~Ec3cbyUsMzjzNn)Htf=){gXe&>V0ELh$>pyFmTNZEwF~OBorwy zZRObe$moryyVlVv<1T@MdZyGem$9erY- z3-^kX28Ci+>3Q{8yG72NHa`(!ndb}33SB;D7dSSB;FMGVqe4lAe8O^(6M{(*kqSVm zH|Ll9Af)VvHU?TIEXai<7=Ge2e=t83^A}U*@20}>g}tUH-s_BMiZAR~e;SMc8PgQr zp;Vk-ZOYX(bT2%)qo=4EGbFHuV)&2k9VCMh3=4&Gn$@lfgaO2OfkWg>^DG~7_cCzy zAo$S zr~7<&X+m<_{XyPEvV-l-39dDKg6SXMs~2xK+xffwvwV(}X)mcxU|M>b=bNLNl zk5Sb#v^~V@fDmg zS31}TPK&96lU3FcIu<&lk>x&_%YRq?yA?XBk>x(6%RzZCsIh~lO;C}08@&;Wx z&HRuOpW!gmF(s{Cp%ptTaG$_5kt;iR^1YI09DmkIMg%N-EOph+L_5GamP(MMP1Sqa zf%=#{l)|20{rWiA8e68hKm34wjBId(zq!1!-)#4rw_7nt+k5*KjxQknK5)I1bqUqb z9lE#I-6ckuObkG7*5O=#ck<-B^JmYWzBzmS;+uax|MpL>p8Rl@IP+@MhRtMgJo9P< zgGMU6MoZJHTcQFsR*hNw)L(q}vzD`cSNn1nJ|++C6s?zcte3phsJyF~wJNoH_U$>m z)zdeq#E&(p-HbH`mxrlSA2W(Z+cP3<=UfV7$3mt9p5kVr=5P1sT2Lh?lD(YW!5ukG z#%^-~g>X-=Ef{(Dk>Xx{^rlMIk?c#dF|l zks{uAjApQbvDs+q7^v==(eSB1VTRE-GCBS{IX{(iGPAG^!V#jlXFkQn)kr*dp8w+PC@@n`H(k$M(<(5%os26VjpdsAwcygTf+ z7bnl2t6JbE&;M#U0qEYwchm;qM?Yi3zbzD6tGUA+_a|?jzJ7E5^2Mt+-VGJY>!7~g zdkHzs+UB*%F^DPZ`yz_;nCmG9EBW2YM18$`ntbk*SIy&&HQZBgT5j{8Pk`7kO0s-{r+&(+PF0T;sh`C-D~Ubf^yH*~H?i z!WEEZ8g;LSVMIjyRjN-?rW&H<_)2t$`MN%s{Gk%s6`+V@c9N%Fk~#w zM3w_69aRpwosKFmpmfx^KQs$8*?2+|K3Wz;%ao4PZsizSyOo2MwA(S|Gcu*UrFwfr zT}vXTqjcOc?N{r#a_o|hD}SbRTsg$(xMefLCR04Fe1(oHN8L`x4gZcMl{R+|KcD}) z5f@UHBY!alSIq_UpTnW`nH~Q4R&p-;1cEN}Cdf%i2L>ESx~e>ubl8Jb4rAmNf(5ri z(hYpg78(od(@HvTWmE;&vZw>g3`Cv3GFH@iD^beGE z*$Vq9TVp?EXg|%$x{UE7S(n?ckpBo-m(k``b_??=E0&zc@@L9ysLQ|M-z$#l7b#1yR>QpY=f~ad7Le#aSv5SI726)yt>qVUbOpl2=PI|vG&Q^&!zQ+5N@%7%X-y`aV^j4xy z?p6ZD?f~C<-MtsrdyOTv)8gyu!nDP^-rE2P*MU=c(fPkU`TobJ?#XN+BqD#dUMR+G z+PG$@#Vz?&P{QH`QMn&P<$e%VKHR#f7(eD^xZf7*eKrIvf2LeinOJmDWx~3s^2X<7 zD4|BeMU{>82^nwcqRK|fMMZL?oGu@dV^%nt@^sPBl;_8erhL4;qbY=Wh%=--B}GS` zt@ktK*`l8*&q&QJ&y40)^~Ve;wFTmGoz`e>dH!krOpd3BZP#CTJ+?!}VKXjZJC}}I zp7T%6FrWr#9mmLvbOp!Ai>0Iy`7>qc=f$F-pEGOd=iKKQ_y9&2`Z*&F{hZy>(9cWC z(5E>@Nt^3=xx!q}%SCfNuaC|3qP)GiK7lw{U>Ox@uIJTyb3LyX&Goz@&Go!C=6Zds z!!#{ML-Tr#xt`ab+FZ9RquWEGWU{-tP6oMEo2}}eiy)SmoAG8hP0UE9xf!tOONvO2 zJ)fDMo5B1f3iFsSF=Npsn>VCOHg8tBWb@`WF4-JG)dM@#%O=LR!F&+)7fTAsTRJHu z$I>C@CxtLq2|7Je&vzfBs<|D&FCulz6KKVIEx6dchi}H~-Q{V_UxLphqXBuhDjJY? zWHcb}Of;Y=XHJbxT9U)oL<91EeKcV57ZREpF|A7ihV;Xef0rM={L(#<*($RzQz)F4 zZ9?RASR2`JoD*Ai)1+AK-+(p`$>y8gjcNd)CA%G=OpEPtYqjZ-hMSo}kk3t$dRF~( zmfZQ{aOVtfE?*7l6U@3n(r4j!aggL$*7?a>_jU-s?p0Y8XTER->uyK|+{ob+%-pD< z^Wfzu3--x;X9?5`Ba1aXv0}WOj#1?{M%A)os%$ExN{x#i$#oxdVRCAR*5fbgWAbo6 zAx2NZ+75>uC|7!yP;Js5PtTHcF7xYiRjhzdW^0yGShbM(9woPq!n%|)kK-|4sTv)J zpCpiBjz>OH#$2vb{3fcIuUn1QoU46v&Q>gpMXEhp^PNKE&!jO|q{f(QyFgWFJENMx zo;=3EACYT7q~mECu-e>1hcP!68Ex|wnXTw=Qr+t_P|k|t*qmeOd}9mAPSoF(O6NYg zW604arm2E4kEKMEy5Jh6zU`JW_vH(a+H+yUWGl3}B46YHMNV>nBDWl1MlLlKQeM7B zE)~UX<&xP2o5LS2_}iW2_3)DiOCX`M)wnc8*|sv%oucRv+F;ijfRRPwAnZ zrF)Xm_Y3B;;_8@!OEyozpziOxbKq(6)#IuIERY>7w?I^Gl z7ZuwAA^OtkeNg)^dQvX*d|9zAbZD#rz8AzPoNQ7cd~wy5(}KZ-!*~;vl)^{gPH zT1$>aq{}GcrW|D7w3!oWE8g_@Ws_qK9S_-pjvf*+GD9$+b*+mz1IY5Sh_Y?qeoj-U)@6Mo^Iv5ny>$klzs2-H}B(bb7%9hJexRE zP99B`S=6q|9!*898eE2yV8_&o>!s-pSbOqrw?BOS$9)1$(y#w02`+FxvdnUj!0A+_ z!8Dgp!sXAJ;Z-5=Rf_o3bX2AgZebpUGxGo3g(q4@P5suVXOk!Bu*%p6eKx}h(Iv;K zHTD6kZe<@3N-F6}g#b&kw9Moip2#j~yJ!3r<1ZraiMq4nf<_&yfm>I{p;mg4FRi^XPrH;gP6 zW6Q;2%oK~oeIKk{L^P1Ulipi)+iEekrdo{jeXtc}Uu;d;7h5j-Vl!o5WjpV_y^Zf9 zUGjY}y7Y_PqV$U`mwqw2^o!ZjuYM-JUgxOgtt$Ouwe@kEh=Z6f6Tp0hTURkNy0nYg(yrwyW_GL6F7^*9?P7Fk7h6@@#XebS z*SD`;ybKcF*Cb}c6v|b_U*&S~S4kFsmCMCnr7QkozIVp`PUM7@bX2RnZShz6`ynvO z6(wBdni8&ZxrD2nDdDOtkzd@l+|J- zM_H4V9A#}PIffYvv_dVdtk+a>l=b>b4jXvVp!5z9A2uWki2obvCYRl2t1;`4V45YA zV)-+HQY=RhD8*yh5-7!TL=2@^{-m^v4Zz@D4&pu0dCd(}7_O&?-U>G|2*u-M7PcFm z9Kx6JhsUx@b~$Wz_qXB~;4$yV{jYMs zE#2Cz*ylSIIPjZ%gzr)`ETT}plMpZyZ%)w#qT##DI6uA*uzrFxlYy*J}E^J7gG&( z?_eA{r(g`zJ7ZClyvTtS;D*f*{EEVUs?60^lxUr@UaeKJR%uUA=0AkWJo_Kh-cSA8K?WwrrJ zHrZ8tql_=@s@or!-2-p2^ZE7w@`pviTjfMc7&(Gy2{TqjtR;;6iRoRq7TvHUQxn_- z7-`R0e>0vrFlsPwy^kA^C1*)wy9(PSrk-vWA_Y{1RXQ3ELcPfSmoMx=jdea9D`rn> ztn;ZHVvj2KH#Km>SInN(-ao5;M@TtF5l8QLN3Ft6qhqD2oU+mHj#^K;qbgMIBj8HGGZHz$_v?wn`5UFZ;aQDG*zZf#$v_D0B?_(S-@hW+zqlxH@1{q#>+b)Hq4 zqO$5=g|d&$g?dZ{4|PZ^m1jQ!E(ZthR~ zUNXHNk3+L!ml_jp_F7#RXTcU=tEr{CaB8n@0$^JCdmRp8x;+wCa$$d?Dq;OlaMdmO_3H(Ftp%oA$~v=A8>I zZf`D*-nnzZjpMk4wNK=0Z-t~Nu%_kAwV84zC%(B%;It?Dn#KsvaAGOes~i+oU@~c zOOckIo`xcRYI|2>+(Bmsn9`O!^^)xBI(&M@%;P1E{8&0eVL%1hDhZ?3h=MRT*5m&#W{FgKJX1P!7NU6i#zyH;{udL7H{yTdG z^2noQ&2%16K%RBULIODoJ;6eH%LopHzokC`(SC9Hh0(i0cNV)Ry^$wFac9hh`ihm;fx88j zvM%_tomQ)?#3dD>);4m$K&y~})@%`Dzs6XZOLm)D*|iRqt!S8~{sMc#>p;z2?l7qJ zR?}2$?1Pl(SCZ{ml?|+5&q)tv$NTQ$Muh3fvroEvdg56w57aX}v*kD6st7j!k+bcU zulqm2ZbIScj$OH8^GkB`OHzQ>mEQi^+x{>qv|eE^*Oi-!^NgFR*r=*y>$aWpiClR@ z^j`%fFtx(J*A5r^#Hquj#*($sC#m4obje!EN54U<`j|XCKff6^@AsSHvGdf`^`hgu z)_sW=B4IW5C62l5YL#cW6bY-r2Ap@<)leG<4ClkOR7ThN?9|ZT@3gB`j1Qc4{nTlP zvCg`+Z_oUehL!*Nt@XpQiAN4gxazj~nsA=it)-7y=eZi948klhU#p2~T`SB*@W*lA zALn(S|2=XOZOM3kZ{3j!NuQE(vuCv2>>FBc_I!oh3R&>vikv(<2KXUp2O>Z^Eh3dx2hyMV5_OjSD+IP%fYv zdlV0Ws0;{q;FL{RgI$)VQ)h=)JyHusF@CXvgtg@~&-g#{qau>`ILFWa=1M`f@ZIH= zJX+Vuhwd5>j`z-oWTk}K11A~~h-20PfSi0>46W276C_T$GCD@u-pLZ3@F9 z58~n?Niqsa(HMk1t5K}JZMf{Ktf1r;G}irYj;SMRdfy_q0X!_ug6gZs!9SwX`n zR?sk#6_jySU~R;=;=tEwY%nsmkL8MUU()Bkq|ZH~4h}(F)SXx_TDTl#^h1pLMdboX zJ4^oKQR1D+Y8hedvq^wvF)rh7N+&}$6(?kJQ!fe~GlmMmH5h`6hGm+X6Rzt9<4n=0 zY7+Qb=VFVe_ULs78^wST|I_I*O+)+Hn}+iGG#ILi1|6H0^!Ya?RwegmrV6g-7_-h(7~8Z79?>(aFW$mI*{rCcYC4jJI=kj^2W8`s z+7}#@jkYWZ2W6v;3(7&+^tP^Rm~&7zW4K30oxFaBoz?Voxp%`;YF#;_?5u`2q@C5+ z(x(MGs~J+-&T0m>!p>?CVWOO~vtrARrvsQUSUKCn>B-$7Y_3Bo37(r_#Ucy4$hkKr zIO~Wdk@}0A218aXvRI1VB_VD!xB#K9ZF_TZVQEKx)ESyKk^vIqEU{~IBQN>zt~-eL zQWx3mAxL4?3T+c_t-k#7fn}yK!?0PlS7q_;#wp%fcSbF%&Eq~3+(-?R9^J@-a&oo>qc*aLIyu_{&?~y@ zz0l|tU&AkEk6`26PbZrz4WxWG*<9@aKvb=X=h1)m62W2Rr@d>*jmoRM=f2+@_GgJ* zQn}yV&BZ}3t>mYN1oE3qnu-OTw{zJauH{m1wx@Wl$-@J_l5~5%*}!Afgw@4JSA}(^ zR#Un{=%!ZZF3L4*{R~Lonc6aIvNay<1xb=ES~tyv_%Qy{Vr-`KsV_*cX?5me?Po5Q zlMp~#+9*-u+xT9wCoY_g(dffC><)Wl3aIT9*PGoS*{)pkVbDS1%@#5q^?EzL+Ug9$ z!qbJd#o#4WZh;eo3w2%9T)T_f7tE%&0A%>+z}mrXQ@La z!1W@zP}KIW+a^+E-NAELaw_q^)d`K=Ao3%{peYe+y7fezQ*>t060PH;V>{{Cwr$(C zZFX$iM#r{o+fM%2#_ef^lt=+oTv$$g%9!2rnLCT1B~hHE^19^jIo|#SY`%T$qP*TRydCiQ0e#(6 z(r*QgCElXTR+Wd&uVgPVY><&Ix3w5HVXqcOkYHDjbc?dqxCGhUN2D(vXz}TeLnv!% z2V2F_OG;De+DcRZ!@9+`RjAQ+egv>-xy)DTFh?Xebdcy`GS)bpFXbbt2Bx}!CYa(T zt572PP|RO3V!{gFz?fp>CJAK1tC84}Vez3r>rs|u#ZcG4dtYhzpf=HaMAE&Q8)#Lv zb~paD$bIJguX|gfhQpWW{>0n`s56#=|R1=%}SUxQg;Hx`9iG0Sy^-(@~c3DKHo#4A<3Xx)x-n?0o zpLJBJDNOz}Ow&%jdXS#v3SPvaS;kz^(Z4vIki-ba zbOwD$S+$9lO;eNXN<*5`5Q`Khbew|2`lz^o=az-y$wyGDgIw#F7jOsq9Bn^&meuJJ zC4nznw#ixFb&Rq;15 z{#beUHbU(L&sU|XthAEm`?JmMv>DGak2F#4 zNYIFi4331st_2h~@@Rj_ql*Ql`07<3s9p!(^j>W8=;; zMR?WnWT2S@eR}!8ObuX8XP|L(vEVA}gl+2Ka5%?=Lhi3YVKGK6wp{qN!2%Hb#|T=f zBzp~mY)1k;Q`LSr;$YiiwTD_>qE4?orE%#CO|a(II0LOSS@a4^E#YJMzfXR#yO|Vy zISpSMYuYK2kKafQBttcC-V&~R+)+xiWn<;pHHD_8^3hX@9>l1YkXhMSOXq3#)vd4 znlak`EU)zH-Dz&UKZF0ZCi7q(VJWX>baba=f|ZoM(m&`jWz3Ktoh5n&_2>P9dJ4ZF ze47XC=hU-LW_@$${++}_GD`L1@h@%u$zA&XFunS5`)t?j&#cO+o65^FOHghSk8Tpd zE3!Y6@Y&sH8~4&LpUry!|K3_)bBlZW8k=g0Gfw3n?S}E-&ZKpX$-j(MXBaR`=z%FJIyL78#a;*lXi zNwm=onK)j=@gZ0_eBld&m2Q4V%TWG`ocil0d!oXx(HuElQuuTr@#rG=m~V+#>v92E zqP7k~mm{QM@T5j><0pH5yb6XatdTT)qd(SI6!SY%fd3EG`*?0sdn>tSNLHXLj&xST zK;2ojp<;16oc_*UPZKA+voxP`;Hx49$En@8`jYKSk*?DTJ*QZThg3DE{OQyXnssbt zRwJYbz1Ij&Gjq)+mT@C>F74Es++K~8Rl+P=r{5jWFk^A)mzM{m-wi^%_1A&^tWD|c zQtzbe*Ynw`5;}_3o`oEk!@3|e)a>g35ivO!Nr$q^ZmMyGe1EREdzT} zYa>KHttnt#yO%95Nxxs%m5^Rl{d(8Q52sTrx5g2&qF|upHajUSpvMkzMf@M0t4XpO zO?sts`%O3V_6e~Eh3Ig2_MWoTce_5V8~&|~l6UO)w8wdF6nOiHqoc z#SwVZD(58Fe$}e>e+1?zoA}=LEN9d}JnXbC{CP^S`=hhTQ9q)ggW*>x!rd$1&(e$- zMsM}rWw?`(JLtsBBS+6lCi{@dV&Z9hNE;AWYB>OzN*U^Jo&(;ZvhauIZ_cnLi({X< zuk=y%w9z-6efhb2?9;B|&W6(RO;-$AsFOoM7fLU#+jesOfaVnkiErtPmV}X~(+&4g z?d_rYPceP4j(eZSt)|uFUlRSD5|Kpu8_a~G$)F< z#lr^Vu=xE$6puC)3T1cg1`)nGM@^w7t?#u z_mIP$>_=_~Yu92QBU%G~l-Q^JcK^@5per&{c<$VevCCpg8<@Rhmn1FY)SV<4zZ*v< z@x((s`FSjfGPc&I-+;cs@gS#IayP8%sf))mlr#xON4Jq(X$gXFDb^P44BCREBU)$h=!a- z?CLv`GeJc>8$~*@u?@<*;@+u;`Sm_7m}HD|YlO`NXb<`IY{J+-e3vz0you{E6%9-J zRLQ|XYk|3}P(iWR8=9YuOE9o!E8~r6r#~Zdss<}Q4}<>#7XKyFF2yCc`aNy4|2iWX z53{2Nyo#C6?&=7t_ZRQt?U07)*AC(1+bv$;o$Im(y50S6!HHGvPmf|+m-#-L7n+6r za{NNUDj{pZstsGERe8F2&ArL0GGpvHXX91q<7#*s2p6iKt%RBqr(a0vA?uuPdB|UH zp-yvMTLT<0;BjJg9Ht>qo^yy``v?ymql!>gjv=*8?xfnxM7@@B1GqcAg7;HxN)6#1 z8fgMqPOJ4MqsYZ6$zL1>BIa!B9u$iXo7Cn9A74jH5gqTU83^Za5XCCs$vpj9e98jx zJ5RqdJ3eq`j!paR`Erx{!IM5^6G4$f?GQt_vWp@DckIy|C$I;H>z@d|t7b*PvaAhS z7CIkzTLbR+8QgGeYAomH`=Ihu12hFM-7)Yh$hNp<|5>Kf`nL0|%QM4SFoHUS_LBu8 zpRY^DF#^2soYBx7U`f~UjVN5}t0dySlHi0HS(8gq#25iv3TiE_qb7vR?7v`6*fxip z%1@>uN=#wX_Un>tzVR5|yvL8tdLe(1cO|_(^W5V{-;^6R|2XtH%?oy@RCLP#Js(>X z6yhkrE*I)Ct0a>$E&UHgX_NAHO~rAnnrKF&adUU)KSm`esa6Vyiyt${cP@BEF#T|3 z9q}vvEb4Q{B>}ZqLvMtP1pPlTjYq|LEG(2I7;tb!kA(%66x|jUuZ6-AF_yNJST9e7 z3LCAk;OVs(;2<)C!7)A8Dv%vXdfckkZq(pVIur%SL2<=JUO|)jQPfm9cWLH;sv)6n z>~K&LH4#Ng9#!z+@^7)+lTNYZE#9Xra(Ll z9q>@NEB-;$u7{@IZhS#By(k5q@#SUgDA_M^Lcf%MOcn$s`&&w8`c|GJ9x)5nq6A z6L5rs>Yrx99*suaNaHbN{cAe%8LZL7+XjY7BR==$@=Yn@m2Q6{CNG#TlyPMTDCb+3 zLDp+<^F~vWcFcW7N7mFAh^%4`rzCbnaB@}M8=>ZbUpJ-I1a7FPmq(f@#N^0T5vZck z?Y4FHT*Bw3Gs^+pP}YI6f97jNUi=H(qj@69kf0S)#od%R8xh%x(iX57jMIh+=8bx? zM}`tXyx1jS8inNHL=U_?!)SZ)*v*OCK0Y~E#fl)zu1A;FLJ7~IVRZ>RJ8;%cs0MaH z;-vKynMt)F?bndN#b+aCN*DKrkVl`trbTxj}Ow%Db)VN%vqpT}ELr<7U%l zefs!#5ZDS2bm@o)4BSO3mA4wAK?m=R=|Z-V)5WOb+yOIhgqW|qR+4ajw6A)X9Q>v4 z)=Q!U5@0Nr$&#{@S|mrc^0J4jAl$ONe%coPzHa`EwbsAp6U!=_V<|y~S$zl7Qho;` zX8BoI%;Kl0gxyO~^pBWq&V$TwszNlc$(t%+Wy@>j9rN_^*-t5KJ#`f|H<81R!hw8S zni^`V;IOD+SJC0LwLEMkZCXF5CJ&5vaCRaCyP!Fshj(fciCJ9>J_wnmdxaFkjjI>- zw08&(+aGEpmwW_81AHSLRt#6;M5cui`H8+f#(qM)y_6kUXC@V*>@ArT>}qAh{%{5T z<57LISG1WvQ2VHQKJ`J=@l@0p6wHKT6+`NDbSLj%TjZvA2ht5RQP6=x$YNi1+Nu6x zmHB(pB=K+-4!ynNJ`?x(`O46I5G(8Mh=Xgl#|l?!wQBu(tFKJei`6P@bd>4m-x_+X za<$ljxg|*i$^pb@s)y8Swi@+TgPE#>THhgH7L04E7bj}AGFgBMS7lIdxfo3qM_7BI zgfNI{5bpc)AS0=nDk);}eWnl}W~uN{CjF4T4aeE25%(?m`_xN|oF9xvgJB5>L-4>< zQ@xdR>r|Ys!vwItta!mcjIwDSAL$Jo_Uy61(K3Zh#U(E)q)ws5FM}@U%Y|;iGjoh3 zv=fZFO%$Wi4gVh+E5+D$xVp<>V4`4W^yBW?z?z!xTjNCq%G`<_fp1vftLjvilcorc zlVWI=|AC$iU5p!19K(VBKdfzr66VA&5uU$A<`+S2eE3sY((qkn$Z5lL2=DdW-MVirH0lDufjO|t1EGlV z)cfG0JHjbUt8>SOhv!99ekm^2@r59DT0eQ;rXOoA6^HPwjEUoniaY1U;oCc)?S4#b z`uJ~FwEJ?Ol#dZLoB3}UdRC=*lCRg84!P0RgJm%8)R+dl(URdvV1H-Q_b3q={N9K& zJk@oV+>7qIzZ^!|tZx#3CRzY3Jrp(OB5pB`7;zD^8D&C1NC(5>*#N|ux0mQ{8H)!a z4>V)(@j&%1&vv(+t18O8URmC^;)l99Q9TKk(XSls~4>a}l6x4??cH@NQD z>yG4ZuJzWfNh~zqOmWe$>3J0SvbZP~PIJTQg%bVW2`ZYy`X&lu0MH2y}CoMo^ z_*N=UIzv#W18o=Atev2M8O^xPO zZ(xQ~03{zA@gpdv5W#I9qLgkRqY5JdsB#F`Bg5EC*l+uC9Fv8g#*D|G*VuFEUwmVI zBLr#1`L6`g1^*y?BM8FgV$P!=p@ePlxqTM--bIOZyw}4H)bz^q`8$4|n>Gd~FGK>< zTM#gtYk*jq=`O?Cm`Rd3Nq8Js3F1elgT@ei>)MYvu{tb}RLEXIRpa{0>hdjFl33WmBi1TuoRnDV!*B?j$FS@#MNY5}O~?bdu$luF@@bUdVH+BE z$@YpX;Yy7=Q7WsoYj?G zJsz^&F*U2BtbXgfD7YJXbd4o!B;@+#_CW91kAve}U`EFlY5o=SRoxr}lb3uY;OIKX;FB zS?d10&2KK9h6=M{%^3JLjHi%Mx%t1h-fw@Y-w;68%Cl500Zz_wd$@qL99kPjiPR+M zMxnI45viLXt9Q$)WIyISgUNRXfQyZ}?tT}Biyr4d77j5wx0}Cr$84H8yWZ6MIKOTG zMg8zny}e@esJnd*7f*%Qj{R)?ZP`oS=WlWKN0WYM$PJP3j_~#nW-X*e7q$ypjrcub6af0!*Cy;o>V*9jI z70bE;K)@hCH!X7`7?F3QQQKj~(hXA0s#xp?MjWakEb)x~9^`a{wF-n__y2~!=~c*C$V4hiP+hb~R23h%ZdTDgxy2y$U#NgV&=iw>|CoHCFN?# z6?NsRT0Jvg3w@e+KjT5%DHsgxiJz%r_Wn|-LL32Eg>}coXzuUEcor}TwC5#VqgiY` zB$mxjP6ND51yml#VKHNNQA>odk{ve@Yw3Lv_*lX_{ebn{@ov}iszBvDGCmKjG^Nh# zT#&d_7E6^(`k3fe-dWh|JU{!m-lmnu{5_~?#iwLQL*)EgI2t8JMN9Lv!?z| zvy9txw_0g^Rd5pZO_BdD}RDjZCBn#ByP^pn>Qa*moyk_%4MMUDw`T z7OhJsC1c<&eG!t_7L-yv!-Pb#^b^s)>APp1r|@e8cI{@6$(1t~kM4}eo#IX2py33< zWJ>cHB3&Gyids>UT1tJZw{+W(6fE(eDYhJJA*WaC24>Iy$Uii|e6BAc!MVn#RiFQp zp2rcp29Q!K;Ys$0!Jp%wY;czL;IS0+m}hplVdR34Ek{3Mw5uIv@GyAgmFPJx>dJ)n zQSvmZFhThd{zCDJ#QTHq<*Dejj`!LbkIf=iL>9r%!}MO@cB-v=m*Cm;y^=Uf{2=o9 zXinS_u<*whax>B}oo?&h0g)YChEv|<^}wsPdU)3iX%d5yQ?o~M3I_; z>_(BMO*<_|^XK~#?!AGAhrsJ{iil?6)!q$P+hy=1n)ZZXAUxDz>7-(aI5%i4zt><& zF)NM6(}P(j=cXoDs8CUkBZoFC`o`@e=;DUb)w$lYQ}(eH@FJyo)6(lzE!gbr94u0D zc(JDqtS(011w|hm+J|w%bhNxF?Bw*4gZhqf@cwvooMiv~1i*pwb$(fTWb8hBBXW2Wu zrF>-R+y~9J&de6L9{c*8@4#&yFzQNHh4@sdn%Hsv8e{&vnR8JXc3n%}e;&8W{~V9< z6aMzC;gh;}Sbw3Hq+-oS^}c=k7cw;{c)o&U0KmHtj|(Em2}K7}* z483`@$X*ow?*6=c%A3vW_PM`mt(8N?;pAlw+hl;mXb2)ZKi43#7e%}-p=5#a1IYJM zO=QjpvCBUJb}*IS(0A4he%A%a?r4}g_`j>G^-Ed0zSrvb52))2ns>wTsU)eZNv7s~ zr+ABe!Zp1pFkc`IOu-o`3T1gRkEU$})fy zOFOHO9K-?bFHnd;pXUBDfmy4#91{=$E`0~1C8!@jM5N9zQJ~YYO3=We#CF771w!n4 zE{NYNqWqWSC11hU^Us8;H<#c4{p53bah2ZB=V^KoU1J0gg2cTXMq%%ipYRaJ1Cauq{EW;|}UrwcM6&buO5 zRnCwab>MD?dJ>}jGYqA%>QMB>jsCc?>o)5KsBC1`GB|y}%$pcrhGJ@KXzM_Te3qXH zRygzhdFMH7{?lNmF294O9})Glr}+jl2pW%A_k>%tgG^7`1mcCHGB)P9@PLrfBt1@@ zU`Oavl<73)Ua$C0pJY%cbM9;ZVPxRsH(hUdM1j;y%e(03w%X=j5?~L@&*~<9tB8;| z;=k>EWRfB5BrsMSei*cbxVtvcPyBm1FkZ9uevxlCxQO3{fMC+jh)9 z+=cO-%VN!+LubeSY3N^B|FTeWI>H)Rp}qPqD^pRxdF36)3XO{?$mtV9xsNER6UBXV ze1dpr0dznpC#xc#M4p%5Jxh`bJ!q(?T(E{(K<3N!K&iEHgV;fROQBFQ6@x3&hBp!V z+4pg?t5EwwgBQag4vHmWP;oSf1H{t!Gd#wnpq*h9U@zK0rz@Z~+hTwS;SnKXXl-7< z;4?a%EjBM71{>};NC;wd>x>wvvb;f8{9}emuHtg|oet;qD=5HY2BkzG5Shdr#%x~R z_v`dOyR+k!Y)mkeq-YR#5Ko_Tx1xC#XwLF8Pg8Tz*j{V2DqAQ1XrO-@)=la+$FQBl z0dSW?-mGO2(zrozi?i-N#2XpM&d>Hd+?|OOvk{HCMD2WwRY$y`KjH1*k!~3Pmn6?L z;KdB5?5rrmk6}VZ>K!~4;Rst0zxC^CsC7B<#+;c3JjOvcrmfHG78`TYSpY@uqCd%O zhA9W{u!Bv3MsBqshhH3nLceUIV@ZttGaD~~N;?cfDg6NkJtAA~w9;hX0Kg->lsj&; zK=3w2s2t?9wJb0w5gx?_MOfi2BtjF<{c$;XFZjMhjMM8K{e|+yHrvn%EOUf#wo-lV zdPxd|PLSNSc6(*CsrhrKip#}AY`jd zomI0v54CMj3^=*kHsikT$|>@?8i;3IiKz2V^L(17Lq2HbHm`g$Kg%Yh%Tjv$dQ8p01;>7`jxJRTXESBF1ynDF@0JTpQi6%7RZQ80!sO zX_(j2a^JQokye}<3#;11q$x3BUJ5-aZs30kH0)b%g!k$-huyKw5Bo+# zQ<~9Y#EwQ{9Lde(#LU6DSkZ9A7?znCg(mst+ZE(0$Q+ytE9q62);i;OzYA!HP(h76 zZP;z%5Y2&@zREMb`Z@hSkIf==G2>LO7%;8I)!gsO97+=?5#9$=+vEkFVzcCt3kpm6 z4bW7vZu%^jn88LH89Y-4-eMBK5%{9d)PCEIotzvgy526___W`P+3tAu0{!KaI@`O? zd_T9o%9-Rn5=sf;jIuFRgta)z--huH%U>J0+8RafqiV}l$mn2>E@?;Cv38458_I~u z8h~jF_Nm`&N9!K~XH(0nRyTC;bbISCYBr6)+tF+8l>=!Tyc0jlG;SZj*XVB1 zHhsa!zEjp0Ek!j;u`_}8-Rd|-rc;l(m-Fc@Z;$QUa7@SDqlXXelEkxswAMFc7L;BC ziATuXvaIwC_4m9km8j+7qxQeDXk~9G0!l> zK{g~|sUcQ{Sd*3V^cz90^`M??_L2uYAh&TTkVugN$KFmgZlg55gTQtv#y91XV{D9p zT7I3+$NNtm%g1xCb>>tDK-Z>!JcvrWS%GGp9(Q>XeEG3Ss0z2)Hagh7`hGf^y{8YP zcj*KoTFJyjCw|-RekF{+>cOFDzBM0_{s;{UacV%#a5$7%#;XK~uKw1X-dkhu2PEW? z)+hh#*swE7M$BgzvnrN(#crz)#ZRXJ=cv|SC)kV3I7-ASYeq0&FH~W~eDVLh90^Oo zo;fz?ed{N=PWm66-T@x;RiKDC8Et!dPV&~qgjG|y?&mraAj3UXNj332%Nblm*1HV6 z4@L1Spj|6emJ4Z>m;a7(^!w$W&g%1U`$JULgkPJf7R!}(ZsXv^q69kz8?t*RDAK%E zT=Sp&+z3IpiznXgnX>i_bcp1rtHSMYiU(`o;K~T*MT&o_tWoB7=q;xQ|1;|AHx}J!L2Ml5JeF@$_QZNAQY9Tazr~NwjSCDb? zyPhggT$R5d=UWn_Pu*Re+6+}lO2}%z?{(N*{0SHDEy;W1|B|0v>Hf<1o zTqlPpIh7Y+cH|~*Qak;k7*9qbS=f+;mqM1&Lc9aQ^}+3<(x_wkF0c9dF2QQ0mrilg z#iOWj(3T9urW-1B#mt}gBZoaA`_Lv2+dcYS(;uqO8BVpA4QE;_;<$DzdRPvO4Mt=2 z#0+(lZ>I6Qm@po%yH{}NbzpNeq8attBtUT(!8R7baMo^-mdb(lA=r#W+FdF=DXQrKK?>E1c-1R&!BZB!8}mOEdG! z&Fa?`#mrz!r(3LB4t7d&=JFUOUNr>4^9<*P9WGCb!4_MnI|I!})+v19Ce15sK@29)ODXP{-~v8YRY@IMjPnyR zESWW$>L!#<%B#mN5GGbp+1dQQ-=pMgtfiql9cYeK30o8~&6YLVt+A{^D(pz7vg_r( z5k|`Gn0J>|9V3dhR&Y&;=(ZNNvMF-A8d|~^)3MYan>l9-C5G#415ZA_TX059jb*&%EFB+vQ+n)c(2PbyeXmFd>>i^|0YYv zr!ns-TwJ7|etEN3$;9v;xoJT_R=Ac@neH}(Tx`@!=7BGq&|@p~QtzDZM1vOoCP33< zeWWeh_SU_e;$NfS$cORt&E}K1{>k(2xxt|-%sDgTzL`JBTL6O!D*9M~+k4|MmP+da za{>yQ+LevdPlGVx&B}_pKv-3(grnJ0N#MB!mMI)c1F5b!kXB42SyQM*6_;(P1c>?; z+Nu-#9ZR#o0Ie_38MQ56K_9eI+!4y8%nqtJE_6DH*9|{l)aHHOjVp_Px|AUEub(wP z&j_BmZLsRFUL3^<^zIiI*_ez;3@y7gg=iIps6s)sr+)1am1w^2)HkD&*Ar- zF$LK=mNmR~ItOR#1Kvh0tt!)SPa~I$kxrDM88j*UyKZT4<^GB(Kz*eP|KO=vkm9w2 z2Oy)nggTUfFMX^aWQiwUP+45eb?~yq&5U8Tc8U&19r}5U{uT zzT?=$Ws}BcbVSHg9?A~>beQ_E?~&{|T^XaN*PEcYdz<9X{jm@=Q&x14Xe-?2rYoK8 z3uN70inliic!b7KuU3?WFzU0EjVYR7U%*Fw`huhIFUbxwjVsl0Bxmo)5+FMW=+GRk zwtb8b;;@Q-DS)<9;WnmZsy2`z+f3kL%j%E2lWrtr@cjd;y9VEIsq^NcM_|pv6f*)r ztGP2}p?-I0G$Qz>G3UJK!n`YV@f4rYRGX1_H}8VyU;_+m8W3EK8mS^PJFVvK*25~v z5u=>TSaf$YGpnvg+&=D8-FK~a=@8aAn`yUf_E&5W#^Ok}cWt^Dpss*|4NEW6s;?Zq zduCL{L1r&JX)3d0hE%J3lX(r!q~19tiuV{cAe*z{5*b?4_8N*>LqomsNo@_@W=dRH zCP8q0RIUyhs<%+irl$-JJH$YZ1Rjkf0vseU9|%$^B&!R{A#vQF09iD(16`lb5UudwA zh_Mv(%Xq?++aJRM=34Tm(BPvJrocwdH4UbYoD#OcMzqKoPDHz*SguIz3}{|L)B7+p zAV!=pjncbbK#XhXr1P!qPr*lwzR1{%uH>{5!6H+^Y>WF66z!0em<=j9v ze8+OZP1hU?{rT?-vLLI&@sPsthIN?1{*X^>J)$*kXu}odACQqSNr;lkP%n&8pmz{X zP=trtNt8$voiEh$YN2~*ishWaX{dI1K42uBOgjx|7=Z!%d`mo-@fGVGHWEo?-30gD zeyE~xt{xhqG8UEMRel;WRLW6CU-p(x(@8W!*-2;q4Ms90CG>xhpVjYrSEUMdo5VII za=%V>+(d-Hba(%8^k!oQkrbZqCMvJZif3(sC5)1zH?l?Tj3z@Ygbjs;Dwr$)SvXfP zRjn??!!T`y1h@BV+|_aaK)`NO0Zq#S;|;Q=6|z>xp(BHHdp|KC();=L9ujtHhX<%@zNZ}*b z#}m;Q8qyXn5(*`t1KZF08^n7@p1UmTXsfno;XHvEltJmhPJAJQWZU2}eXcLzijYG- zf6Nj9C+5)BDhh~b+!>2`k4<9u8Q_LQZU6D`u5WkL)h!;?Z2+Sw49UO&U8Kc*37bPT zMYGzXD`=8p9Z2?UWAzFKhho+kXj{f_i_cGwXP`hm_985JblYY_=QSXJG*}1qn}T>u zhcjq`Ulf}GN|al>Uk*{gCZrV>Y7WMFxo(SX>SxJsTaw!2^>|I)BP3wLE?^7|Uq%P+ z2fsD@xoUd-czarm^7p;F{1lHj!w&jza!&#de0T8nt)B3eNsFJ3IVqekAIcF5RpydijZD7VA2&+fmc73w(C z3_b+bk6_h6$8_wrA5!|Ib>?V*655`RxgEUErkX=b)>aDcBa?bhuBD2p`Y4*z@rLrL zp1@DIY8~tk(}rEY#4}x>FA>;J1mwhsA8OMmYFj=n40|#-lL3PKBET0sN?cg83``S1 z-LCaps_AN!Q}UH|t!S3Hh>7dI%z~P#HinV_`u2I<)H_p}K zEl!gtk!_{9UTr<@Cbm08E9;4ZUBP4kt*r$ah_J>UX9h<~L5vXf<&6(Sx$eNI3#G$a zBKLcuHpp@aVOD{yu+tPU>Rbe4ENL@hp8YS)*xA-075o+VrI?$Ff#$2opxwf^Ia_PH zH3AwFX<>F73`RcQvaUk`%T2VflEJ|R+tzae7cl;Vamg^zfUjl}v#CelU(+byvQ$IhGPfZRxvOyS>Pp9w*f<#zH>c3F^f`*c5Nx2>Qs=jpUUJ3oniYG_c(hMDN0)0IFf9t z2_&?zu%!m`(VVFppcdjDGV`bEeW9D{gmhAk%H^2nx17HMT|`t3NqF0tRAhLR9K~1E zK_Lp4zlM$r*OL2QY7u-A7qAr~!p!Jztio%O+kK`j33aS}tPmUk&AlP4U2!FF0tp2B z!g44~p#yQwRJ%4XJ933savnF~uH-r@gK?0%)wxQrT#Kp8V!hR?57w_kxe#-_p%Zj6 zu>N)nnXaJ1VyNfw#s~9%cS0D9Jh?B|!+i!UOMH_dZO^N!YyvN%)zULf`;yGD5Nzj} zj!)LN?@V3i9)Fv$v*CO~Ft|or$GaU6cpAqRc5>yb`q{eQiD8PD&6N? zgG@1%dY&VKVW0=Dyi=>=XXB?2aPQ#;J@6KKkD}$z8&6{1Ii(2!?;8ONcuH8{|y8#YlSg|mCC5XQh97axnd4z z7b42xq0~~jJklZYweB@)p^i>;+~Y&U9pCUx3O<*l=&(l~(KNGK#GM`m0LG|mmBC(- zamSpLY~&-_hm3LOF#Vt#+IVQl1L4nsJL+K(^~eYA6X6SIv0*2}bNfZ)HH^yJP1OD2 zP}?aM0Os-iqM%h-CHkeJ8O1e2sT~uV+k~*&|^U0k6W^-rzNtaMQh1 zn?|VSrBGMI8~U*Ubz>2?-!pQj{BDNDFB(Ich7I@9u%h3#htoRmpy(YJufrIH#7!I? zfrN6ZuuIPq0j*_!^^8ro2v9xLl=}>ot?49gRo)&r!xwLBfop)0xADJXiBo=}xXaH|^^NRbBH^Q*> zIkpGy7wt>;II7d4<{3u<=E4uYNan3DwEmfh|A&VP(v3Q53O2@JbeY&FY02rfuWo-|HBtVxDzd2;j z8^jp`n|RlA)o;P`WIuQ>2x6NMYbYma**TLYmzuSDpkW5vbI~sXUdE0eb-H-C;ZE#% z)M>DSzX^OXmBwB;LbB@Gmbg->MCkHZ-< zoch26Xf2Smnr#636CWm z!r^roK`cV*$hpHoireNK2^nG$H^@y|lk+piI`Ks8u$(GHv?7$+Mb`O1mxfaCbp=9O z@MDYkW+wsaGp8xHR8K;fxN03j*e^!BBO^8Ks^xot6Dsizf;S<+^%2PqrjM)*;leY) z=ZHm97d?A;T;O4?J;6YZU|OCO7ApoT(g+C%=gux?`I6vw11>4PIZdw4kHW+g?qmd; zTCy=K^ZFVJWog412NRymRD12o-JdD}i`BC!9O}3eUr?V$$iAV;X`WF4 z74MY(M28xC1=9}Q6CSjz2=R-CkW1OKOx&e(BBv!%IF^$JV!cU%*J9yd!aM%&z_^!v z)X6;;JueMv`4wz6z{}ZTRppG;6<{K(bKzVTSo1gkmcU>3mf$Upc|6StUw;Cd$JHXX zv)H@>kUk)7R@lpRT61`k$?LF{>C|@2x4mjQyF(hcH9Mp)(#W)(E!#cBWSmi0Hi#X` zs7EvJ5?e5om=I<~m}T5zR8RGCB>NZGTWg=GY=Fu*44U7%Il@_PV{QFObE?fVjw_7# zd1}4vnxTE~;Df&xW`CGtXI4QuJ)7NEItao%*~~D+YDPJL6KQ!mGK1|^PXMFvjE5|n z#nO@$G21fS@Xdq#F<_3{!Q~ZpF!{DeL^vvU5uLy6>OMO~ft6I?yd{X!P1^YrPmK0t z7TzMQ5V!-?H0e*vFLQ)DI?!a zR;Ofq^OuK;%=6;cB}W+&tl=ZfCr1ftJlJ11j2f|*>2o-`r)J;w-fNZde>VEfVF>S^xw2jg2 zT-l*p{*313e*4Vu|MFYh220J94Ojompc>SmP%@x&3D)2O027)S?Ywg!WRsThh4iHa zulY*NDpM(U?zOG4uT8qDwn^;9Ndo=(I$yJ0zkYUjB23uDXIH=63%p1_)hn0B=a>3^ zU95~Um;d&;J4kyt#R$}@HK;&7m#Y)wHH>L;VNpv3WCct{V})DlsWRBizZ!wa60}Jx zUE~(3g=_xYeIEa7>$uw4b?%$Z%5QkwADhIC;;nkJ+b1UZBVRX8vyH&`Z~IwZ#D1A) z%bg$Ov~p7=@tHR8^3r6AQ4cKv1v&1y+M9s{F^WY`sMTPX#vh6Z%AY{ zY`FfmqcpW)-~h^ub5H%b%@&0~6Z)5`ZCqGRDs^qyUY-BK0Cg`FP5o@vxD9QQn3LIl znKA93o5wGD_Yv3Z^e*QIm7FST&xzqeC-bN2TC#c}YOKtSfvOmq7<&iHhhY1N6*UC9KR zOVV@met}Tm<-G&u7o}_W&SF1dvo|+|WLO{BI%#&!I>nd8cFs|san1D>v7GYNlf8DP zCW)x#M*z;|+A9%KMZIW8yx=_S9sg}sPE$Ke|NR)8G}!?6^KTVT4d~$t?Rh8nYn7H8 z7knWPt)wumRwTx-_g4ZHB)7_t`H$B^jmb) z*9Xkgu>F!7Nt|H2$JfDAQXakDH{f8IUfz!baw9=$vdfIQyb2>b-;vy>5 zJ}4O&KAlzhEK+C^e@WGi`r&pvoY~qH!Z7oc3e)X^gH@B=+z{A>3zXo21qeK@Cm;Ci zx=V-FiRI6{a@d~kUJUwP^zUG;hfqn8VcUDXKB}Hw9o@TXWX?gKKeOuZQM+7Y`k`^K zFu(lPV6(Ozg_9Xh5>D1?1_GA5>@l7( z^@}Sd$-f}Kk@NxkG?dHqfnZ^akb(bZz$Ne`d;FaC z;rK^chyA{Cqxv)Y!x>2r%R32*N?Vd@b;oT zSN020eLui?l?HWtgNk==B|1gq&p;mjoLtu-7a9~0Hs1iXryZ8zytt3p3n7H&M2hE+ z25<7I)EAq^-vWsoFnQ9dZ#V82%WCndKY0So49S1+@TY!7wT>GG$-;$$KdbASHpr>HpV9wW7CLNT4r%kKQCQxG&E9{YgQ^j#N3FR=nSFEBOY2joH$KK5_!XAHlAQphFQ{@ z>HQ$f*CLj2=L~sw$85p;!E}b@H<@DmjIZyz6&@jq{LO@ZK7fjMxvCMs#CH&vhtDco z-e@vUgbNcyE@b|_jXjcH@i|Zr)lKzK&tm%4Zj6L%A6#Gb5FrS4L^-Y$E(*tJL8SIo zrSp{Z8%YrPI8Z5!(9h{^>!e;Qcn<5rrNerF+PcxGmHmMDL2qvz8hjRux}qd2ii5%* zZ9$gjss8YE%jvJf=EH?#vZ&LxQe^nQsc=ha6+KS!7Q^>UyFwd367&;SfkF}CR{aW7 zzyx!jId9T0Rx*@51@;7&&U#J0D>$zWoW~}V$EKuLOY-|B>C>H*@)(@LF(WR8LHRE3 zPm$k_^OUz!*)JE{dpR~j3i`7W6eky0o2U;@(Y6t9UL!022ZTU-zpy-Y&$fR{w&rm6 z?%~d7g};JdmA{_foO__w2Ei73RC&_@R*fPSSHec17{%IJn4-AjJJue2}y-XHD>Ls2=4 zg$K$wK9tve%Y>UlD`)RnpGaTT{=ww;zF^0!+PcQc;l0W&3p*zng-3wWnrlT!DuFmQLKF2$IjlDu+%?0CHDvMt^ zmF0^;@#_I;E-1fgIXQ<;gC5%lQ(F=6%+)4BKw%$y#6B3QwhwwoVbAi824vC($imRkg1y+cq< z7JR^WIai4_+xz84#&r%VUC_ud!5o&Vw8S@_61DL;m!i(b=cyE@{^NlK=#s~3LXQBk zRCL(RVL(%Y#z8Y(*#($RpjFSeQkBwxKj&XxU%dR&AAfq~<*4zQ2obMBYX?s0<7IO1 z{XNk)KvJD=#+GU)mFyufdQr_J;0>3b^E3W_zd3fj@MJSCQbcE)ov?fS&H~b{{k5FJ zqetS+r=n)%3qhUxk4@#uAAh>|)61u?&+UmHa4+=;jnMf)6=V8YQ>l@qCYnAejk2Ni z(Udgj)0R@1z426bdC#9WZ7Agq((}oNSyPTIYt1OANDeg&%+hRn$@6_~p{!vXaa{=t zk1G#j+%2se#}y@GVv?qEe$pV`w3`zhF&AngmsTVHxg{^NEA;&NFEWMV=?in-`HSR5 zz|VV2oCx~;yoLevPIqZM0U~jNl#+YjtFyD+0k^J*LN0h=IC0WNq0R?rH&$1z7V1W> zyOT0)M+H%#599#f|<;P1iIk$p44_v}-- zyTG`+(A?b)cjj)`d6|E$y;_1h@6EIhhp8u-Ba)jR8Dl_iEY2G!kXDvL&PX6J*O`3( z0bKisW4Avh-7%a6Gry3xyQ9{qJ6EVFiq zojVEtdKBh$V8a_zRCljqneZ8h_V32WEhng>BA|^OjU$d~x)XKABC|ELD)WC-a z$>)~FW^|J^TT{uoLJ_9V2Dpr7UJzDm_hX81J1ow!4s3LKV z<7zKlw;CtNirca+=OTsy|-tqMQsN@2D2SR`&j&pb*SyY$KbXD zAGE@D;1AKZLzV>(*%;#9CVa?*kY?(>k$zwIs?qkG;9Zl@z;_|_?|jMLd)8f<1d$Y2 zyvLcdhjZv5Sj`|aBGWWe<5!bBZIS80>GP+DpFpTRC*Jgmd_FyS6?1F)iisOkc6i;% zhODk$0yiq>WZ@dQV%s;zOJ9<7SGz6KH?^uM6b3dsC_DYlPPtY5Rf@<3x1p6P057}j z4tx)}!p={}X54tOJVP2~djCyiEML5O{p9C!AP>cNkD?|fAEP;%^E79BdorpFgo}b* zn}SE$kMW5>uae4zPtAQ*OVLScsJqeUAHmv^fH4An^(grtPN9E&{p{x-UOfBd<@u{u z=RX3e2Aq?i4NB#8Q}IZp(iMa??)HJc4}@T3Ibnj2po^3o@w;;@7bxjSZq%@x<=hIn zgkK`2@V)NWSp%-xcK+wrKc4?_=9iOq!{%DFXg*9%h;?LBF2aO{%fGWZnl(77otwka zb?T`L=L>$}?BT-60P#6~;begL9KCQdgRr)6;bbXAFPtn(@e3z2btV~|;TiJJV3Zcq zS*Xk;%j$q9JR7F2a4Ey3Ygq_5Ex~vE|LtumUAH~THmGVll<6`zd-x-^&NF&;wR_KP zsCOI6_e-=vm2L{N%V&U5;de%bsE_J{D$?g=IMYF0l&BT_Ps#(WCizf~N#L)l_5gMd zk`mm~WSP$I?PMQ&Z@vs02F{^u0fv|_Y9xt{z65qROC;F{7wZE zJCG0jwHTBpA7ZqoNcnY^6)8mH%!q1w6bjU7&&No{D;SdkO}ISv{}0HstXT96sWBz4 zxn|{3pq`UF~;`_u5_Wuilzs9ZktVXT*tj4YRtii4MtXW~rXAM~+_zhfI8Oqe=y^dH%#JtK=7yDXS#D*iGBo6}tw5ZLzG94>M*- z(D9qKffJc$VHv!_^P9;gIt!lPtWEzup5GafO zmUVK&(tPNgECczg%rfAwcnm`UO1YV_WY)l_WsdAa99i6fBY%1F@`=Ndo#DvA3$SIt zk^SF;BkhL4PJMnx>@h~{H6s@E;~CM3sX@Y#7goCzDLaA%x9q*n9FSp(jjN%m+y_$| zDR^;GODr~C*Ajc8qXYp?S0_62vDVOzBs(ONIGZkQbCRB8kvHdT09Jd{3eD&e#4cA9 z0@qGng%N+($X{7?u_S+oyQOBWRw(<-@OT|mtU%9bKpOVAySQ+M9JjeM3n5?d&%Game}9_`qz7Q;%G?{AA^R?@&XT=DknnEsYADmnN9g1O;v#QYr@W7`~1oBJ(k*k)M~ik)Kz%k)Ky9jQrfB z5M)g@3)$x|2q4kJbP1Uj%&RRFeB_)EK+0dB6hP%ik4J6!FjjV#=p>V!Hu&gn`;P6! z9jC0m?KDq0nh7K_zi&RMbOY%fb@Ph_4Ny^J95W6Cm1aN~QEHzkb$y~fS#(~4UnBqy z&%9B0VLrOoul!Xduit!l?2|^vOjQueGb~JGOGf^LL*?1iAD%w{=|uuX1yj1c?+(+l zKshObMwN0>s&0(~aT{-v8fZh70(hFs+;k@y7`SHL_MoOJg1;u-D!l!j$Rg;H?d{c- zTPxo)+T9*xoOal4?;Rb5RUkj8;H+z%$p+-Q>SdRmkQ896^^-krb~8D zADG9%{>TJ1vn5AaDk2>!Ai|h8efgefN+ftn5H{Ic2O(V@Vf6Pi|Km@x&M_F^53T zbXxyN+^VWjkt%!xMJyCFy4_BwB#|%TR5Ffv^sHX+NMqMm&BND=Gi<1NvalFgW*B)Cjc&@ozOjnp0YVe*vOMp zo$&Ww1Ox=WoSQu;CJAi>#EPasmwe6^L~@dK;*{9)VT-*_lH~oR&@)cNJK#H}jYH~m z^va5=oU$2LX3A+Z3KNT0#lTXv*~&!<&?-@JxlzHmGaYC@ux?K;#V0qjkg#kW3i z5k&#r`4}{tr6_doI0whnpn+vYJv&YUzSPSEHwaG7qI(7F##9>!p+7_6xZc-;%=3IB zwLF26W5x>lIEH}cPs7G?N+p`SQIt!O9Q|m`NBlp^3uvE@ldJ^)Pb4{{a579*a~c#y z#9yo&8vJYqo#sUm;>z5#)!|e?NsNiFaKPr~eRy5Y`i{iO``?Y;NRI^Jb1mDub?wa+x z;X|VOx@f3SIkX#(7V6OeDL6c1l9XHvcyoN;J6FVKSmvzm~q>mIQ9`3m)i1yDG zAw21<44%>~d`uUzljrHe{#B)^=~BJ_AaFmqh-CY1*cMNmYNcy-yxa|TRcO0FKE}9> zT?Q>Zc}k3vHb|VJ4_#ATwB&=T!^U^iSdD0#v<{^92ruS8t>$-i9u^z(}sFD1&U^dsJGZ=rU_c|^~S@0rfv z*6X#RQa#@NyPk4H9L*pmw6puiC$FCf5DG)Peg$*(hB@N}FGWvQU@8RjT zFx5wS5DKJJfti^=^t;vS<#Q6L0;v0wiYNmpJ>4UhGIWIqqsD>nHfb(umoRk29WVgY zM66h`7|I0EgyX4SqH^&b; z`NW=Twt_PadP%tE^|P`A)2WDgs4?#fT1@UD4HCL%^s3t^%sE#qxETw{G|5OL&*{_u zpSPTfB6XE*C78BJ@q~xKBlwpt0AqBDfIlGz+!t&G^Nu+4s`9E>e6JV{NJislHidBh z;X7t#y?Yy)x{OyH-jpI0~Nq(I_Z5 zA7l5-#+~PPl%5aVQI8@J3T3rogDVs3CazxM9js~vyHym_8#{HwC(~%qlV4xIxOnxK z=RX*ea|H;~lH#xG8||if&Zx3B{@L8s`PWF=$#cpe9xDHU1e|6|Mn&-H^S*5H?bcICc%ex&FY!9pXDhWkb*+R}^#4TL5<#)@?u8faS-YYgYrW*#0 z^U&)qeA+vvPleY%N@YL`$0;8S1P`9QH zARktOF*(ihgCXR*y zpg(4~|12LtzeD=ZPO}n9wis_OS$Ws21TVh^GncG}hBB8*-^Za|#TE65Fq zF?t250Wn6eATuDw=oOebs~Nq5Zk$1$s7y1?wTy04i4@6Bze`?A6pPy}l`5Tx?@Nq} zUKOXyi-Zk2$xXjhRrTe3=WTx>(IT`mhD9Z;8-8uFoY;J0Zg_|yO_Dc2_M+5nDtf~+&em)`w z#?L>JcjFtzDfylFD>POVe=@mthcnfLaC3bIc_^GC6Xyt3DBeCFgW>IGRgK~8^C1}C zJ|AKP^5C8#&myX7gSSt;lsh+oQc2}J^ITK4hsiIfk|Z<{fu!>nKLKYnfP`d|P#vA8 zay0H>c7dR~D4G!p`@udH_u*BJ8Xl>E)e-6B{(Zim$>SsyK-MP`^^fm46(c363SWMqWUpEQvRADE*{cl5p3v^6AbW5I48~qc zLsnzO+`Ti+0Y8Q{037uO(3@UL5rFo*juFbSNZ-11RTjODs*L02j26B=ZTjl<(rw z@ih5^DxLVwk(6VKQg&iqIneDcBVky-fs>pNwry#7`s9=?hIQMb&fU{<72SqVp&}v&Bgc#q`4R$VZ>Xo z1VQOB)CCu<6*QS^h^QoD$aA-ONV@RERgxuHP6S!LJ{454H3$D-oTbjSB1f2`4XY~A zYW}(`S4!l%TvWK!5Y#_dS1B$tYTGp}C^J+-E~k$W$Wx>#E$K4YhRQS~PD@9TwC@TY zWR+>AU!kw|-}(PsVQP1}UU9tZ<>OtW$Gb+4cY_}9CVspdalDn!{X*nSI6li2Ua;^N zPl7p`?g4KI>NcpMms<4nk`z0=q+C9|lVX8?FfQnwguV}Wbrs^Cmx!;vJkP4O(_EFI zUprp**gs?uBw!akIyDC(nt6P&M8OzbFTU>FFmWEUc=E={stk8@S zvG8(D-KBU1Bz1=`1>n3g?|QJY(2rrU4wt|^7NM#85@o<1jd#_(R;$Mmbt)b_r(!M4k%-_N>_T*z)erm>y^&3@j=STB8{J9M zDY}&Kw!7`&sQ!4|$*+yOD-q=VA-UT0`%cz{^V8VvhX-2NautKiTlK0F=lfr)hna## z5Uw(8AcSi@6|Q9pW6ZtNI@(j=mT=aCk-x-|zlEn@F(ZJ&7EIp z&ZvAud!g<)x302_qWaah>c)C<#Wm3`dA^}sh`l;?^ez8+CyH?PM~#ZE@}T~{d#628 z<{^)gYgH4k!3LcT{3biKOQb+FM}aFmOJrP)Ggyxp;zm6#f=|>Mh$*M7*FcYo@ba~X zB-fd?Z*Zy%M5>`bGqf@YSvec>ZbXpP8WGgl=qjzrE zm^FZ`9n6Q+V{pLUCO21fu+*$6t>oudRx{PFLh+O)r;Gbpq^sj8Ve8RkC#YspLRLxr zb*n)nW;H9?mQmnRCzgesj1bw`Vh%zf>xT5#RR>(oPQyk9xa{*~|7!nSuK@jS3f-xb zcD|tLI2}BQIX!{-8%$n>LZWHb!Nw>iOdWk+EP%#E=xy@t5+0;K9F#?co zlMJ4wT*37g!78F4Hely>-uZG1_@$sxmApE4%b*K8EoN`_jH_MjaNx|tN#+WfcVnO~ zyHV+WZd6KL`A!L*uQeYWz1hIrFX+!rWs;MMiHYW6-ZhnV$p(sR)ez%XaBHR;;;~sb z?T=vWqlsnI)F`4)vjTv;(Y@1yWzG$u?$mk`bX{w~7N|*XaDc3)u^!uS{p6=@UW1|q zHVw+#PE)Sf*5Y}3jmp!D6)88h#|Fe|O_06kdZU`w8{Wq=I2#g3>+;HyWzC6#z89DG zCBIL&?XRTP?A|_2x-0(p;e$TQY%ni2rORhYe|uCp#{2-&?!a7qz_7A+>$f=dTI2r< z!t^!0cki<4z3cbe=1*JQZ##Hnx63znxBkYC-iY0b8?pQN8?i%fM3eGY7TArL1gf$B z*XwDUeub#((R$jZH$k&tp-RI%E{k<2T&Sc4JK<9+Y57ONV%mnLI3XxnOxpk&ck5l} z6V&fSTj08)RwSZWK?42wQgUv?&+q3pIX(crvx&rsvt zscydP@3Wc!b#|sj0bY5(f?QB&gKR4rt`BFp3NE3km%FSBZpT@P;l17(wx*qUW6R`X z?Zlh0T(Z4L=1Zp{Tw53v=;LBaTQlA%r7b4YNt&WOOww|tOb>~5B0HeR#X2z|>YT0+ z>q(#;C)7@c3&IVWrKt;ds==Lk+iG#y@ldg_#KX8-jkene76_Q(0+2vmU7Tx4wx(d4 zWO%_g$xY5suwa{%zCdUo>42>8N08hcz-U)nlAB8{*wr@t{?MfcMSY=qu{&1tkz&O* z6{fN!TFplQ$Z6>@Cb278%||o{bflV($WCCho@LCfkh-coBCcR7725(Z(Lslw9t_KPnHV(oo zR6c?^w!1id*b2=t^HW$95#EcavH-2WrNR?5-d>5EA>nh@1%QsP(#x+QjREP4<=3ch zc?L3R0<{{Rfvgr8+ZKQ6qPK!FW}tt82j3-&8R5-%>M=3+M_dUAosQN&9W-?;SHD7W zbiICL1ppBtrg}FHEJkcTaisc?Kw^ShiAq}k)}g_&L#F|RH+jekh(mXgc2yGyapX3? zCAT*=M?pIzHD605dkY>*db{U?j#s+eQ09o(vc5>li+3{H6(>_U5M(ZlTi3LhkmD@K z>-lVv#WxbxTJY{p^07FA+!TGg-Mv4E*o`>U68_6Qv&9MYCg62sO$diaAn2~s% z1d(|XquALf8m)-)3ou$S$P~_SUFs|WxDKILI=^m2qf=W@<7bbO75NVY&wn6z{sY1D z9|+_>^ltuxFA7u@WaGwFs;Q_`DFL3drk=Q1i0a}ry15pOmumq8?4|bfPzCv*h*^Pi z-P~%Y?$s6Bb3@Ou1mr`WKEL?orG$=udGgCo7eBo^OZb1zpTBPd|p!qE*RWjBn_f3NC?mui4&a8M$(wQtj{)bMHM_eHHl$Pgcf%;yQf!<3UmrS)s zprdbR=Ez{v`dp8H3;FaD1=}MW)=#?4KsO3Ggxb7x=v0O6hS1H>W{Zs1X5{YfpvcMi z^V8R-51nDtJmNN^%Pqs&+<5BUyw9#AE{inff|K!o4+c{+!_;}-f}dl78NkmGWd`Uz z74>Sjh31zmh*8!yF26+V%#ZffPZtk6T&!4qfvS6|vFTMYg=v59pLr>3cmX;@%T zc`Hw%8E!;C4G{OWyrtFM>{j`=B^sb@A^E@!z-PI)Gzzzy8PZH?Sfy}FnlaN`vaL$E zZJqow@3w6#yr`{JE{#YeqOGx*_kw7umqkCa3?jk53_Zwxs$vbV@a;OvRdbs2Ugb`ihJc=4@5x}IEDpWmdIK)489%4kGo9UF= z&u0M^IQ5>Bx@}gR`361n4aI!FEm^)HTUX-IJKT_DnGMPR;tff#8`3x+^5HYwkZO$5 zk-40c5>3?d3k0&D$}FM$yX^ry=9=)@wbFX76;BuepmE&G(Y6Y-y(-k=Z?B{Svar7E zwnHHIU8(f%n=8@t^!C8#t-%rv?f+3Po9=El9!liz<_F=%k<^esjPmB#@&6vg z@!jsW_ubB0GM*}3h923U{e1Dmi)X*QJb(4->5J#iTmD-P;HqaL&#H7;@C^{48Qh97 zPc}%QQWkg@6j(X{clk)+v+GV|_mj!F1y<`;9NW$mzUR))y715~6l5$s1u8P4haW(P zg{cJzEzw6+bS%--N_6>413N583aoup>%6Vu}*z3^D0*b*>8IZ=L+Pc67yS zmV2e&t`q^no}Ps0$2ro_+DhPI1s5@tix>)o*g~y&93P-%6yvmUl^D_htZi7JC#O6~%n>Pn(-9vN>8JPY6T4q7Y6 zBv6;3XRONiwjE4&@;vK3Rw?Nn@ZfIvB$du4>wjBXi)smt%GW~|XM3@(DA{I_1% zy2~kQAasRAn~DIJbsB$(ioRKvCB(1E_ZJtp!{*&#Q#^*zA^gUO0%O8fL2?$09`CMP z@9~b+8muogFg5L9A!b9bn4*r)yd>Tb z6K!6gq=~`O?ayhZt z_K^UD-O`9F_LKaui%!@Ma_~z}C-4{qy70vG$qtI~qi)EqHR(Pq7~B|0fQ-$wD(17h zVY_a{`a5*}9ln029zUiD2Yj#*2drZG(`iPGalhIV5%IrveTu4rU}?IP$=v+8uD6oX z@xS`S>nTWFSK0PnMXls^)GJ?d(-Lj~H|FNu0CXu6yn~eVxFdY#?Cb{XJ&!o5yFugm z(PpJw(6T65xCdfkJC*Sr4A()B4i1Zq)yZ!_v@RqQrct_XAo!UWuqa)}(#1Q1%@iC5 zCT)u0W7R$uSNrq;tu@p9PEuNH&o{;?d*6*_bK`lSeG2eR3wfY@3aw0H>HU3bN~?qDAblRvCFr!btlTq2mPd)` zWH0Xir!OADOYj}+6*QZ0&Jwu(g?F}w0mf@mI%X|M#2~-+8CmAnUPpSh}QK8V6sOPya^-(T{5GiSpl-Z1y4p)mM zN{02D`zgF^qXJtcNF@<--ETVx7MXrqE?s?BOyVfYU1d+&L9o(g_s+$$lE4@5*j{Az ziU)MbHMOnW$ce$ zDth6iqW6`8PnH>)PH_;)S~!%II<{q#O0VB`=2`DmWSi)RI4SS$V<5o2*nG@y+NO6@ z?vPM%rF60_ubo~*)8=fm;*!3`y|R6M_oixntxOlkSLD&AS#fw8ThlV{cH~fI-ji+Y zHdh{#JGZJ zkgse?f-Iq!u&1`99wq<7Z7GqSV6qd=e*{7eEBJIU8}Hau#l)r>0G@%kS2fUprPw{K z0=v;xsMS6GzMTP*t>Z11u2Ase6716To+nrnvb|vlRL# zc;vDL%rsl%C7P|6Nw$)gps8y>MF*jG6(~X0nFF@&SU5c=iZsnvY;2BNH&k{a%{)0) zPvjVdK(X~wRueBJ)#=C)WJRij#LIaD4(+sNZS0HqafoYFc)61He>Y|<4U)K*H@fV`cm{Z4)hZDO@7@tH)!_9_5(P%Npbo& zxKc$MEMbl+b8yLhKuL~(CRA4W4PJlZu!F(bJ-buT#q+jkw`ls) zK4kjm)yJ6rw8Kq*+99St?LNx%r#)i&Q{A&PEyqtV{X>oF1#S*M`UkgTeN3nMq;~bR zUvZE16tmqZU7Yti>knEtX(~&QhvwU)ziToy?D7L9qy<#nSKX$Z!Wt*$59bI zeF1SrLKMN2R&2qrLRDvLB5jmGL$oL)5oIRS7K8*E(%|{-!spwdmTZm=X_7l50#SxL z8R&>Q8R&?c;1n{0qliFMn~0IT-$4dFqliF*M)CT1L?Fl6W+j7bUx#2}Tqn7AA?iut zY&fKN;{1@=O;~hc2iG9=pj8WTv?li=hUH}VMh}@$VB=*r1DK|W|8ugC&t=FDD~!@1 z$Ne6IsgR8u@)Weiw`IHAgDlHG7?1fupwjCKJc&>%^dR+$9XEycZ_m7%KbbMbRI9N>*^KuN zYP|HNs{7YuUdxbF8aC91bHw{C9+1zC4>*f~R1I8*0&p^B0#j$?sd%mY}v@hY)F z;g>BqRR^$k<678IQm~mr$^4#)Kk?$Yw!Y`c*7O7KjV<{I_-}>^x9o??9F}vP^OwmrnGrv>><65|(nENeViIH3ju=JkU3l5I^ zBrNKa8;IKBs`JpNu+&JU-_Wn17=$fD5mZB~RdKboLA7B;^l^abV?3xfs3ykIpxQvO zrcZ9{b@ksMr$K#%i*+Ph0!^zFggcQLmCgK4a>2{VMVNQz+;Vf3~+>^8v}$G zgVBwJs+`~935$K@h7oJoIgD7#PL^UVJ6RfS*~uKseW^?gs>D9MJdCBLUuQcl56kV0 zO%+}3l!xUmVOVC$=qjf?EcYmrnF_LMQXU45KnDGzf=xZu5Tn`+ZgrT)jx0|>MRcme zyc>wgG}vr(liV67w`N|&@mayqSiT5Z&T@KZaI`_`>0Sz>t|sv+3g-n@ZbbZ4W(dC!;NEb1?($AK!Ffg5#03%toDBf6wi8ofE;;lx-TOAi~wQBLk*juy+Rt$1` zh@Yu=oYG6r~-T#_}oBx{T$8(c}|vwvem8TCY&cZ`S;WxXrP z95Jmi$U-&h#AFXt0hCAa($Bx)-AJ7_Ys&; zvkn*xX>7zyW23@NUKu;$ZhD!zUipuJOI)n9Wh=}q2EB@+yVRqAe~g-q9D|&mrp}_< zaNCDKovo^kJDGj*_31)+Eu$+IP0>YDe9=R?aCyVJ!YGG(aNX`N)CD3h4s&P7`vO)p zlnXbi9s=EQ-25Pax)j8-qY3%i5=%kMyPA+E<^fB1L0Gb-s#pf`w?%l!;K>$t)xyah z%a1yjHuJU(Yad^Ku(#zyTYa@w1n@~aHdi7nl7@?#xtp!=HZ`glLn>UY8QyDD8 z8cSCM4A6OIgeu8}*PFyqei)~(&tZ(dYqKo)`pUg)RUVf58s61q%ruNZ)(0O=ylXr! z=h98q5577-|F?@*=dZu>Slo}~cvx`BH;Es|8CS&bMu^|VB-@x9zgjfXGv>HkbSyBp z=vd%_cq}Z2T?Do%nKaQDO;Tv)Vid)9!4m(6UthY!=LhboU-)dDrP8meJz}QZ!TG9) z_YI=&r0fAB(KR~C&ue#N50W3?+^RCad$T$}@%1e~(Ufhw{brZESLlM`^sAPbhX=`h zgOh#L9oeh{k{6rNT#^_9t*ERV(X7-F;&clz^-u|NOWj)pHbPW1dcQ=Pv}|ne)TRS8i<8v8p+%r1#x?}N7SSt~0NBRm#TeQWCE;%pgHFOO^07AvYW>WyWc)oNH3({@<5Vj#2}~@ z6UP!nYeq^J9ZPp`2#v#{-aiiIXLSgT13_(^aiDi~2#p4xrU*HN@>CsjvAqKCfqsHN zNIoR#yyjAf6DZcaHR=Nz*$VxRVTSg|=zX8_cqb^$4Xq>qGJ z%hPPd>N9lp8NPaes9p30$+*C>FGvb^C(4zl`BFSZ55X!4`4Cj1@i7a%B=Qt;Ht*`S z;a^?y$MTOq-X9BI8~zlEcx^ZnYL{$AKkhh&oHiTnW`RbPQqAEqSGZ`lwnesw7ccCH z2d?i%V6*9gChZIgZbTa_C$ohg1J(sw-WWq>ttDgWf=Y5e20@$WBTzFaPb;v-6J zozxDa`n+7BW)L5Pm_d087Fn!@gbyi~O&mS~P}$-3GKp~fi!Ni)u*?gdmwHKg&(r2E z%KP-hgct!{+^k>(tXl{lK~c(*bZ)>eod}bc{-$soyv!lh@HxZEGIyi7#_WZlHXWrLt)lD>q>u{ zM5N_YtVrFk@guVe?rKo-<*m5a8G5geOCYfPV>%;J5jHE$Ie%eK`55&<>Cd(ME_biB zted}*eQKY?Wvg$*ubnK#RIv=~!l>PoLDa7ea%7RtR$l)v*?w8Nf(98%gAAtu#1Iz^ zBda(lLr+lU#9S`=L8t|jcj5w>v+7sqX+C7BcMk(XR= z-drAKt)481>pWc1?r_-AjTr3E_5J2}DJp_LuwzWn1QAFDbK(qAV9tRI8fHeds;r<( z5-BUmjIbmP*t(7&%9JG=6-1eCRgz}yodl89vY|EFysAQ0QhL<>@6{dE)PNr(u7t{4 z6I&%O8eu?p!@F)v!FUejFeGz(_wl3oUPlaG*b*FbhmS!D*zydIZt^iG2T3T@MT&*5-$gK#sLr9tnS z8e#%x#AWz)KApjvj^92|g!Cm4^p^d0RCq5(P;5LNgk^l~vf?-2SYh6**fL_aEK)(r zM;LF2aG+`wo6^a<;Ui3$TePH)j}d#;rfvwe6z?fuL<=c4X(67{%laJenlmjqiYX>U zUR5xLENm292EKFv@uQkrGIjdt)sAmSzwcDx^))~B4<0-ayYz5f2S@W*<5j!d!`8GE z^QdN>@lWJyt80{I5IoHtyOnq&j76VM%vM+_K-2^akmiY}YlE%)$%~G&Y`A0g zy$08pRwfsz9d#0#RP4ib7`U;I4D9Gw)eYCEv>BaJ7XT&Tvw$yr)|wmsyhR6A#@0Kq zl0aA^8<)aAaP}6f1^LIA2Pwm<1@j!M7UUzM9;94V3m&d^ySKMDm=|f@%1oBocwaW< zgxl`gsjLw%LLEzaiaM6^40SB!8R}Tdvqi@e+!_L^@73#z$>HthhJVi0n2pz|;%o7-uz>D;doTIh-xB-# zU;lc~E(zCJ@*LF^@*LL`atA|(kNGVCBE!c}g+j%q5PtWaL4}!5&!)-2Wdnmu!;L0n zf#p>>=T0a&Q4hfFg}k6BWy%z%jA?qYL>U!~Lnvb~L$f9$k}_LnhPA+=mG+ipZICj3 z;M@wGehTJ5MWqHmx0@TmoG0>BK7@DR9*MkCO%n2=DP1wne@(uJ=fZYWbiw7~`T)M5 zH>V0ANx)nCC)tkg zYV(#QUw(Ue+n3FQH=FTG(1rzKL-&?(HMZMJh|rlqyzYSG38Z`s&c@9OHf~n1akGYv zA)2^!z@dXg_<(oe4QUB*6v0DmIUy)z2*oL5Y^^2AC}Rtuj0yQI9&l)aSbxj`hkt^d zzWD}@bccIBa_C{`*sgBP2p?hDG0>h&kD&oeY{j&LF=M?DfgW>{z+!s*z&n+6p_$IS z_}-Q7wb|1yucOTQ=a+bw{MRiz$T-P$w}0yaacmug7IDbA6ytWRl&)v@{&4TqPEYEf zWtuvMTXj|!@Hrlj%BfbQg=XYP;6VgT)QjP;P;;FYA+LWvgs)RNZLR6rvm)?xDS<~e zB6CsHT(H5hYI90fS+!P&7QSBCVoDbiulbx!YEb5|S&@a=j1Tftumv>S$vf4_?;v}t zK1|--i2sQ{-Q0gH97?B&;ed`)Q}z&*?O4T^?M`b7a@{iR(ynkhvdA;8rM|ISHY~YY z^bm7=dUstZ4X-PmB2*i$yS`Cerxqh_cem?Vo-;H_Eoa~eorts&MyOy?7zvYqyn>0x zRJA)7s+QC4od2qr`1%HzcwB12#z_>uGMwZF%WCg#fYC;R62c^fruAJ|?K87jk)k_R z*s?!ohg}(KmsM9 z^Q$OQ%=uLmCF1-l3W7Ml3I~oQ?EI23BH`J3BUgB#{RH~rx!G^F$MNJ#yXI42HH*~D z$NzNr{;%6F&x{E(z14qx{`B?5>+@Hyy<2^qXRRoglG6FdcPwMDP&#TA@MbM0e2gy6a z^)-;{AMuGDu*P8>q+Vp?jY%gxP8hv;`oy(07AdPe0-AZ>p zM)|56eiJ%}N&K38uigpAyhW-3Bt0HYcu&&ewSb;v`*&=AuT-?H2N~rxQLdJ#z-CsEwfEqGfOpFoj?{C=Z2@JexhEN70}7s{6q9_YR)F zLQ72L78YI$bYf zpwk4~g7oVme2g(TtKilFr=}$8eRY4qlT8jtvQ2_OUHr06wwGC;s6R##^#wE$w6tNk$YoIG<w#N3%Iht z1zcII5O8I&A{tPZ>C$Du$?H?TBh$-(f4Y@EFTTlVT0v2K>HEFP6_s;kxzve>e{7%? zEk{=qj;>P7Rx2yj2PPkxC*b(6a;;m(^Ho-mv>hZ5ncS6G8iwAJQu>=mR&mu&$Aida zZ4mEAS73Q-t`)|76wIEFKomXoPafL&EbA4sgr<1RouxT` z=031t;{-dcNFvMq$oK%AK%Bb?#8p1kA9{Us7M1Ffpo&yUa5>YikTdNHIn%C@GY~c- z!ONOX&xp+xC_6NqR9aO&y4sH5tL-Sh+CE*e+FonVeF(fw7!Cev3y7PRy}8@mxJisW zGd)u)r6IH)#p0f3e($d-gtAMD8cZd{sZ3W;nXaJnu!hQm$r=bkT~t$rAnRjBCMY6* z{i_c4JDLf+EvR*{=}Q_fA6jcQ@C;lLVW=X)78Q}ZFO1<@3&W+!xI&tYE2PP|Mw*O} zijz;Z7KqeW>9W=`Ol5Bkr?5&(j3gC6ctlB3nI_%~B&nPx-Z7F?*^1i2GJsm1bT}-2%l*ih9>Kn&VwZog z5m)8IcxNK6(xYqs$p53`uI4>LQpc8l0QC9)PpWiTWC!vf?_n zm#d6>X_@)XeHz6S?g~$Pt7_BtDFAgqioc(uT~y7CLB!P3>4ALx^4D`X7&XyV^Ql`k zpTWnWNO>g`vco|w>S z2^z<)T8hQ7t1iXlQdeSfsaxzK^9e;9Rkw&CQ}yZR2{p?Cju{lfjh#ndV!n&2CwE0c zsCv3^+RTL4N0}?S7?`iMV(RDe@E*8>ojz*>U6O>s!s3Nktp$TtmItaT^V|h*8u0> z#*j0oA2%NovYYFixN9#bxo5$pXNwZJ&OaT3*WeYY(-x{5l_j1Psob+veB*41al z8shN5YN1yzUIul2cjP%M?YO#?+83b~McvpQOM1WM>Okf> zG8G=%l!1VRn5;(&gT}ik1e;~~-+Vf}8yvk8b@Wb6lfX4{h%6@d)dWlIs|l9aR}(C; zuWqA>eRazZi%8hJ;KbEB*Dp_AK6%C^(DN71&*yUKT=K{dyMc-9zEs-7FaAwSD`8ET zr=1AF<%+1*B=WJTh_VyKRIa*RP`Sk0na92=QsT-Y$(xQevb7>6W%qX5^#YG<$896g zrS?inspo&>WO?>Vpsmu~cHF$V-Lqu-?m|FEbjQQL|HogqU!Fo{izz%Y?CWyM)8{|@ z{OgbB7y5~l3zFHnFEwQX{#t~c=O1GRbKPSGbKOS`X4wF~yELa^aI zK{vd&_prT^ybY)J9=0sutw6#dkiuzRFF8U`)nH?7V zgic7iG;e$lTg{F0H_ls4{4Q9cR143sM;Vb51_>DTkgj@(3g|>&v}y>zxUS?{7*Vq~ z6Z>YW-dyIc@BGb;Oms|3hqc(U=whhoVyNh1sOTEwqH8SGLPxqiUO6h%lb>H-{Pe@~ z*FTHw)oX!XG9){Z7c0x +SfIuTbwrfjy7CHSAjuMaM@FiVs~v5z|uze=Qg={BL) z!&&m+!2==V5}2R@c_VptxDejae;1$s$3vhZ+7*Y7F}XE$rr@zWxziNxp%6M$`WU{6Hr>jb+&~2v zxzMI=uQu8P4^~8@>@t$`L#-69ODRF}v?^eT3Rw!2qiK9jRQbR#isZI5MH-NBO+hAW z1i9K2%l&V}cNcSd#Q%hyFap$NQ=lqvQ)(4B??ZP%Gp7E0N2TLy)x$K+n;?0wPHlZn-kW70sC&B6>U^4u)wT*4T`uEDzbrkQLdv0GUgkVxk4 z{V@3gzzb?>O1bjW#lM`t{^@6E#HG~$3D`GW2#mo)@>TLbN-el8@>3<`f4unV=O_R2 z>f+gxSN{h3KvSbmp9VT>#en=86^9ZCX@z@evbrEZs#@o&D~E@7YRr&ECD4{lDo@OI zeqxMemAlR*{y(2;Q1of&^~$5yyY7N(zWd`zx95t1xacf7R2Yi5S2mx+Xs_(X0j3L= zvWqC1+=EBrP5d4DJ)(PseG%Tei;ppccS?Q>kN+I>I@{c9`V@-9-WseJMXbnUu1CrL zfZpJ66)dh@QttH-tRF(7N=Z7tHs3>57cEEt4Y*!A98>rlvuJ1NA$BT}4r$)%|0XUz zeaJ#ouzQRbi!@Ly5`!>oRBl=7=&9cNdNiA-QB@+X;AuZEMUWC6MD^k8B`J6N+1aDZ z6Tz!J8cH!j^8>?eNqJzbxvAwF*uBkwWM4LealrKJ#Dqo}1PLLw_59__=Pv}%=F{hY zeDbq>w+^;(^Uw8>1#Ct523@2ZGsyQ9ao9Y!pPQtC)H$4~2A_241AUeFcNY69@y|_S zK(&rOGEGPOsXW>U4F4bDwPSi$+KkIQHR}9^taS4m2&`kIOSGBMg``oS)ZbyqA`%=) zF(f#WVm=9y8J|QsF`^)RPO_*|f@DTT*ldRjCzj7PvZ_+x7je@<kl#kM4FP{{^#xX?StcQ$1jujGPWTzqQ9Gr z`tmI4ZzcY;{p3q1i{<|n6Cc>SuM=+tTsz!t4+=4MRv}9=9FmRzZa@^0jsS2#6q1hQ zC?p+m`alJH9l!!*MHas)%pXqGk`K}_dLTX(8RqaKu=!a<_X_>nq z9(J;Mz?ny`?>*naLvnkg5@dvJ+II?>8b)8TZa6izVS(CzVL|jl|v=FY%R_U z*G?iMog4(KFKcbttAi3R)7UE@4+`|oB2X|ByP%0Sj~oY`3;0YFD8ZU?DpC?e4^#hN zSa5bV|IVLqKl_hKmMZJ%PaHKphav^ACJOSJ9rA`e1W6nPN9M(cuP180*%w!y7G z{NkEj^Br*|CI$ZcFf*UAsW$i^fomixIiGR1}AkZQ`Sh&Pxd?|ofH8X zl`ET2l2PfL$@AT8U)5)ma!OEl+Y~S8Xw$`P&NjocIa>gjju~QYhGlcMSu~ro&7DBx zXo@+6+N-*4W5nd=vzD-gQ^Ej4SWMhIU7Gkny0~z3hJq zIirc4iDe%C?01eK)#fH|G!8Y?<|P)qYjc7H@7kPV!MnCFsiP67A+d-ePd3sEBvvRh zrSG3V6Im(`;VCAIPKIK@pwCMfu&h#l`*otNoY&o3Wd%F&E1B$+9N2YtbGZ{3cw25F z4NP`5>15)X=&x~50Y3elj*2*%>;M$_CQZDG?5pSLe?zemQ^s=2_P_`yD^Y z{OoNg+tLq;V-(6{j8y~+sC-lX6bX4d3O?Mk;g&MdA@Im8dkF!vMR@l?0$eA4kYzp_ znM{;ylJ6xCK6~=#i=Tevzkl-$kgP^BjMN})o@d@IOiNcj3YZAbHkat)Zmf9o9}kqg z(ho&%|F$;n-5HTva;44#6yxXAo>8M2}66@Mm^3 z%9g#ZOum$bG;ugOg(mK+stVtJ^^frR-`l@^)1%V{GUmudn8HI%iA0#l*X%nInGz{V zXMI|oKVhI_th=p^o>F%70j8pzwkrD&ld(1HN@0_XzvC+ePHS0Ef5ZO!&fSgwtFQj_ zLprzGXMS`2?c0WO%_(M3+TS;Esi}WzKhFIwt~bZG1@Oi#y`II`Y~NF<3W%Wj(*E6F zdK|0?)q?41{h(3zJ>2-eP=w?*!@sJ}E>WwIr=huQe}5(VzAXg#^AG>CW$>h420qdK zK@Z37uw8?W0doA?AO83PIr`aNX|y+ZBQvYLyPq0gj$N+>K6ZU_kmY0dhoAmZa+?FaW-Ovs3(8EJ}2n# z&1wBN@u96U3?|}NU(sKE_1}K|Prv@BfBOAb|D}q=h5ysf-^Y_5$eANT`0n})T$Yfx z1%F=uhx9*>zo$x;CR6g6b4+GGuKzL-`wIRqzG8%JPONFUfA5l@ZA<-oSA=0(=HI*s zqvagI@V@%r?a#K>$dc+?z4XmTRc(Z&)oq?A$dV!X)Ae&h9$hN?eQ;wK-Ytne+*5@Z z(uQowk5h)6iDT}&hIv?%XeT$no!m`??Yx4vv>>v>&Zp!sxYWzClKrIMIsf_nkAH`r zkcI*OO=YKH90q*8{mZ9RYEtDO2kwcSsB%YkFus%159Qo5Iq`6OqK{9c^oe(34~Hin zPM>@@Jo#|?q<;83_vmvKdG=cMaCmAzyqxp(ufO}ZKd^6p`~UvtxBvdf-~HRae)BKC z`@^sQ`|tkwUw`{g-~92{zyIgo{_&fC|IM%7O8@b{|F>^`|Jz^xQ@oS^{$IZNe}4CG z|NYnL|G)l&|MC0Z{qeVt|KeZ%{r~>vpML$vU&r_SbNcs#Kl$x%ev|*?x4-{=NmVK5 zWeXqKO!@GR5yBod;}qx5Sxr7-jC47x-%doF>p!f&B1ye`M9c57$0p6ywr;ibmw(2X z`|~=MMdyryDIciu>=t2gppsfyKay^+?WZ~sfeoBvn=r_C3%yUV0K&E#1Q z=;vdYWs_%l^vDbXd2UAFhXrg7O-ONR3J1iu^`Bq;!#Cf2zWx+3=k*z2a!Nq|$NoJw zT|EBs!?*owEEEO8*Eh{p@l0yJ=h2Q|I}9dQH*(JKVA4M!5dW7SzC-U%Ey%t}1Ni21 zAHoS0n{F7wfre1-Q12(KFg0*a+%SX`vG^vB;hWER6!HH*uIcG^0LwbEnFy#Ta=7N` zGgYH5x(=A(ef`7Mp=HxGguOUY+Yy=|`obzeN?n@YaGPI_q2F2A z5zcs>?wXwb8NZ|s8|(7RFTZM!g7Kz}tuUUBh*W+uO{hRk$!3e?Y?EMgiy_Lr=JO@>oof^RJTZ({rG9DD%Hv1EMYiNGk#Z7 zo3nNZqA@7-pOma>NP}hbo(8~Xc@}#PV=7rw{E>N;q>$wT(`m@dY}=o zR}EoZLm)}Z=y-hd{MSF%rG4_px+w5?Ap`|(d;d&`p6M5ZS@-2Bn>m`z;3@Te2(sM@ zPeAvAl#J3mf$`z}<h#TB)pZ`0ClU`U{WA^g=kI^;KYh#F zkaV$%bXu8ph8LX)U1y+K3GimSn@Y4avNIvbs4^p?Jv<+Mcfyf|-t{J}WYcYvcZfwB zIIC7$>jWj4Iflsrkv=sEOfpXnG#H*ALYhd;l^3M$#BYmlqmS2?NsHThdX&7HD%nky z&AS*ca$3Xor3oUMiHj-DM>Dwq6Ty4ccWZKAwcj-;(p}NoM1aRUUJ}MKDTb_Z&a`s3 zP6VunQ%_gJL`1^SuT%6oy0+(z7JDApV9x`?_B_+8 z^k-H#0xpADpDPaBt3r%N?SZ}$c&SXBcEfU@aexvLEZm>o>w8@(J}w0a&3nVz@5wSu z>RqV$`z8X*eLqyu_0MtG4mXcRH!qHh22XpiWPqm*m~b;ZZEAOerw)=;G7_#bcO>k9 zvdIk@mNy9NfU_y%@+LCkawj^zYXrD7;QB-sCAj@x?Y4tfA` z`c3E^=5ZNhkqO9Z4^-Q8&MC1xg_9P^=qsxJ=-W)p&`^#xVa<26V4?Ta&RI}7Z{yBL65M;-~ejWBlHQhui6FU3&RbG!zVO5lJFddoUaCH6j~LApM3NugNx3LMHgzE^z5da z)MfOQ3w8cFyT9t|f?wSO$ez?Zs4?A!H{0mJ9|tOflQrXvcZobUgU$*uWPW)vD=_v9 z>q=+i@U)HT_O1Nyo5*&?JcP#e%ec{(QMWB*@vPoha0XBTZ*M1+RTV_91{G|thETbQ zDu~ko;*^!|N0057P0tpwr#zlFn8kCkQ(eysM!1IaDBvaHeTjI!Wxd`3Ds1uMEtQoQ z$q4_H8R(Gb*Neg?b=?c0zorfI`s`h!*l&hh3tkjwD#|gmpQ0r|=+8q}0TX3@5O3SEYOQd06Z9=R>f^HA*=6;&gE1Bxme!t>A)8HU_t4k$$? zZ8*>rS>I01pMGpVr0mqnSqCXkFBmUQbzN28!An{jF**_xzvH0~j z+LwBNzt}8G>Ed_@{c?3NvHiH3s2CyDM?Q{~0uy1;pCyij<;U@QV?kh0VElaXt$Of! zW0~Iet^}mpyF2^o#f$3%tFFAMt^m~~!Z6-4NEvpoTtaN_j2C1v(hyE;xsPbM+0hm; z$2+y{ciu7NbIH7ilo5R(lnz1D3w&=Ty~rV>8~^h)lSdN*Z0%mtS-V6Wi!@RpcTao~ zysU~OP$spr0Yv^*#+yXiqJY=UIFH_=;FH>Wvfs@qPI8L>=jP!?PjS$V+aeiRWZGbk zolpKsxQxfAj1e`3pOMDGEMWwl)0D)cQ=2wms9Cx@CK!53!etVkf`SmqDM+AvMUW<# z><7DZ_a%>77pY{4ZmQHLHeRk9uLR7N9)K$+x~&uzDv|7cb$MFgCbHF{9HU&Vza{(i z&v|U?^)HNci}g<^Y`y*&ge{i#+^^VK&5)SdO^sK~^c6eZ)*`!_?Qnd^A}5TNjvFRE za@-{7CKwsaVmz)jHjA!$EU?S`^4QS&ZfGH{$r5_PCxhOMBZ0g1$>6tMpUamLr7+(` z9?zWbGk0w`^RDal-co+3+jiRGArSn+xJCOL_gWB&7Em*N^xKIH+llP%vv)^qsPi~= z0vPo1Xktt(t5O~8;(RN%&5N>%21h#W^hlI@5 z6UrY<7T-=5ce`20oMFiwI8}T$D1MJV2eHMvLDcO!W$u5wr-E>sJr(5k77=olK9u24 zSJw?M@4HIoq|{qXx-G4IoA@47F+V^4uXckA5J5Er!Mz+nZO_Y%INe|!z#Y(*P^|}~ zYAS=DRd~UlHH7q8I24;yEx-7JiKkj5{eUcG$8TlHa7zTR9{xSKB#?s zE-JsfX;}NYy85Pdcfk>~GO8<}aV5=&-ojPw10elu6=n(+FnPcUKnElMskXcc*sT@7 z?iVeWA$WooP2U#{z@42eh;9;kH`Cx(({VFT^L65sp{eYlg5c^zy$gnf>}iAOL^C9b z7y!?MYk6N{T#){h9-b>Mr1FqH-M+Z}Fz|zq?7%PhVhb>HSq>XDR-6Du2RaPQWgzo4 z7OK;wKcsorn;1@jxaNzZH*LF0{3hTK+vF|PP!>S*XB_knIm9`*p?dt1C+k@MCgJct z=&%WBht7!gCZHWc4QS7LlXG%t{A%6Rt3^HE$LZ4-m50yHp|=l@f7i~}F&JJ?xF`YP zs8^IByF~FCah%AVy+)jr3q_q#-QJv_+%jGsMRFn%_F_F)toV0&d!|Go_ux$71OOhp znj3V3fBFf~v5P?isO)O?jCi6nR?FJD4mOMC9q8MCsCvdENJg=B(=2qoI4eD}q zb>Z%{9l>HD#OCf0CB*uCh!SA7Cm6Ob0MrhX>G{B`jLa9<*E!KmVmoWa??&i_W7@|? z(WToex++-})P79Sm8jRr>8^kOcl*?zD70}yMXRzw2vMTK&(A|G2VU1J$xIvH>O&a`XD zkipU}Dp3O51N!Eu6YZWCCG=~AffGCI^Rw@BQ*+F*eaJ~6i-9(p*f-2JQ9@L(Izd>g zC+juDiV~F@>!uH^>BHIXB2D6EYD(vcIj>9n8Mc4aCyfSQx4#*Ne)geneS`6{Nz-Kn z4~L=Ue7W}p4pHJY=vRJNC)GsDH3wwLr0w>Y-|kcIw!0AOQuP@wi|3VnDw_t+tL^i8 ziB~u{-Lx4G#y`-#=J>n+`t47j?SCZ|7^YuK$)vnzC5UFtfHTJn%oWM#Ko%L{c`am= zxR4RYqN9u`nc`xonN))eMBj(FxcD?arB+qq90-9$Xd{*}hZRx2Xh%1RRVHeh zl=-wZBtV5LsgkK66f@KFPok|!EhU{6OLJ!CZ=q*@jjV-q_Qr4?U&EVFjjGG($Aq~K z#0l!Jfv;g4>+aEwI0gC`a_fDHY&A`Y&qC>V|5A!RmAn}P?PEyb&*tjg8<{)()YY-p zqKfHlmDx8_>iU!>bZ9lh*LenSX#&ZD%j=fv#Br`u6aoq>f~thejO01j^Y1nNa}!WJ z{g@fblCJZ91kr>Q&sVb5wjUBuJYQ@AYwM=<^D5RT?bdHgfN%A->=ArdM;w38qj7Q9 zq0yv&!f5=rf5oH89RO~$DE(n}&8`sz*5ox&APpyZzr^57qRCg-)*0|yI`5dpx$y!V zQ}w1t&&=?WbhoO%K-vJs53kzb8?dENHjx}#W1esti)!ZNtclgi-U!e5C)RezSzY2Y z_ZMgE%}(T9H61Av!^C|svJD21Uj!ZT+cA$P&2QoJFOFujzXh-}2MU$G-vz|7+6KsF z698N4$KZ**=C29;Egnu)9k*#G6gVo1V|0SOU@}O5fXEL(wq-O(JQ}}14XCnVG89nWk z>1Vn=OHfZM#Bf!haE(C^4`OqQK(H7dqHkEE%~e8|R`cLdLKZq`sG1K|x1lm%Oi2ss zZs$y@D$`A>rs2&9NIARS?4qFidlKN0BTo`z-DohV&5&Xgph$p{QmLl#VjOdw>&{b_ zz^X}jjI^zp>~QuUP(Poc&}Rtzl#P*~>SNoKj20yc1JvB^MaGIaD#KG7XBd6P7AW-d(aLGny(v2K-^O@}a0mfT^1@|xFgN=3+A$tMuaR#Cs`@~44M}`L z_f*RM1Wx7yjSAPF0M(!l-#_Cmi=b-IG>~=!MJ%)U2Fj#pH_*-kH{3v()a?e^LJ+qb zD3h+;K%30%2Fes^xAP`*yPY$rGRe1dRL4Es&Y9Bfc8=?~hcT;u+eLNU!)=!x{kDq= zxrZSi{kDq=xrY%Sl_c-p46wN+*zuYy@Kw?1byj+msP*?6_u}O3(YcP~wf>&>C%CMv zn2`l5YnWdYSSve>*E2ZNMueVj^oW@y3S|U-%TH*Sn3-DL<&dpp;>|Thp|`vJiOK*3 z9|R+Z)J(DcEOzH9vt@jCIPlecBld_3vz4yO(eeH}oT6vVE}S(6=j;tGrX3iwTu(f4 zQ=(aDeX)*vIbmOi%5F~8OA~S3hTD=MXWf=k>Z|5NIrI@L1?$`!QJ~JZ{n(lA znmP!q4g-2)z-+#HyKg{I-+^M&2(Jq)!4IMMA?5hD@?)Qn`(v$_veLh-mh#dMmh!4u zg|qawM@t#%WU^s0+ZzDQN-_RU(eGuY&GoTqN(gshQ8=ln5Qj`29KJk5T81yw3^~_0 zsiq3UI%eKH*y`@XzVT-Msy)%=(j_v`j=phu_oq=(i9o;ku0JfJ;YGb$6v=`4o6A78 zpY@`!EdIPAK;WD`DW;2J;)}i+k)O6NW;@b`DB_l1%*pbLbN$QPF9u+`|6=}StGudT zYf}KkG*<}cy{znO)_ieX6rvo#P{bi(DugIFaMMH-#;-9(q6eWumBSqdmu!HJJQpz! zkrXjPH7><66u>1!YF}LaZP@@;nxXmEF(O8;N(e<@_Wp=92bmH>5d_Cjm{fyM38L^Y z1W_a#gj~j_+z-(sF%0P_Btrbep%ylvYJLqteNCSL{4Qw*)O-3W|FQj|M|PT0n{}cx(=b z4I`j3TaLa8*buslr2XK;Et!*d7Bnu{E{935K9+u*+{Tg+rI>N4^|3J5J{xl*44=*G zVAze`wO@}!C89p2SARv8dm>(w+dA-4G>B>FplGnasuHXSyi&u53$oL90Z9YvMG(5Z z2+hs-qGH;PS&`mH)GxtI!-f%40z>X=m2jq!H>Cg$$*vZ%91m0qOz@y39<_AK1`=GT zO|(@&;}{l(m;t5TQ6_Rp_C3X5cmxcB;z7_MVk;8DJSX4F&^AZ_Q{ID2JtZP-ku4%VIS8Hu&F$iUs)|xlkt@xmFK;d3e4E2(V61kpzOrGI5 zc}C)i1&R0{YdI0+`9wC zTY8lP_vI5g(cX*lf@g2G`r#8Fj_`aq!c#nydpN%H;rLt~-yymso=uEvQ^=#>XaD2p zpRk;2at{aS>HrVqgquCkw;A-ctOtq7CiZXweH)+e1jo|{wi%r2YTFeTc_=3y%ISx4 z562fCjxRhMUwAma@N9gNJli3XJX>H%o++Rt&vuBU564Fzj*mVZAALAJ_Hcac;rLh` zpXXCs*~)Qb?F`7BoNc8B;3a=J#M&Bg|G*u4#H#Z{g^FI3jRHbnwGdi-5d``Ns_c%t4mF!VtocK7zLX~ta=00RT;-HgKq=lAo>f;axRZ6tLJj#6>1M?~;NJ9J> zB|nbwXO%M~A^wcAAIJE!%8_h{KcoD|G5)L|l6}Q_y7NW%%mj73DSlPCoAJUMs&X6S zbErRX_$Ahjge} zbWW^?MDdUcg8^p40S1G{hQn2!bRwpH!-npuZ`r|9>R9zqdw1r@$!V5!$hD$_CCx-dJjhvZm=q9NuS8RcgY3gkM*^?$UOAfE%yHbl=|~WD zV{VUxQKdFGo>RG!>v|n@e?}ZsJTSKh)hly*kmbtrUI=#7+8{Zg&*yWT&}-55nk0Nz z_ai~ni;eAL;=)?+-Qs2Nw0-y>=Q|`OG8j>Rc&_u|DImap?6M7Oa zw-#}I(KbK8CrU@7*lX+$UTXv`uE}aO;73BE8%uPEIz;jI`}DTi8qnPC0P%oCL`k5s~}x4x-cUlX+T8+twLGXrJI?&s{w zmJ+y*)~NL;Jp?0qouO8?d09YjJ6pE@JGzh~(;^wq?mEGYZaDBbtI={e%NF0{js#j2 zRGSSqdCJfvm(n0=^vvaPtx>e?DEe?>Yeb>NAmC$sB_0f9Lbp^7-B=?+7FfjhB&~6J znnrlBHGB!Ys+>1pxn}QV_+D-7Fm*F?^6qRn#p<)NZYKT|R<=X$e*Tz#R8oo<%3DWU<{qM-K*oN3kx zwNt})nROOsqlo63keveS1cDWGq3+}1S!-02*($jvZi51JZde$1rJBLkOD)&y>?{qM zmJwrTULLXPFUxh>(w>w1zqs5Qrs{=C50Q^v5)CUMcbcM)yoQ93gR0AMB2__(;xAJc-;2wA0XinItAv;nRrl@y@ZJi@c zRnL;v2|CM{k}uldq}Q38TCNGfG&pSSP@F_>_3TY~8O-}hzI@-n2Pi8$F69u5SUNZWR&mE&>!J?DR)S`|h*- zwro7|spSS}2Sjo&1=Ribq7|%@x*)CaY7OOC!;m^5>}=ZojROIjc0k!@s=-8+`}}tL zd0jMh3Zk#IyZ^LkOt6XLh)^Cr(Bs!IhTg+$eSt1}jVPy!^Pu@%b@3I`w_pVgV&}$2pxR^bpC~ZuEmLUCZJmQigorTui#WJ&ws4}s}o~#eLjKK)y<3s zvYwC5PiTPobh()fc~H|~GQHH>D2wUMzQ=0Vw%ZJ?R7}WRK}n2g5`E+Mf|zlv73=n> z5qNe68Aw@pAMi0u>;pcA>GkTHjC2>PZ+I<$Jca_u0caRVHsEk`?2aD+=`ih83Cw~c zsuws?#9L<;weQd_qUp3rnAggYv7_7r+S?N7jl&}G@a-ewxeSPRDY30*GYQbDkyeYM zBf-d}7OPI4V-oC*1~MRol!MNnTaJ{0yjbd(Rn-u~n=*BE-1%#)PHa1XjI2p35|ww2 z+o6)A5;wE3W_>YG0==s$^!u7WqY6hr91r5CkNT=*6RDePjM?$7^{S$UcO`!&;bH+F zHIOm)YCZ$0vu|CC=GfN^nuK-XB^13x3@_Q23>w|NQSV9yO{s%oeg@Zs@N4f*yu7tF z(z}{LlfdpVs>85D*Hyu)7X_PI#=p{s1beeS=$k&MCQ`{g(MHdtcTK|W^dZ62wLavg zm(`q9eQ2++dan=G?eyU!dwn>?ULP{AQ`Co<%SuSHwhz?xJ)6+yS|1YlR1u{yg88h# zilPogQBHt`q^^@2APXtT8m;(_R!oAa(u=!=qzH%^NMfL=?r&xx>3T<8XhS5ZYEl4U zOjb*0mTW5MMS*nFwjJSI&bRC2V8-kHmH@Z0pOoA7uTMxdGoWD_kU^g-U)1|OaXnD! z1VM!y%A&J3y}u|t(CP3%r%SgbcFZWo1b1s2M|5A(u+wRqkf_Q2vW^Qhth#72z!Wfe z@2T#KzG3S?WF0nvQtcVVS;Fde-W*r^Z=E+Eb7o4o}I{rxAOF$>m?9gpySXZ|4rQ ztlke+JSLW{6NxR)iNu#On9Ra2C$^K4T1bdUjjAwv6&>iSEF|UvojWR*$nM5Zed;(Q zX{2WCh>0TKN576YX3_-3{wTJ&b0~zM``KVMOyAJu8&98HuX=B#V8PqF&Y8E`Epz6r$=>NZ6;@jS^RfB| zo6~;zb^XHn2b+mecPgEr@Lr|u{!VP|9?V#~F{L@1mxs$wjn4D^oRfL)92w!q_WO3@ z01>Jq6PlAYcaH4!85+Rz5u1&yHWs?Qi{YXGEW%i1e{-}wkAb2yVn9{a7m6V_bw+*w z#Q1ITkoEiGA$zThhwSyi&2yE_Grb9YWb<5ZukfK15V-@NInU>?HicirfoyIIPvk}C zaiC4^gFtWFC-0oK3u&NJU-de2j{^56*(UFtL~r9jCnPp3b01Dxwf z5671urF)}-lj?1#=%hI=B{`qvK7@^{&UIJa*>LdNK+u_R@PpiklkJ@KXGv~&+XLpz z7&m2We^K_s$@jW`@}lehnCiOO#5`qRDPGIv6t+&o+zGPZ4jBT!`1N}S&9n5b=X#!w zus*M->Ic>->h=`(@$~Ibk{`Htv$xsJo%rZ?;xobJl=X^Lx!e@GE=$n&_&Vgm`O^2f ztvyg=7a}=TjrhFfFFQLRenVY)s=`?n|Hr5I{Kvh~)KX_Uaeds#N70xO^mPWGtGWIp=9kKcD9YZI>_(M@%nzK(;+R~k(`CYQ3xDmw?)vpq22Xp+-_-294*_AX|&C$ z;z$`?ZQvSZ?kNO{H=&#xNlyDksT+>&3ws^Qg}u_uI@(FLsgw)7RL(K6g?f(Z?fK|f zN#M8BR%g#|M{b`A?D(#*%kgb4nd3VX=)~3_JK$zm8h$7A`u5;NDbl+57u_D5+-FQW znSH8KU-R3;=BC^e_nq9&Z03PYS+qmd4eosE6v?GnL*vq1iq%Bw+)_NZm}b-gpmhVF zjaGD+ekg&XJ~b@tgE`V*+6nKVnQI&{HpZ%0>?Q*-?{lE0MJ=2hB=hQ*LK)uNOD^G6 zZpKbfM~cGshiC|}zGO|eN9ddpefJ2pO$aVq3qFdTZ9WilxP&nwQ@T6L;z=;1I6Fv2 zSZAa=NJdDj(_1j4)fwJpYQC_+o^d|DYn#&PY);1yQsR!U>7Pk!fBy3ipS=&PX(+g3 z*LmK~>NX1~UwoVeXbF%fv*&`3lUX`bF+YoS$J1$ThDDDbI-va8s41|0EmZK_E126T znA<3r0}dQ=rHDvhimTxM?=HL!Zl7=OJlU^<7u$8n>*fW{Z7&EyEJ8A1N^H*RbMN+4(#s< zbd6?xL$jXm(TOh|q@pFmH!@ z;MDLy2%FlYpch3;+27O}oKA}}y)JYtsM;L4JkE8vMfYfn*Uc-e#^Iuu<-P!E6Hkk1 zA6IgC(~|KAm&c6mE96XgWGWfniCC~kYsDM}FleF=yi zO$LTjoh02Bk?tt*31%|GG%EcepK!}R4>ed&(u7y3>+Uj z=c-Roh}2|UNp_j}LDKB6*QskAxI1%-J3gk6FUtFpmxP$x(7VF9v}^H>+22(R{*BIr z;Um$zEuD$K$ezx`x7^lyi(TaV@}&$b0)bgs!v{VM8m59_yXBvM-S%!y40!8@^8t3u zM0t9b9iIT}sjn9^&3kE?&msNyl{^BF%&GGO>e!Pq9sZK7EsZJziQ{=Nw z)}oENQv@CB2(joP;_HDw^Q!*LH~YqJ{F#dMx9x8Xm)zeNE>&&} zxR*%j9+qYLo3&*cOQGY?Z;+Lu9r5-ZS%X5_@VI)K)dB+$li(la@&B(xSP>m)}po=4a#Wv;cOx=hj;>I`A~=dnZeiprY>Lb;Xq)xEls$kCbrXjUKqC7}9Ygz5 za_!(y{FLvE@bfyhe)iCMARCgJKp&LE2Vl=S#mI%2ODFruAHa8-ODsDX;=RB!075;F zk6J?fuzX`cm9N+V2k7W$(eX>TC(nG7G4y zd;XN_mMbW+4mAapqjAnS90zix?EL5Ne~4$9w@5P)Rf%H}(V$72W03%JJ?rtJ-Ot%Pb6T1$66T1#5 z)cz)aB=`zvak15?Nultf)5wX3rWp%$pV;de<8an05dB^q1DguNvZLhtJI z65Yd^twRvh=l)F%UXZsjxBzQ!tYuxp?1tq^kh3~U-%&qA5g>LD z*mmU>Bi*PZq`Bn$i6YzTbV2sD@=-?YxF4d7UT{C8)m*N-?Cb8f<>`X>WqEr19dh_? z_ryvv5P#Mmsa}uru%z6}SvBeN>UBXbvOn3b2Zz$7S9A^W_nO!5hP}6@_EKGk1KE)u zMj60%AywfGHu)(0b8G%0-7OYSmTpWkw7@bGlYI0&ObK~rktx|vF(ug`5H>4%7IdA4 zbG0;__#js@(J!2dE{B)V;#9>xD>Ym+qKwFfoem}ex5tb!x}=AW!QOk-~*eoG7v;DkxrOlup2JZDBvci16|jGU9A*MQ2xaBQ~t#EQ@$Zvj1sQ! z0!@t@T}N0i*@rE5NRSG#I~=Ich4qJEjlzcm1x(6^!y%>bVG+5%Hqi&Llmaj5`f#Aq ztqzB{m`lSH`ut^H(&gbml~^7QRAndOJxji+gK{4_9q5tMO+26B=?|O^G-1=dPIq*= z(rH9#`tGEm4}d9!4z2G`8me~|N0+6)W(n3G+3}{7;tU?7&;3OPiXZOGLd^ph1#~mA zs6oeQWUIT94z1lrBWt^jMDEJbMna@J8+}wAHX41qalu51ggear?#Yq8KKJO2o;#+a zD3UA+b=X`SqqTSdC8;CZ%O`c2qLZ1ayUcCMWwh_->Yjcy%IxkC6#SAj_z%sQDO5!M+C8-Lw_D%-gZPTUqCBV73Nk-!VBx zkq5TMZfwm-K4wcY?|rHgnbm99b+;{b^%*RYa(Cf2Gas-;ts&Ff&;oPCjor;hilUGD z>BJ_?$y_@T^P^X(KAS=a(lWDJNSZ{%?C*quYGD%{kkp zutbqv3QH7$!Ms>>JQe_wY-G8B3ug~ia!7IvLpEk&M8|5u^)gu|3bNwY`TyZUElD_qxYDY> zTs-Q};3hOsZP2Zf8noC}{H!qskNC|TP2|B!=BD+F6cv8f8M&pxpk++BPEN8|u*m*C z&LMvhRvMk+3HsMKh@vCL%+BKF8O_ts8>PMEnrQK~4d&PGgDBYTqYv!Hga}o_aiE1Syw#9ClUXAtOjh?4cZcP7gK6z+B#Z z9kQD}0Vwbs-MC^rI0Y?-B1R5;JU9g{XEYV~V9=w?I@T;0*?MUOTjyIR=fT8FD>f_~ zr0+4op18CGf8x>-e3uU=3YGdBH?7!occ*>Z2)^^*2(e8w5>N-T^wSCmHuDhz$lnL?e-bBzMQO-}m#A zL$qp|rB)wL(j&yNKZOM9AoR|p3Qd+Lm4M2cmGRPg<*5D0rq^!isTGE-4?O`Cl;`MS zz1z`T9wUYe$lZ>%cr(W~a5U;I-YoEaXtcGqA0WspJRTrcw}S|Ig~x+vo4hE_omW^i z((=VtKet|Caqhgr!tK4n!tK4n!WD3vi>1D^qe|-5EcZ zeeBvLS-EzJ87Jol^g^=zfhX6!CxztOn#L$2+9V*o7$Q!8%JFO@{2p)97k!;5+LBJq&SLbAehzi^|cp}tM#LhC4@ z$IL5{PhGZYVs!PF)iCt?5P{S+pmSi;H;yMS!L5^Nn~?+wqw>;dJZr6;s4UNBoefS^ zPY0Jk#giOlcKGb%A4@;4cQ$2cYn#0rLxPVoyf#a0wGh&71AWqp4JefRw(C*Gm2RdK zc``Acll!*oQD%?lWNEw3$*fymJbKnse4#1cwOvo^mA%$PRkgrgYqKV&q001A$5kyp z&~lC{3PAPXh?N#p6s;!IVIT3s$M)1kyEfgaX>U(0q$k@Q?DzZ5!<9{wpc>Ch-!Ox#G&R`&wrW%YWKAKy9@dp(SXW+RQxPh!2YU)weaxisdpisR6h;r(_oK^1hV7OL z54Kd;J6;soC*>+ql5(dFROF^^h@!$FMRuhWifq$16s;?Hpp_hUf}+_~B=IQ+{mMm? zNSYV#@bQvaHBZ*V#csCc(YK|d%VR+S6?(F2Zf4Ha`eGMv{Y}MHi(A7udKOZ zJ0q*IC$pkGct(LeeeQS}3dQLUqwXmvnpvJ3ia$_KQ5YBTMgX<~+9dj5dSL1{7%0-7 zc@9Nayo^2xyQW<%=_Y~X>Io!D?y_-}%=L$e-U^=zO0M6Wl0 zK?3B#-E~Y<^aG(FrS>WADq-DgQahcZmPZqMnBuOEeTus}a^^ET#B5!OSVJ>U8Z=YK zzI0k0o6>2eYbl?^p14uz^`>@O=~+}mt!rp0??tpq?|_R+c=kF54{;9DcK@(SSoNCt zhlj;9Ii$gqnRw*m{BI7AUg4w6&iSYs#pK(NhO*nrX=S&S)5<SkA*ap%jf6mr{uKHy)w%0Yo}F3q$_*j*B(9P zXSLI6)258~8czki)0cEADl?-evc=hTpREatgXt#gTIP8wsL0tQ{i(3M0jeN2`JyW9 zb3;^1nH-@g9nuSr1Xv+$%g6rKcdUO^7yOWpDPal3%O43Q-c{p7eJgZscgYFCJj|^)GXR}Or$=3jxkq(d#_OR;y zV6`R^9j|&kUJq7};I}-JQN}^Xq%lsY(26C9D__YITYB69_;yKea_~(7`vDZ`6CTR; zxq_54Tq3^adrRPZScas}^K-u{6C_f}*C{D5ydQRGrz%67kQf$1$D6`K{Jk*0k^+UORdh}7s z!SQj9lR-DGT+v;*2bB7(kMkp8*2Qst9B##ga_Eo6SPq>JuG9KocA6i$&o|FR{McLzM86gsruvTGhRqJM2VRF=1Fyq=tf=qE<>RSU`7c}w z`(T#Ob?(M-=1F#1eNnN~k&A)ecLazM`52Ci_$93!#F23C`D)NvTc1L&X1*C}MgXL73bimzF7RINpe0-Y&RdT|HuN}*QUw;G3Fo)Tk-E^H z&QgseU3V6wm+guQZrbFTpnmLy#y=fxM75ERoz{Qajf?u|E^6I6`B>x#8I?XEUX=_5 z>D_B`Cs-y`6Ux^_M&-2k?j|+P_tZEIuH4+T8}$(xhm^biq(Z8iO98JMl`$b+=+A4$ zCXJXNJ4)3sQ$QYzQDt?x@5ouQt?+B`LTyJcT8lCy`ZA=0G@+7ZC}&aWkG-yb+uKO7 zHf6`6f&x9JgX)~ZN`@3aHfFAAQ%axXU4y(=_NLI~1X7rYm7+EWSHK|nQNLR z8XS6^TXo1b4Sf9%j)bj%sY)^`(m<0xo|Bx2_kdEj4e7 z3(YF&5S5lg&aweMrb+#EmniKjtw8|=&e!`L?e^BOecJpu{$8Pq)M&|u*#h91iqU25 zFqe`@4lH6w-NokC6SM8C-i%VCf%KmXFOVT$(&aDyJ%oo8M+ZplsMIU-Oof_n8;nMg z;t-Tr{f@Qzaio5kQvRMfCfd)iq4^c;ELBr(xTsj?qB3Vzj6gW@(tIG3*qmY)u{JrU zHZ|^>Ca7-?REE}P&)a0&HUZGMT>_wSIRTIe@rx1wjaw!Fno`gea8b@j^8Sq9S0Nc+ z_5?9sRK#!m9^)0BfVYWe267fwiDm};wn?MSG_`$m!)5)3YchX*vV~|;Kajm_0$FCU znB3`|uyjf3mzng>um0huzkL4g`g4DjUNvcrzpsIWt@Z!N(xk9AHZ_)rt)tG8PS*2= z^2Qc-?dgUn%o>Bq4#6zlUU@AzY-wW5>8FTnUBTn;nFI0g9#3rgXB@=$@t;4qeowR% z$`B{KB&NNPks>1SeP4|-1=nab!!=@^f|l||+kjZXHTd%w`aD(#Eb*~1j+mEoT6%m= zuS-OFfr#b%EKAEDWLaANFw4@4eU_ya+5b)7WLa)_n_XwgvwegQUtHPf(_ zHOcZl)361~Db29YgE0gFEMVA0DyNm;fw&KGoBzO{JApOO#-hn`DAoy*8zX z=o)?Ol9es60PJ!|EYQxI8CL+xA+bkJvZgZ3av8&>hnnj>)U2*`3*=2QsMVFZ@off) z1@h4)zlDWN*<~`QeZW3y&A#Z}f;V-Y3~G&AC4<^cSNMbXg}3_!+jo`z8?CrHh_7*7X69OM_rs&aB zJIxPJ>-+%9dV+vW@KS0XWcS5UlwzvYdVMA9>kADzS*4Hd?9%P`l6@pmfcs-F*rt`( zuum&F$vUm%Bp*vFIkPX9N7ejgJNYElr|_Pm_e32&-|hC37AHSD@i~_!;b@aUD-9vR z+?z-z>d3I}M>>eGT*P^aHhLY@9& z_lol>_X;yBVE+gjx%T&pbJKkDy!Mn(XV_ChoncQ2bp~Bx6zYrU#Lloym33r)k91^x zk96c?sj`mb&1Lm3EE;rlowx34{wYC8->EzM>iMqUBpltMb4T~++_5z}cdX{qyw4wX z?1OX6>Ky+@EHy74Z|(0Bjy>~TrqW=gi%h)ExBI-4HKjt+ zTQHV4)k_#P0@d;GPDdS@6>x+y9j~#S04!dMQqi2Ow{i!SSWzh6TB6Y3^4oH`8f_e4 zPC-%I87}ft)b=$NE1n2~Y0t#Q`_-LaPVMd5@xZPf8@qOVaL*lONn0^sz6J-2Dy z>2wJyh6CHab*DJrJH&!Z5N~#u}rD{pCiPZWYsdbP! zkgPYpHiJjL-H4rm628}HT^o+whwB`aY6eTV0=!*l0$tVho6Zc)zdZ&A+eZ&A*Zl5aC0c!?3b^EquNF}l^w zD8J|y<^1jz<$Q7L+kkkmI>qcJqf_^cP6u)Nb$HMf7ix;=j9)KMM8_o@`y@W-AR15a zl!Aq=uL>nZn`ZN%v)PRMf1R0kbgc*6>&8MDH9CnM;ND}X0Z*r2`?ip``Ac$fRWzSa zt)7^rqX}#{T0EI?w0OGl>G-yip6obUd_u2V7H^+0?3Tsb)9j0)am6PzEo{SJ7lyT0yxi%q=PV-qjd z*u;yEVG}P3HsQbU&gJDEn|Rb%{@sb=<@%oO<&3DsZ<;Nc-fYP$umP`NzwH^QqH;sD z>P`sdmEP?JRWjON`!%)Qa6C{_aE2}^)BRC7+3sWrNaVqmX`%P`?k``703rzbMeZ+O zP^j0}m$|<@aQW+d9x+?dma!$L`f!t*GE)x^``ymW6LfzC+KZzgnYroJccNvRxdQ!|cnqqio%) zQk%Xf47hgfIj>!N&MU#UIC(c{)^zj|VymM5wd;$K?)th;w=I*r99jE!uR`;5 zSsd{*8=5E8d7ds;b?a^A*p<=ag3ap6RYUK1J1<{K&jkIV8o0~rLhc)G#Ft;UgK%FG zbOCHk&|lXg&X8Ku4kDu17}Q0DjUBPC)&m|*7`^T4+yXwH2dozn_l!&#m1lh*guWd^ zom%VA)C%5yuLp)kb&h5j4PZS_docbzU6JOEyvQ4 z(E-%(Mc|w9aJbVX0s+@m^6M1KZFlw1k}ThhS&%YjGLAU|J^$@r@t6e+C?28)U)Xte z8I%6ZG%h;!ND|PxsO|0`@;MqpPa{C*XxR9}&+ZQoazBw065l2h)#|ka^nOb8QQh?A zhE3h}g_=!?_ma46rQG`S?tSc=K=mjEF8&$ztkP|_;S1Za+cKx<%Vz3Z79gdGU|Mu= z%1a@u6l$?p$1V88+2Mu2&m{qtINDdvh+{J~+YBWygo0 z_p1zKN~^Tx&~h!Yy}Ye4c3P;gh z`}P!F^+k`aX5I(^0%TemcE8qhbRf8LoxEnrn3As*m=UDFtzPFuuxN;<2Ov{gyBUJp zq!|QHGT_1VBB%r!TX(q~NDmn&EgFN zH$k!};nuBrC=zAL?i!$ZXKfn0WjfcTE4?}#?Cch*~ zlz4^0@rvh+3#m=ZG8P&Iwz1IEYiGC2V!O=yM)6T*zsz#G%<{o9s|U-hM9Jx!*33MP zgvJMzd_1qdC=wbU;8vtelC&uEJ5r`70^|c?cm(D68G6E!?bj&OxIV_(81!u@Dn&X#)yNMcH;?QPq{D6*|Fh%(FEhxmIrtSye3pPS|qns$?7 zcOk(jBKGT$pyX;DK2{(uNhuIFQ^MVktV6?|@7Lkf`*m2?hf7k5cf7=|4z)=JVy=%9 zLe(@t(MtJh%R?3*Vp1%}_&Ub7*kHNW3a9MW?2emqq48|qmus+m^P4Mq%3!D{Q9be==OYFP3BslKu z<~om8uK}IV+$ZThX>OD#Rgx03#D=x!?DTy`-S%QY-Tq=g-TGoc-N!Bl)R&6^ozZrD zv2Ie1priBBfr1ro@(ycwXhN4&OzoIyaEjw^{a(y%&=xDV2uP7Y(x2?DSiW7YW z5R5LuPR!;&`b+4s8M6~^W3Q)?Y69Ctom8E?30yHqLh$0XDyxqK>fe`9DVC7)l594L zY%AcS%(envGQZ^!i!vfR&^VdZw4NKsszwU$xBf5Y_x>+-t^Hr@`k4QVUHLkz{V()? zv1{-DVzsns;nHMb$;lCa&u~4Ft)RHhb5AAU7930UzR4t-*=@+QDj@16lJ!hNs^1lrAbkCTbdMQwxvl? zX6r}eISrLx=d77PszX~lr>?dadB(nPlKkV(P^vdc!=qiK7ri0B>adkmiHV(jaG`Cw zNrtX=s*ZBn7byM?o5&4mxp3}bnL195GB%CD<2S;Y`OBa9M9zLS9U%D>+WrvTT z6`a3o77;~2iGgAPfgDsD97XD7mfq`VnglTS4aw)I|A7>1cMT)mUn2nZvM}5?P?z=e ztQ}8fl-ZS3MiB_^zhoHK{UQ>s-B46UA+e{Zj8ggmMP(GrtF1BAcurB7x>A)pkVJQ& z;YKM$RY{I9Q@bt;(W)m#W|NK8lenOP}YZm**U$w_( z$NI=)hiUAh2%Kdnv$(MOYZ~wE3hTSd%yZ+N=W|_m{(QhSMksR-`qkh4=l4H;TmKnns7=pjG#}7D=CAFCHYEuI^ZVuPvuZzU_|Dsh zwC@C(`^krh_96PiBZb_(zy9<(RKUPj2v=vo{OQN!%=tQ6o+boKoLbg#yu>)KQDjeR zvLB(#@J~v{%TJXtu)uexN&gvg0M4-n`O~20rj(0mHr!$OC)sYkB16;L&G@I9moC5= z8V245J2EarnR1CiX*+yO+YwN|ZwDu#9x_;jEmu^uCG~Afo^{vWy3k>fT}F;LbHtUW zL$&+T(m&ts>}I>p>c1h#b`9@`iY$#OEZ}$zj-V_b#Swe@Y zRF}cZeZKzE6*y&=RsHSSTdMC@w#TpcqF?XDO!s;BvNW3mboG>D!zLz%t$I7-ZbSR^ zbyxP!&G7#7^`~!tifi`G^|x>T^5f?pT>tWGZ*_C0`@k%Ab*90I0cC`IO^ax92-0f2 zz@?8pnfIHPIdJ_l+EfOXgnJH>a6R9|29i5rGy zUb0roYfwrV6!W&vN%)VmL{wa|x;vU)LYKk{NW%MYS#Z9ZHe;&$r$N$R%!F_{nE{<0BtqJ-bHq2Db;_Y+A~ zqF0JzU%0{MQ39}IDFRqE%RstJ(=32?DYdX4$L8fBWsCt;yg%H^*`xUuTgwFJ=EsuE zMHlJJZO{Ix8EFZA&Iqo;aR*miH5s=v5jF?AgTHOIIdMG5-2fpkq{Vn145!^ghfvrx`t9cKp>g9 z-iL53J%*HHX>0WO)^iAp=oMQ@{5^qz*L7#t(tL#`xz>TiJzQZ}5V)p=EA63{b(;iC{lG)fSVrL2kI1_a0(qH;Ra%W!RTf=I73 zp`ySYJegF8QZWiuk~z##P}ta>yd;4}Xw!S2`U6cpK*q#q5ym9%o0KlR;^CE7ys2%* zfl+9hS}ik0-^+k|C|U;6_Hl>z<30v1CO@#5y_l%b_j;4L@AcrCdBV(Kc$+GSd}s62 zWNzk3Q(;7!w^?W`JDK%>a^W~~6di4?iOS{=U@e%14xPJ6b1DqKs* zz}AZ*8c4!+JRymW?G)0*YyKM5-;#ixaY7-~oY;;GN;Ohk=Q&fujV1w6G;0an897eu zeP%_z8i@mdiT(3S1WSp^2RQ3jCY73hPfw9m3I1_#HK$i3$poz1ulv=9D7QSLnLr~* zpHhyT=>Qt#P5gUEWSL$6`kABvB#JX!bWjfcbk!<=^b&)!{oraVOoSd;27YJ;5`0W; z6Bt1dlcp~~il;KnRcI;sxRl@>)WcG8w3K>+^wJLKSXUin#f{ZfY#tL6 z?%a5NCHGg{Ll_v7%@4hY0 zr#g)X0S8tTL@8JtH=Bc9Rur60ei-nKSFxS=kE$Kk1wK4CczwIIlhTx@ZPlh zfObEcaZe6-j_nA)J%{GI)y?tTK+HiQp*l_r>uiDP8JV~DU@scdsI=qX<{0Ze*SdXY zZtHV@cmEkSCv+mhsZ)uUnu#W)^A2X`YzH6ybq9;KgO7w2`O8V!=C9;7zB?(8Lc@6^ z)7ldb(?8=&zmNa?!Sxu&!Rtt`=}5!tUhCNxM}mnP4L$_a%fHkjxA`m}@lD+E$o+kY zj;0rVP5S3o|M30wz5DThwbA6(J_MUp1YwTM5x+JJ2RH?#xPe;C|8dBYcn}d)Z8w?M zzXiDsG&Is^V=@+N4@p3rq9Z7)L{{*`Fw?4)O3-gGA`b#`dVjeg-lw)R7~F2THsH& zq^vc=YdsFwitRE2F{ZFs^Jos8^i@ch%1p2j{;HE?UmP`4U)&m}9N_O0!|g5pwZIuO zM}k{9tES3C5J^T6AoY9Ir#7z%Y(eK&+>5AO0-FpdcDz2E(=S;gjsuFo#SxrBhmr2? zf$Qb3CHiBx*;C-$TWuIWyPqu4$>H_-2+57fiLoa>Lef9uLqA{lGbHyVe`|QJOdS{e zv^&b7UPjuB77y^@ZB7_qRbPBf$Qk%YqVPorB8B|q@cFvXrvN5PCIKB1{BF8~UM4IZ z(3Wx1inQ@uCv`0S9r_^xcuR>U(MM9xko!P%ZqE2NHlq_9O9`rd7w2im+gN8Jbj%?L zLShsWuVm*^vzMi#oybO0{p7)$_?>2?-8GSa6<^#ml#~QqHgUgeYRJ7?yI?g`Td!TP znv<;yRzq>g+6Ak*-nw8lcRLrX7G&pw)k5rCuv(Pt6Jl>}f#wy^;%)MY?s@UwzNXSt z=Y*D!-84gA?MkR+aZh;il5W+wd^A)_hXh!0r#3x&vn(sg9QGQ}V^{)JTmsCFE`ec! zRf*EEfIJ;kk1|EKn8$vMc!d~*ij#t!*hxW$q8xpcxFIux?`0_N(MNGpFpZC9I?(0n zqc|$qfuRB&sPgntTop`VR|S>Bm};9u_Hy58cvnN7oEdyZ$4!|vq!PWjC1m^EExC1d zc5dCtdsX|nx|-S4WnvdPn$F{Hw2Ur#iZ(ACI9*LmzGrYVyWFXx(;`mab@du;UAu5& zx~RC8m@i7(>XkBhxkm$-+vTLBkkQf(dXq~%AYM5L4SJI?-Ag}!HkzDphy7^qkkPoE zbvXB62bOWU%!7>G*+Q47Z0Cl|mh|jotkY>`z3xP}hTKNod${qV3FV70KjZ|ZD7Dd` z3#pKUPrG~A+7(56GCNECT5URqlZFZp;0>AirR?TG3_l6nC@;Ri2A;LA7g-|uD$xOh zT=i0dgV@Iq#MT)BrZZfQ-K_8elqzQ2rT}kYzh3WNOs1jUBd`PCZy*GQ)*uwnqq}b} z%6yS_g_;igw#rx6%8&O|Rytuuao|0ZuR1LbVE{6^S;th~{s}3@xj|8#L;gJ|< z*e%AEs%EI(HhPpfv}GPjVaTaKq}5-{tZe zCU&}Rz^%7lf=1ax(9{g?;l-{UQ}6xHUit_O5@OvmH%frYrM5X^ zneV5sThgC_f(+n(RaJF=t{IZLEwn0$nA%P{{mN6XtuXI#T%)o*S2)Fo<8(|@Iy;V4 zZUPs%8I=e9>ME=V%H#m7R}yDDGZu{os-7@MIb0Mx=Rd#y@$Z`J+W;$i`fpCw!Xo%! z`zjZ7O*)j* z$<~08Ioq6`jRk!6mh;)9o^8x$)r_CtNVa*MDQ+_kjyw|+&&2dIv1eoR&&KATjm)Bqpo-OP3Ock$ZdnG&@TX;6M@N8`1(bz0`G&V~fjm?rWHbq@WTwPEfP4L<1 z=(Ew$XQQK!X3o-QV`I<8#-5FhJsTT)Ha7ljY+TgkGQ|Uo)=D+0XG7!9h9;g3O+1@6 z@oa3u)el9tZ}hG80Jrkl=;X7}$+jJ)N1ql=@Y&p{XQNZkMyH<5oq9I5+!Z<2Lk$pIT@01=utv1h}3hV$$*oM%lNo0@+`8(xKao3F6X zhG(A*&$i*oSDVw{`E2GYno})=g&szlR2^CHFH(nTQdQ;rF++x3&NaC?zLHvTP}&`IjY%w18>Kjws5kmX99bj`_k zCLp<3sgvptt<*_t6#gaR*yHdgE72`_k8ZWA@tG6;2tQ`&3u?C@l%OSP3^2HY3Off+ z=32ZFkp&F##*>p40qx=LF#>vW(PEM)-aW=7Pp(^-6a~D;FzLyA;1Wf=$H3(&dMtGa zc@N_jqD41x%zKD#o&M;Q*jNQmwR2jYs@4fI+cJD>onYHO3ZhPs3(}pzUsDuOJE6z6 zd#MxTs7&w#|KDcB2_QoKIKz&Y>~HJ?0;ZO+vJN{))%p}beEz2kvv>A}ya_DnsIaIeCrshyh6N*0&G&oJQ zK@PRh6T?O|46>k~wY7$U%gg3|e@1MYB0Mh)Q$>{{N+2eeWE%asImj z@*S=!f=Yp8FS%SU*J%SNiIW;|Y&UYy7Ih))^2JtSNybl#(;(<~FFAZ0?(K2zPH2lt zzR@n191drO^E@LNalx+Y1^c!E5#4}mbrTO=tzOtRL0m;|TjI-;7~;Q7gtiQI(#hNI zE%>YUtY18~0yfaM080HpS+rF(0E~{8YV{3tV zq<&8DN(oCFyi%bI#zD07C7ZkAWN_jdJL^=}&f30}8Ee7b<`O1tYSsMe>D9qyO=?~U zK3hH4`HC9bO>nrX-PA*^urCC5yOJXv9L}(_y#u}5*;%i2xIJ|{Jsal+lV zwKXI*S!?H}qE8wUn&Coit=FFNsmOYu`9N3(&GQJiJ4aZ&PK*<6sCDg1Dfzrkjp>D@_cS>B~6g1c#4P(T@4O(bWEF~Grr>?(_)~tO$b`sV#{wr zl|4?|b zu9-8C!E+`RsWK6I?CqO4f*xx@*tc5tuIDSXVZK5e=KhwS^Ojcw+VaI!)#@6%lu^gy zc;_;LtJ`-_H8`<;J`jO7c2G5C`74)+hCJ$^+Y*HlmndlPVU;m_uMm7u1v;mre|nBp zLc2Qnr!sg#szGl8ReqL<{MrLM1aC@4NL)b#PT>1dQ(Hrs(IEvHbj~eozyuF3_R}r*$zxR&J_9 zH&M`XTE}{lKx}#7kV;Jy%g(yKETb+CnTxg72`h|RGEHXduk%#Fj5_$T)P@01Hf$Jm zxM3W%VJh*sHY!o@t0wc*D6xr^#_Txt#7+NoYeidWJCHs=@O(jY#C}(m?0|+EO>v;; z)lZ0oIvrkS?ef;-M=HVQzDoEQrhJu4LuSK%$g;jIMnv4oBSWAT(xO%k0sftCzhViuLHl6`ibIQq#MCGIzfn(+@?>&~^RbtAmTBmjkRr=5%v}VhLYam0rHp~@E0~9hM z;>J}_VuYN9*5v_d{as0|o7jV$cudk^mo?>Ho-NO{>6w?0uVB|1*9=)(B{x9nuxnt zUGHLzf%DJ1+_f@&K~{6Ku;4{t~9r{zHSpQ`$wCU~+k-Ud`}mo;&TvC+En z@sOcX%C-MGTN^c+Sa@*RSXh-?v7lY7W~_@grI*;GMSDL{Dk)9yWX1V`QFJ5trvie$ za$YQj4AZ#&l1^(~(%{5)Pp06S%B>AvSWv_fg)cUEr$MUe3=*Yk>cIxzRBm(I86-+Q z!(t(Tfy1ztiJ&+VbtXRkJYDq60#04GEJw*}&R=MOHfRePq}nf>i;=OxVeJlynDM%a zEP&TxNNPW%`npg|vjrcgh97ZLKV{|kv^<{}7wa%=>4{jc&qa&MvK+!iaH#TDWatLa z5($l|CNwN?Q3{P~fZz%k!I*6HS~c5r+Yo$=)`&2nx|&c6l?V}Pm%RtsntcmweDHvIXAyU%RefcYwPTGHb-=q)ma&K^0%vD~|0`HS0U;YW zpM`2y*2Z@gGHHYB3lCuE0it<;Dtd*We2rcK4nB|_SG3=>(<^{6Eqk0^AcU)P8+=ti zx6IZY4$9e2w!f>qD^uoH!b-QhYR0_sR_2KlxR3~XgJh98UaRi{refqGf@xn@Rn`uO zB+r`f&gJJwzO~~rDes2HiDA*qv4tT*5?Lb>tMaB-n1w&+nJ6Mf&s3{tWx5nh7lw^S zx}T~hkeH1XYemn{d@mwBfT0I8dbZGdw$OS8&MMqx?iw{CJzL?P*y|ZTxXF}qBud|G z-NQguepy8z8GBhpwv-9n*`u1`x0@hRwHETQvGM>xp3jO8>;}1PKl?R3h3vW<8Ij}D zRiU6Wx0x`@RJ?R9Zh{4WmJ23SYu1W8~Zw(4giqLa->eZr+!i8HT~I$7YL1X>p47(|N0vbTZR zsLjG-`glv+gvu4Y4i0p?rx$BabO1tyB;3+2ePXF{grZ5LXizf?2=Urj58jnV-aijy z^=mEATOJS))KOPB^)YPQMOgfBfXS9cM10c6WV=)ddm+(25#?37mRGsq3YHDW`YanR z6(v}Sle=mo=Cw?#i!}+lZJROUwiyn5*RW>E+HFuuitYe;BM{si_P4TD62f`6taC~W{hvtf; z(knrQyiO_7WGDbg>|OC{C6_vz`4PL>Ttrk3yB%ED-egmN7OK0omUzi^-pr~_3(!6F zRUVptcXwZ`H8`NGM>gXT!BePd!Wv<92*wmy4 z*g-ixuE9SFASJX{e8=kg=C{pQ)6ww-y_{3Uyah2p@UG zMtr*8CC3Tpr5mmrsI#D&gJ|`DeElIVVyR&-HV&mF;26SXTYoU1-!FQ$=p!G=b;jsc zhC3D&5%7FKA?sfvyo;E;LE-MDhZyKzmk`k{o2`4yGN;q8eSbdJ6&hr!iN1WjmkiQp zK(Bum#OXVz#{jp6S!$IqS8_;(7^ z!+=n@*YldR=6uD-fA)f^2LZq2-|zWB1}Tv!xfpV&n&HFo=$lb)eqdP!r&+)oY>^vp zRuDHQ6!sQ6+UwYt0(A=BN;hkDp0#M-`J4uaEbB6gJ|I;y&ZN{e80JD+-?smxT9quH zSMx<)JsdWgVGS<%`&L!=K;iy5pc+x1nDGSe-Jr29P?emWbB18t5<}DVH90km5JsT= z=Z#cTgxNlE@q}+iI11U}kz{O94kTIr9~jOlY6|$bo+fyG9_&^f!?M7<4yXP0wv+!rue2g_7l(W_MP9wvijdJ}?D4 zpJhu$8)&w8u$l4t+Ow$y>I{}ef!2~p$mTq!1a3Ve&iE&+yQPgQ@L?+W`QR$P&quTz zM@Vcqo-E(20_NBr;4v+x@+)uYJ}j-^wG_AZ6Tk=`ycyTbTX% zCA4Z-&gEWmTh%cU(<6__kY{usoJ5ekhRkWHqrU*EB<#TLjuk)OJ3a$Ppi6m8DP5e6 zkVc$X-#l(0bdhYQ^jEN-YcaHEdhBa5uE{7T5{Sn>8Sr&e_8Yb!WGd%hMe=|r7BSzT zk>nF?vob+kKdpnF<=^Up?%@E(iv2K$_~PD3d0zM}8zOh?4zR)b9Z?ix$NJ~iU~iJ2 zG-b%=IQ`eBcyG^O4)BXuVETmH0QL@LuD_UXM`VDBkk7RO z=rcoQ)i}u+bW+pFQf`{-_Qkf}Lhnoq>d-`|rg=A`+z*sV?Kst`YD`(iX~7ebWJNHp z?$tj1u)`xcGvw0qtC|yQoTStW!P~Hl!%#iPCd%8!(K~*+vYRnGey+&=y5yp+fR5>k z=pIX&i9jExttDHpT*f&j_Z%)Xi7B4gLiP0D9Fvbe@k~1=TiMX72#zs5EzPy}Z6m8tcw+st=tVHIBURm8 zQb|#E$-_KVr5JO#Ql)s?7Nu7Crl;K<0dkG3V*C3ePx!;aaC3Q|&!{CB2rNvZ`7Av> zgwYH96!E^8cEd1pVaN_!7GPHQ%k&wDt5)+P+e~BW+rs+e_PG;H%F%}|>jI`%StMzC zllI6^dNY&6k%4qi<;st`4L`L)lN>9~SE#{<6QlbD@tkIlWR#MB(HUc}6|=94dUr&=nUHnRg_HgfOQH9jbnIV^2v@UPMQCkGv!(B^DE!-~XdWSQknr z!^ALeguVj`9OL^(*z!u~GQ1w8pP2*Fk2x;;!_GxMX5Mye%QY1IMBO^+4YCkUYj!T`+oDMD}OpZi?lkso_T|mVatH zhx*8`OP?qu+fvF#^Qza&v){B%wc?BlOslbVN;uxmU0w_taKQ&+9jH8DC#+ziVLP1= zl2!y#az67vK-6%N#C(klvY+A!Z!dgI1m$y5bRpifAcHJ9l*2a^!*I&{(y# ztqxG9HQxJ#(gk(#FDU>OK?*CLyqW4N(Q1u+INj$Yv|d8 z#MKyjw?=c(svgoeRLwy+#4%OjA|1HR?dQ}BUmKAaQl+5~$J-J8SJT1uQ# z@7i0FNUP*$Vgeryxh{=b)+sr{`j8(}=Hmn*)_pX(EC@NCSRejp4%n`*C^>_P^APAL zf#U~#6;b2HfBm_oCP8~#T5auRmhKVFd5YeIwO5tpP161gx{aqdxsUl$R`Sa<(Ce8* zDEO8NJG?6pQBamisZ_IAP`TIuTQuzAw`?HcyOYb+T_d+R*}5a~)ul{lb2hPHfR%Tp zGn;lOtPNU>{I_7rGk|+cOlf5TqEJWL2Or2 z1|fsWLsF`hW=v$X`G6D!yrQ6*7@y2i%!h=90ydZ~^J#2wxdyXnLI4)-ITi(Ptr=fZ zgxp{HK6e%;>R}<&I}yOgI#`uChYfcroY87wWo>xZqtwepxaLfZ<`B)VuBgpO1wgpXAy z07mtvlc_M#Ng_0p z`5(lg{N58r{q0D28D(q?AyH?1-*HE%bg*prPc&FEUuvnl{hxP^bofCaGf_OvSg=GE zHQ-m3bz7D_>kYPI8P(s0eA2lX$BDl@G0OF?@)A6@$5cABj`?ec9s4i6mK5fV`KYmu zd5gBh-(x`*!KA2sjg5s)G|i&GWm3YV$+hKMwSFTH^p7YZfpOm?AY>ELE1m^wZmgBy zehLW75(+w}3_0KMrqdTwMa9D~y$Qum5Rr*AgUUzIT*<0QMM=Zlzs%IXm~Ki{%(?wZGVq z&4+mE-V5E1(>C-1d9niX4_;-kDB?cTh~6<(_|Z7C;YJM@vHVqS=fbwm^7FW8S2C7s zKQ}71l(f#uaBjp{71B-Fty@~;+z9w-BEqy?l721Bd6agHEN9NyfyXSjz7l3_j)O`$ z3KO5f_17IRoUz{~qRSdua!`ihGIYuZ$dy1?jK1=ym($0udwdW$CvT*=B;R~ z@deC_<}DM$@qesABoZ6^la?n80VtnjQ2aVTOH0)OYPtn#It$a_XVjUAm+roaR5gLU zGz~P12~3$_RF(zGA<^oiE}e(QGXxkzt<3#vu2eGG;^q6jk6!5yp9glC zaEag16f$trEtYPLd+>yzL7y6=sSikt@o0Y8nfETxwq@RQ_!H-wqkqa6y|7+<%5=Gt zjX6>;ezFdtbAXLSkdrD#7?vphi#=hk&>#~dCb=>uRfOf62*Ev?8(c19L%f@Ej@2a5 zwlzx`x~p%4;LK61o8|5(FeK*{)#Vj!JX}v7lbn01zbB?LYMX2!j5uNCk9aGsMLa9) zivM!sRw@7qoL^l|O9-#!anYi2BsQdWTtMKF_dEr_RTCcKg=SeNbmy<;XZXk9JRrRB zMDf@C6lp#VQ7No_a3j6?ZmQ-xEYzZ$R~1&+-GAm(chK{+;3s})qa5>vfZ5%zUZK`6 zeS%)Sy?b(PuThOX#UEHFt31|bLfCDDHRpB$?FYFVIkAYT0ddEZd;kuB*Q?|d?hsyd zt5FZEJ?9fh&K50(&jP+uC$!cSu+fm4{rX$pSE-9m&y?9#_#n%VC24B5`}$&m+GCzq zr*|RDY^>nn2epwy6t}tnURT=DDr&hV?*7;QhYVdYZ3}#1j3<@~DVQzy*AgkKpxZ#` zm|FuFgXfMDi&glNC9*MCgFnwkEG;JG7_L|W3I7{aYN+VU?lkl4_tZiDqWxFt1gGd0 zA~2rl6IXkAljWBZm(SH=SrUosamheauAEpmW}I2jsiEQbmH>(ms{0sA56%B^m+*1H zr6aCEv~o)D_3##^_F8@Oa3^2z2xOdR=A^_?({Z;_viy^X&Y( z31Ta5w%h9F>jX|^{eHSlm~Zdy^s>{-79w=>d^~FK1%4F*<#wwHd@%9v9NY(E?ex;# z8isvAif^X%&YFkbN?*NR19KACkzz4LZ~i3#x6NGAdcxc|5szF@%6s}6ppvg^5$<*_@i9_M{L%|UR&`C&<{q*-VxDG?;Y#u{(1Rv^VE!-|HvYf#C>O2 zK%mnd_!Op;de-ax;KOGL7q1deLJX61^Q_tKx_f)K zhw0|OnSZ-_JiX0_{5lyu)hl;S3p1fK63?cn+v@N>1%8gFd>wATBm3HY=689pc;8I| z?6x53ct5S(&w$SlQ6a!OpLhNb$kY)7FXy)b;BD`UJc6U2_j9v$2mF7$~fPqfqXcJ=yu_gAxQl0nIT`)8q8CPX_LwQNT%BZW|AE9_7BDJl!ggMF>@z|0-1 zudS}P@?!?w9JS$8mJZMMhck~6E#i-Nzk5IT4eQYcs_oAmjw(IO_k16BPtWJG=%!u~ z{uMu8H_!X0hvl2$1P;J<7oSb}m($DsBFv9vvtd&VMHwcjyh52|k3|%(y7N9O;ow(v{3G^AJ zLN~fB$mGd>ez`r*UncONkIIo(Y%bfXyePfyX*g7Nf{?@)G?s)K*3)NzLR2lQ966C} z6rZWV>?HtaNbZa1I`+JxsEvza&`;MsvT&4@g?_3bA_dOeYi|>L)~k|gEQC6&7<>ev zm06S+Z`wBA>!koanPcl%nC13Kqwlqbp@Sy>(Z&{;kw*GW;SOU-_uanS8@$-qwZOX} zZ^k81#*VyR+==@}^!(j_@fFS%F~W9dfsL|+VM{5j`Yq8SJC^_lv3qcyInz%^z8|UK zn6!Uy&IpB6BHEucn}eRH?RP*tGg7D=i*oS`KlrLCEtA4x8kgi==kl_etUP4>%5-@) z!@GOZ3`*f|1!U_ z&;K?*_Wv=zv5Bjmk)4f=fvvFdK!AHdjl4 z=p}VssBuP={m?(Nk-o3DEUaPDfZ$(`xj#|5GRB`X0f=U_N2u6A7Cy0UTbGr)>4L1B zT>SlEQS)xoaxvwL_CsI;w7LF%6s$&4+yR_Y$2A>g{qd%Og}6}JAPL>jsiuh%`VPL& z5|}7Mr{033UJ@mBW~9(iPmwT$SZfE2j2T;poyP#sjOFzdL}}d&>Sgc}^c-{Z_D>St z#$(M&RRJyt-o>){08IxQ*PY>#mfKSAG0qVzaKR(z6w&#%)^qU~6EWTD6r8H%C+x5M z7TBas))-K>q=~T5&7{pw|Lv7StNKN1WomTkh|R{CCY-mdAVgOWkxWA7%bpeo+RIwq z(7&T#y$zJHbnX(r{EWRl!SNyJln}uuvV(&mVIDmG)i5QD!iHx{$C#;u{R-@qr{xfj z7p4;2+PnT&VTAPN+HLoWq;3#yQbPenQ(DQ%%8v?}R(pz8Do0g}l}tcrEH{##Io&zsR_Y1=m-0G+{`cU*DG_wbWdHoK<1 zE>ot!`!SXv~PqR=H79pZJ#89=2bmm_saq8K}AT>^PSB6UWp?Uxo#fV1M3} zM8!<0Z1Xc{cNap~3|T9CWFxa^$?he1y| zscz}BBs}I7wQeCQpVL56p~1A8yHq`FoAck!^^s5q7a9arCIssm{)%AP@Dc~i2y&n% zw_^A1f&i>`xQcw0DzCokI#R0mnjgM0i%Y+1HT8i;y~qcW(ZZ6UM%yo9=3cf7EN!{R z$DWfy)d~TgIP+;vV}4T$Xn&D`?Lgfx@c$qSTGfXw3K$5;72JO#3tw8J*ngcXAO!yh zS!_+5-RvB#^jw@RtSy`^OupfzQ&qukogK;dxtg+yY3fgqwEejUXng0Zj|4RLJoOf<6nRtZmkv8#r^@man1mT!1w^ zWFv$Y>`$@E%Pb27X;t~sx=lxmOp2aGarYt}pTk1%@|i?oQb~H`(QWgoQ5b9$=5ZSR zC7Ydacl&w__%L+41z-0b9=A906CB^bf(FY$Ht(0!bH|r-L3byWMtCAg+h<9jPJ=3I zAB=72qt(q6*HmWLtp1H`g~{NuJeot?HreU1VOp3%YM7wvM1$En`_c*_v*3uDYgAsZk(dr7I?$4QA;`I5T}H?<}4NZ2i;J{=>Tk&!gj{lc;6 zX7Es_U=KA2UItc+nv!LUc^74KjX2=W>b3)_54N7XV5jE+Gju9(LQneTHJv8{Zqja- zWynQOIVcDEi<%j%tfy1eZaa|^Vv<3->Ska--*5pIxe2&CklQ zB!X>3n!Kt-M^kNzsj}Cn(eXm5Jt`lI5V4*=vRv3JqQe}4+UbDqqUV8lv=YMpqcfy)J+-;xIq z5c!Jz-p1(?E7&gDuE|}wt>a~%gV2&6uli>W<69w~0l2O6c9@_&-H0ydp0KZ8N z0dWTmErt4zU!-}iz;A&=+I=F@JHFIc+_vT7nRDmrNS(Jd4-B$XFZEynFh4Zj7R-iK zeqK)A7tsmh5wjgl)aRw!Fn-^@#<-5R)0>=4`jn@E`V2YK?K^?=DwB>NS`?TYhDc87 zw7s4_#zRR#=K1a533qNIP>Nsu=FP=&Si_TPduf3h@j_$ALc2tw@6!!DOVQiic(IeC zJw1A1AXWO*b#47sW}bT5-0MEC6<^H)Z&Afw&TU?$vDtlO2N7Xnl=vbeN;ZegGJU*A zj=D!6ft=7+yDujnP(%F$l{R=+1q%iUZ=a)ht4>X|$7rh9%(XfCzvD(Aqx>aEY46n) zRzO5y$=r2C|KNu)9^UY1J987BdtxfMx|!D+$<3sA<&M{&VaLQOCz_=$fCv~Rok17GlRLNG^lm1RJ zZOgHSj$2e$ODg6z4tFw72Od0}^vIfcbe3ppBBh`U3m!0|4W1F6JF3KLD)(ORdT$RL zz3MYX6hE`_R&bx@HYjDrZm5Z(i>s}*GTl$tsw)oW9a${ASJD0@BOJo(h%EwX%ke5= z>`YggH||dntoxvx&vI@ixRO^nTC%yimSY$_yt-Uwv2T3(Lmw1V>_N{wN;NYg)EtKXDxTSFjVtwKoR9CVRJ6C2uK zz z34y_31;72gPNSkQmeE;Bqw{8a&+;*=+!t-}G#U(4ZfT2v^%O#ftH0?1)G}SD z9F(J^)dfI-XPT`k5~uDfs*xTkAfrb-9&&*pC&UkzftS45S>qpoQz-{m{p*gEu3-2x zhBSKJYEI4WQ%BLnQ^0)fEq=DD{>V;wJ>BRAwLn6M3H>YiPx`;0vJrbe|9WuyuAgyt z{zjcB!By;Ky@qf-H;}9X6ON_rf{mE85~vkjVIsjM=^yb-J{6Nj7-qh{OY{4~R40pz zW#-FPGRKvOfLBwTlNO{QO&d^^?-at~Z8b!b(PO8hof|3D)b(#e_s>8C>XPu*;Rm_{ z8%wGIS9o&gy-1r2wE(rzV(6@p-cPw6HRv(~UCeBZ#hTFD>8>ct6YeGM%O?H~osu9S z;MHT(3rBc%>xMSy`D$%01Y=Zyw>$V*y+tjk;{8_rg89gmNoJuZv9&)fWFw#Hl2LNM zJ}R|rz0_2H^I*fTFKqot&`}1+8ftfzhbP>Zxf^L!KsU=l zrx3i1NjrZ>NnmIPgfo#3#&klqgQ3}iR%!0>p%JzH8iG1)(clNzi|NG4>Kcdmllbt% z#rogtRHM(Uja1ctH%d)2>=^Ndpoj2QDQo(A z6@*MOhNWI+bE=|x=4mwH3!7qrD*0J+@`wztaM=0j?hxm$PSG-e!BfLr zp^Vs0k=F4|&A>Q;n^13j8Te~@oVm_Dw1HL8FF7GuM;q(UVB%OSvvGt) zD~4wL2n8$E+@jD?VUoy8TbP;Zz8o`MDXqP-qFy00WIV^b;vLmkgmR*zP+kKLDH4Za z5p@Dcu*QPVkt8PcRVcpoT*^)u#1QMkJw>sR_ zmXoCqxBXWE@-IRJ{Jt9)t$7ALRe{rdzE|Iq$t59_oB*LHTO~fb~fo#?p1Hd zLZNn7dLT|Ea^37_2Mq=cyV_K$P}PoHg^uTdydl8(9~YNzq??9o$?6_344GrQ(Iyf# z(5i74rxX;uNLUoLRQ6~jDSkx#>Wb4;+20tWF6vaj*RpAHGIv zqY}aF_zFL-ZHR*qOz? zC%9Td5IG7&m4|VXa~tD2Map6M82--Ra6 zx}d*D$5)>HfS^s5&$6k8xu;x|{cNN@PSlQp_>$QhOc|!5@Qw6S#2Uf6D54Im*d-5^ zUWLd*~ARGDh&5u?jYXg2qa42P5 z3K<@xzPf;th#cV~tLF?2Yo2&%o*7cPl*X+~F$s4e_}8+M+FMboW2hC_|P|sEhqrd)(?W}aDPNx9tfkuwvVAh za$w^eziohADh?G&TvMLHt@p-l5NJj6;6!S%PQ(r4qFD%DDD=0xEvP4j98FE6asDfm z&nSDH+VWvyxG7{r13QpQJk(=L9^+^YyGX(?%{9fPw>6WpmF+7mg?Da(pq|dG6s;U` zvL|J;xp4PQ!Vsh4bQyLki3Lu&JQ6hlB@5e58v0+r7ZBxdCE6OadtY*4fuBaY8;gIR z4A;7$L;Wm70Irn!NXDZ4KX2M*+=?LTLdI5>>Pwivrn;IPz^1+95Yf|2Ux5S~vo#H& zt!ja`fhAPtqoQ86n9qAw6rqp5iYh|F_Y~0SFY6hJ@ibns~Kj6Bb>Eam&{;1jvgzvqKpYOB%fNm zdF0Sh+(tGj-fo)7F+>`M1|%)a>lVDbqct4i92%e=o4RHv9g{yBh_z&ldDXamjs$xb z<;xPqt~*x z4BK9yy5BuQmS}E4JY9Ms+Ds3rK(5{!hq=25Bfzi9;&1bOIys}km=-*E%f~ka$qQvX zMQ^KbDs4vM8e+!kUvR5cKUA5o2?0Y18W?eXt$H-|=uYGn!9`I^#aWEjo6RJ(4D~IH z9C-#DP&54UHdmw&(QrZOeh0{)y&`y_|2ppNbymD>nv8!pNIP75-yo;Yaf{w2Y&7a- zU$fb>dTq=XUZH+OTSn8hW_>yM+4qEi@b`m;p^di~e$&aOu*i#t0|o~2Q;V@*>7uFO zl%^%9-l@&LV4A%jzPsNg$JC9^bt8)%UG16xM_fMcGRhfVMEy+G>NTep81*K)w-#Ey8zs)rb&C398@0ybx}($UGi!gwtH$Zj zQo;CI%l7v&Us5d81~aRkBKXToma?1E8ZvBS+26r~2V`G~E8nkz?xA^s7w^xk$Kji- zyXO=>#4pg#th-@%;Zn@8)HAYpadc`-5$fjUORB(zKTB9qhp+;+iiF${kP%Fr8HM16 zktuzCu>xK&KMixNomTun57nglX<=~nh2^sGIPmaE4cW~m*xdV*yO`4Rbm47+xO1XkgK)Or_fbS*>4%)| zpARgRe#|>muj2x;+>@<#Ar`Dl3O1=D zye9X+Z%us{tv*~|Kd7Fbyd(M}4~8PWeeZC^c87D$-A>bn<#MLeol!|UZ@7sr!aG32 zz1;=3c9Q9X1e^bS#rBWH8o`i+VQRy_2gD-w=FE3r1>((k;o=8Fzx1hqMEw3^Ua0CG zK)|w>M8L!)*YPY!&>Uj(r2{tVf6GAFlb?%8CV1R-Ey~&v6KZfFoJ2n(C`?Zbbzl7< zI2UMN@ehdXC%vx-_{^X9u=VUifgtAk_RRw> zsB$~>xw$Mwl2Eu5*wVA`p1;53fO@`>qk!%M1wc3^ioDcAkLMdlI-m{^D(IpOTohDx zDnNN$*k!=csf$+qiZ-exV7A`vt~LS&IHKz=Kfm?FVwpehJhPq(6mPwB)!`+t3#I3R zxm>~gO?k=1@#$r}byN#;(czNjqT!`oL>*7QAc3qByn5-3oL&`0)ImOId2IAuw9i1B z<72QKRmK(x(OR?~YGz(=d6d}A(y@u1ag5OD@319K6S27|1BM)~P*@9Vy(=>*LHu}8 zKdj1KPl3i42edmffs)u=o<0|JyY6@YCvN2-uz0kC0Rf4{{qMN7H-J&@zvI^bn<#KG zwl_1er8loko|XN71u&h`Yx{!DndE;3HB~{Ec@4?QAaw%`9$phg_=FV<3V}fk`taS&n1Iq2Mu4rt_iZ-)9fKdp=phWa%9r)VNiE+M5p{I_c z@lf1xh?J8LZMe*Mz#HgOex;F!O$J4b02D-AksofQQPd5+_Pj*mC43jAnn_hABL=*y zVc<&GbMj8`wQ-UuC}Q(iC~x3G14$Ur^TaYpPBkp1j>r??YEk(TnuT@Re~FC8@&lP; z^Av-}eX!vEE(^;v>ohrKY%%=|5O`z+4w6b%wR9XREWYb_cOw@5u*#SJ!_sAZX8OJ{ z!-@u&X9{Kfl-|&*I`ILiynw?-53Lsky{&?E> zehnq{=JBGc-6Xps=Ryj!Gr&2Pg*6%|qHj)6cN)`(Ud|r3%6&~zLL9tXB@^$|aSC1@ zGm78hBeU>w@LJdU9f_m_)>}f3Qc-#da)f@UEX91N96()4D$*(c=dhxVxXeVuN#&~i zVCOt&VneyLdHK$fMCEQqxSeN&Q&@YiMdv}3h7Wt>Bc%a&%CxpOEVwUjzhAC@<#Vo( zB|;2Q{P`hZ?3elV<3G-B#HoK%{^Q%(q5s?24;=*mm$Re(pG(?*vhm-U_-G{^t8ZWT zktGD~3hB)u6&2y-TV?l+)Wu+k#XqTRs4q8_(0asY?0mibN#1X4h+0K_Y9%9vaV2bAm`?N+Ly#7b zB;YMQgFK-Y`8t#cs>Xtwa5I|L#{tVh2@Hu5Q+9gKpSJQJZd%*sf3VPat6?*;wqy4C zQ=983NBW-i&Q0`YvE~^3np?H1)o{LQHm+0wvwJ?KUftfB(e!Uv=-dQRs_r>d)YE`- z{snmBiGN}963d|?=$(>eNKLipa0m&a4AH**V=N|hX84YC;RC)d(9jTXB3b&Z>nYB} zQ*^3ex~j$khNRJ6Y$s%Rjm*h;(h`{6yZTh(@^SbDkIE5XhzW9+$d)`8s=;Z*4ZsmE zB{aX|ZibhMXUVfzX9VIv5PAuN_oYWJXZu^S4a7xxOU}qJW=M7%1UEO-ukWfaB-D`% z0budF3S9iZs=x+{QvZttfd5}!VPj&WXJKpM%wXc~tY>O%;ABp3ZsH!LqfvL>67z8# zz7@%-^hu#G_m#2$7WYS?&gX0?QjPvy9t{%7=*NdZ^NN50&G=k*VhgQ}hT)2#&W2`+ z`{KE#)*A5H?@JE*95{UrwXE5HbbHhKQV$ewy5`TX^|rZf8*6N7pRHRLZloup4d4qC zmy^PaUYhaJe(TYGgv1v2iGH|PI?WZ{&aOtQGWkP+O>y2DIzLXp@M?6O3$)mNfd8x= z8S&ZGc4Wf%Eb=hc*cx(ja#1FJy6(8%yBL!MVmZY zS+%p*`B}CaM$jE?>3%gYgb&%g-pT0=3Teh6;9!rRg_YrG{PcW&Pup-2&|+szhEEW~ z=X>g<|B9FC@`|zMbzvNukef1*SyIo|SxueyuXF#sD{6S64Vc-PTP^_CFA#X>d}2w(V%_Rlv=rY<5;%V6KDV z{v`pnIQ!Q3Qh&et;p1(%{`U5<^VmUWmIBt(XXE9lQ}mcm0tr+aXs;?-kv&5M!>zx)fYGT=DiqqbE{ms zl%67dn}*Mf$7jySum5mt@pYMsxv+l6iH=jX?f66t^nP4>&Ne$m_SMQu%n~1-Vr47^8iHIZ#oSj*gBJhzPsx_W*Ls# zTPJa1%j66D$$Swz$;(KwyVEC zdKu6js?G=whrQTbJ${zbgK5EkI>eo&<{;R$)?ial7A?-yDw>X?jJZYp&H3QUR(Oc2 zodVB3b_gxE;{%gN@~rY1YjVPMs>~e`?yHUIqBMu|)J=qV7>e61W794$0yv#GLr5BRi)_FH+gFyx=~v*?h~r zX`8b3rZD(+hulrTj&bI@AGfvB;1oSi$`vE|esm7|ryx$T7j!9D=zOy5^8GT3>4`)c zVT815nNpxijPi4r6aBbrSOQ@sWwjO~`C7l%uZ)u3zm`+cE8>vp`V5KgMYq9v$iHeujAzk_>svd?t{mmMZ)jXSlp#vT35Uc(I;G( z9mf65lp1t9Rqo2piEhy}(ka_g|I;8wGFevUsK(NQjYH8gMnwy-oO<#c9s(!Dex6m= zwMjqsav3o;e1|M6$E}}p>cCE>-r4cwC(Y*FR5;-pN?hvVsly%{GSnkm9AGjC|4Ugw zSdP?H(U;080#F233y7YSc6^=-V2^(fTeRm?9R>DVx<_$^EL(P%AE04dtn`9?ReS_W zYj4RD#U--W1W~Ql#>-S4U`nwo{a#6{Q2e=AXf178?A}5?BtfOhDVV9mSY}11?Q$Yv zE3q;Fy`&*76q_JDd!5Bst(5Ol%i-)b6G^*^TOvR)$AUn;ygGR<&BlM(G=*^P9e9So zTae8&AY$1hqJe0RBCMtozNie9KlCFe5h1_L5Y?)3O`=Ru511G>++g<%}>=5yu>J!{oNBCBSl&i-(uXScS?UhfCLx}mg*IFr`o$Y<+vuclw4fLve zCVL@l#-^K#NeRNtABK#piYNUi508#qFpnVf<2MNVf{q}2Q!JGHztE=|2#k}!4d-^7 zC3Zo`Y3N`3^b}yxh)FeS%R$Z+lM*UAY(mjvo36IcrO`6+Th1RDjBNMbe2e2xhTuiD zLFjRM>iLqYIc>}CsD&z6A0EpB)XNpr?(KLf(^93#M~X~e)>5vtM*?Sju>Az*vf0v1 zU)nJqsBe}9uRDrHXw7>B{haY|M!mJvr>Z{)HX35}8K1-PXob*jM;*oUBeq*N3wNBG zOBK9st*9vqWpTR^^QEZNZtXjd{fElog~4(X#LlW&Ry&2>%kW7xn_ku7J*%d_``2N3 z7J(nU!9DFQ+=1Ctu!vKeBCf@bOZ7x*$$3s$!}%D!mpcURX(ndn>jAQQr*z-@?8Md6 zYwI6tH!+*rTV^>6c4pMKQ){W3^Pg8&r1pPJuPrS44_&>!&6wK4q#OsbsPnN7K}HVt z<0B?yS=F$#2!n9V-14K*tWsR)N9zsIzU%dhi_qkZ=aHkLBFtHK6IN>8?lX$8Pn~Fd zQ4R}942g1xwE z!)lcVdnkpQ18SEF_|+4az{MC)Hg2kd>Db{*Mo@ntlWIn1U5b~W_;d=RNY$rH`Lz-n zl)q)GnE0cVtO-hty&8_(&5T0FXNm9s+%tR@e%E2_T@;&@v6$*opPnP($^9uVmoD`r z&c0?_RF%FTVo;F<$b%`*%&2wpna~{yF=`C`6J4xG9Bmwk5ZtieQ-$1r!Ure%Xq52# zqx|;x`izI|34*-dbl*iU8Veu=l(T-;B!m==E=I1uKs0GD?=zoZGW030ymk^F?NXi3 z7EW62=foUuy4vNhp^zQpzUXCGpU5oC(R;4$_xGY%bvw%&jfD0Mo76u37$(;)~W9^`})8Ia5h~$fR+g*&x+A4OQ70#jRQ4G>oK3AvZiU| zFmSf3ASgHKt>(!;__y>au4^%pji-}HU&*!lm_^KJYY%5OEW%f!pbj`3P`Eyck4D8{ z)F80cUk5!0-$mocKlrhx zVE1dN@ZXB+rPlz$m5HX=_M)H_ZD^-;gwM9U;uH6GuX#RC-P@bB1-4-sg)i?hu`(Lj8Xl-T4Mzd|_OdQqS9bt7d=wnyWP`+z+I4;#X+qYq_Oh6S1A4U5c$CMRT!;Ujs zd?(QwcfA?bVp9~pnn!=BWU{y0T_+8hx%U~jxX!WG@pXj>b2fGJdphS_E=q`f0)10pDo>Wt%uZ(`LiRBLn<{=CSnz-VoyGwXbWyo!K z3S(pMZi9Ihja;FI0wZ5p3BJvFoDmpJ-DC!-qwx<2F)4uKb<5>_@Sc6pI?hn)c{X4# zk)1xHw~3#0-zZA*o4GvmCyS{FUm^b$u=!LLR#1_773g18r=x~2- z%B9Lng}!mj{*AYwr)ZL`N*`w+oUF{Q%5wvkU^o>L1*yl;X z=|1vfQ_i}4nM38$m1X&u&^?F4%N%y>-~p}ZF`>7$OwaaV^h~=uCD`4MIUHP#?axiI zDLGKxvH!!SWNu1(Y|8Oo3Zr#k`}>emXSjS~}G1OydRTrO`y%-!@%BmGc3 z(vO|vL@P*C8GqNs+_#+@6GhLb<4Jk!+_}sXrJz6miJq~}XP8()6-hU9PwpTa$3J&a zm9ws7qjCC&VKnxfA3Jz{-9c)(XZdxkb~l&~abKs=^Y@7jjs!wFXaB}Mv2~w?Deb}2 z@O4-GVB&`@sYb-Wa?kw_LgGUS%={#OR#F@f^{wg;MTu0&cC+#E=ccF^rW+z?d_LCs zTHoAMbhaI*`@H^P7#oJ6w9g(sAF>G(Msg|DzmCy+?8IJPrf;Y(bsqaUkDX(_!ZZvq zPrnU=s@fH&VQ>>Z9^wSmh5dsC3>ynt!S&?Nxjx6fq`t`R04uo4Bs72SB$)YS@j(lP zO+D_?j(j87}HSWJ+YuhOY~hDPMgBg%eB*P`_rEYlEJQuMwI@DEvp1wov z0irn@rT&8LR1CwJ{;Xs9>C1&m?4036zx#3t$w2tbxu^ad)68T#%dZl&gG_Pm_SY@8 zE+S!H%pAI?Q`}Nr)E6?p;h5iWa?Iv`9u7$2I36BY`0Jc29L6K8^Q3S1zMKP|Uk$^F zjvro3grc0{pWhxp!OP7!j)Lt5{#lVdV#J)^pj@!Ko#LP0P_A;XO7*9AiQC<5$i=U} z(S`>nc>Dux1g`V>53~_T8;ajp!Xd+mOLY=aCz6jaG`N(N=%z@z*mMFUyfl8r?ccF< z-uQDmAJitG8~eP3W=PN8@>2}$Cs9k+#dpId5kfZ_1CNxj2^%K5Vxsy9UxD+)ivlNO zxFieYj|f=-Z24JYT8AZ?Dh#Y0X2>H2S@j*%_ z<(UIyI*?{qx?ueI5M553NvOJWybO#$piT(7kPC$A-w1D#mqvzLz zUUNt|gUS)#6M8>XOxd>7rH=`{9wPBa_gFfc&@_iA-;rKt30M>G=j-O297g!QgOAOD z6IIRDzt&kFIH=4z{sYxfM~dI+`MF6X zB;cR_rnM|a-wN7 z9$Yjs-|CS=gS43;ThQ28pz&of*WRc@wPkry6#qP2LN}DF&P)a#DyR78DUR~6iuuMJ z^lbR&Y)NQU!YdCr2@D2oN}~Q;(<$P3za|TF{0@3nQ@(H9E`&37uzBMbePPw2hiFT4 zJf%wX;pMuJo)O`7ihusEo*R2sdaeUyNc^Jt=^(o)Q;2^ylNp?TLQKvfY^UCiDeV4e zl!$9&V~Y=-i@~7`#W^O5O`$@i_~#{CdfUhPV&VulxO6Pb&s88I^&lb9UnlxpH&)Zy zZj)oNJmh6#<7?_!?de5v=I1QCY0)eFZjhvtcJLTGvd^61pQjyc7`witk6ny*ina{@ z^8*Vneo}0XX^o{iGVN_-CWzNo51IaaA@> z(Ddj1VM0%#Dg7N$Jg4~Q&qha{AKtj#rauEe`&vSulLE^;8!Latn3vRfxB6mi;t}5? zPPgKpYyVM`De&1J^7nZ#@Y0>BIg$?SeqH#<~p+f4u1!@-SUNf5(9> zb9^x3kL~Okg$q>?mfnNLKTfnH6F>cPVvtTe{A;>rujSK zDNgav@%6|0`VLg5Q~Yy#{jv9)9}jcP#d^-Kp6$D(br4AJ%B_KGj|EFu<_V8=UTyZ} zKA<|R@^}+SRPoQf$2$KpzP|5lyj#zYKQ??PeP7UIfPX&J6%+-ueASVkNzEqWSSkM5 zXBUiXN(SLEOIU4OxX#E=Ve+inDUvpW@7sgwEJk9GTVk{wGjEHe{&ejNo5G0hdRfAP z^rSFhtMz!wkAvSUMoG-t6lNGy6hB%qjl)H~R{zQt+hII;q6VZRkF7c^43W zHU5l(0k?Vj@IQMF!}JZIiOe2X>iJ??y0Q;_)LmaOGjsMEXpr3zbKI}6i<0`X;J|;+d4zn-!b-Wf1!}N{sssoSL z27Lqg=a=8;b-ZZ9u5}uQRO}J-cN8@1#<-H}5|tzh7v0b$;m zs*Q&=;)-;Bx0-*$8in#*>85`}@y}aVfYyj^0Ak1=zdkH?rJGRN&rJPeg%*7)Fy zklxJPam?4_R9lZcIinMdS%uY5h2Q)FozV0!{4;v2?;gZMk9TD@aG?#i84j; z&tnsQaHf@GMt;giKNhx##J zITO`O#XnDx#;+Xd03jg)_LCz8;Yf^I8UERd%m_!?@z4&Alw^X8we9dfx2J%AYGVM^ zxSjb{;1fHTi?W2bmb=GU`=TPHsXA^v%yr(upOM#QIw-ZU{#~_QYK%MLgB3j^(HFHX zivI3U;mYms*R4>^HVbM&8^iFZ#_ynKjMX#J%i-uIU2J^Q^D-3HDGj;^)iFe}Z_`N$ zo1#&s@Vk*LU2r@6&nVymcfqMTXl2hx=XZPit7nY4fcWLAAu?{1j zy^+5D+V5cz$LNTE<{urIc`f%tbagh+bFfB@V|^skQdLtFo;#O7XA@E&l5Gl#Nr0I* zKkeX8{TX9!KlJAj^iuPmV~*B1KBJ?W4P}1PZeCL7SN!vmCTx$mS?=Ho@?xN9)!5FK3rd}3n@MNwL{fv+ppvo*4^LF|Nb zu+4Z;4uiRlj8cyseB}?4jXjDRjA0-j_G{iCQw0e^Q2aCV1}DH(?u2l=T_D=p`LeA9 zIO1<*TYo21K=IEMKwOmy6WTLGg-tn@sps~3sDD?xoT{4QpV@;OS$_A4k%!1~kGo!h zAr|I`sH{)`9bwwR&IZBxslI-O=Kdc<7 za2Tjppu$q>7Tl|FS0f>m>m+`|5+c3x`L-~*qhlCK&sia5)9ax#fuQIHzm{o&^+o)m zi|Sm^^JVeDddcfQfw5ihZ#Ozi@z1v!Z`*yx-h7Z4FcNUwHTd%v2-m2}#bJ;?Kb4a` z7!^iU?+GKhOn;8h^&@osokf4t;c#&^j6V<3tTSnn8tId{%JNB?EFZ*jLJPKA@y|P? z)e^V5Id>Zja3dbW0SfZ#>|tZ7zD(`85g2pr~Ve>uT)F4lo(x!C@fYy)6@syjKI_*xOe9UJdo> zCieW&pWpOsY9=dw>PQPV}+G2p^L5M@hwLXoT=U08Cuf?K0w;T15(i}|^E(+kWC{_+djJ?%=zR%$K?F=4VjcfU$ z*S*9u3bq@yeGxofcJQdEKnRW$;II2iKwQF|ji2?A21@HO3|RDD@z1}8aZ6q_j<*0B zvH3|3uD*2>mOVe>-QdTZShsN1!|k~m&wSW$%r+Ir4vXH0^0(~Pv7a1soi>Gr*LyXP z*X9-f{OdTelauSL^<;RQMj-ULIg!KIr_=o_HUXHQNB!p~vA^vVsy)H{brG?N4|_$8 zN>n59R{yyx)kf@l-XA9QZYDKON*MG!5&N6I5w{|h?e#BRlxGn5=O?kh=^NNfAN{n0 zZ+>BAKSvgcH~e$jA%MOQCu8a2jTgNMr?2m$oDiZ*{;vP5!=O6VHOaN`1xXdCxOvqFxv6!keOO>KA9q z=-I?B*wmC>x6PahNK~KPKM+4qLmu^?Cl>qQOx6j-aSHz+=mUrGtoQYuGr`;AQ~GkO zh9fvzZY>}gKF$7(UuUs_nJ4NSf5~p7Bl%RHviobnl(9j3>WG<1t+^;GR#x~YEM zPxghll~3^3oqz2h3NL%B|NL_YtrHqz=^H)2cW~tnp5J!xweFe2xF(tM%U+4-8Q9@p zGQ|RP$XfLo_FzQguK_xshI}6US-_w_0(8{ObC}loSAY&NAfGL%2GP170XnkWZ1lW8 zVr%aJ9UVB?^k<9K4U6X$pdO>tXpHa`;0cy*7t`W#;`wk|fD?0VKqQ~_CM1~5X z_~!+$W#}(X-(>*`Hl#T9bgz5~Dq6^E^JT6l z^PZ?Cw#O00^W~gqfQ6SM8u52JofQAf0?W74deDXy`N8Q{n!j^NztaYiSv>I1wq#RH zvN!J|E2yZK`)3wOW6y{WK42r0AX1|p z5iwt(KhuKe8GKwRadLvh*HKZOGmBb!l+p8b#*2>Cm>({k>Nt#TYE0A{JtsuP(T}9~ z=Lwbk^$m?X*rx3kYv2WGHXsm~Ott)!&r^L(USc|a760t=nFWXROKKq;>?`p6?xi|x z*d)s*#F$smGuDLj3b1#x}7ry=IFpiwFLhg6K^nk&Qvm7HQ1K{*^{>tbl)hsyT1e#poHa zVh1&6nTvK%qe+~g`Rnrfz#rX-s2V$t+?0=cj98{%z%2-$0oCah{~TloAGwZ}Y|n=hS7U#y^P)2RO;9|r+sj|~CVnL(8a3Oo ze8$>HKno5s-QbFU=9N`_o6nh$Dl4di_!a-WG9%y^7LXDW8E+!s3d2krOi@Mh;JWdY74T^s*%SiOidYr-&fJIm5ZuGoX zN$3A^yi5%P)$M~n|6#S!{NKwzkZ9yEhCTRYVw?-D3B^DEni%Iozv#YwV+F5@S5)Ko zf5D4J4&#j%{YI*EqALEGbW0MwH%V1fW`O#A)}MnQ45u7vK1@|@XFbL-`v?J4?gNY} zpmqgl=trQNpdUT56Y{#|zSG7sFCi_>=Kp~7i+|7tPq|~yR*w;vfqZVe z9;6NH-17IvaX!FQAzJwd+Mtnc*O&bVZ7={j;h!ZCIKhNPrW{mS(AX+>PI>fS1QAb) z)qmch3Zv{8McV@342{QT_gf)(OE-8%jtexunXypW4p-qW-Me@_tf>~O)bH0`}! zo0`BF7X2Fs=sCXDS!!TA&7WLv1digLf4v@9Oh=#j@rVzir>Vf1c-tC%G6(5dKrr@@ zZb}!rM`JZKYPkpf&pwC+cWieBZzqXPNh3B~x_!Ap>7w20O{jJ!b~U$vTuq9`#-F=R zeh3K9s+|$+A=a`ChmPL^`bKVdJvHuJHCm~T4jjcl+f|La31`(vjU|V7B~Su>l?T@9 zKQ}4;r^iaKj&Q|kop15RhcXHRYarb&lhrGWix}vu9Bl0|*+aBpfqypIuyt0Con5wj zD)41MG8F$zPoP{02KCZ5rPvNK26RH-*k?lG8-%`XLw`nfcG~ItGW@gTTKKBv>8s!bt&)hUIP#r}>uLEZ_QxSEP$zIf(hxy4 zihu4qCfJ!uV^Q9K8!h%AMkR-V`@3bSoq(gROR{q0GpuHob~6yZ0>wX;p zSdGSE*!?NuixJhK!QP&>T`$r`W2-NEmO!*&nq~Q}toTG@!#}48dr+eA{WPW^VffAp z1W9l-n*SI0vp7T6nSc0ViB96Dz=cQt^7n!52Q>opAB7>x8|2>fgAs(w;@v?mRhK`? z4eauIxsko;6&j_o){wsOX@&d}j&kh%Q~m)2s)%PR&5*>t;O*PgnA4Q=GJ#$_^He2P6$q&RY^e~rN;x6TEfFbIckxlgQQI(3!0WX# z#`Dye$yITUS*r@b^a!W}9N@%MWY_rYlEyx{&Z=*`8ofUYhp~TY+*M@#-0=xWMlb^m zjW)bCza9okIVk=)q0zE@{~V3&T8O_JUmWxGrSW?XI4J=YHU3@=aQ>k9=l^QFu(8r} zRA5;*9u(|6H(SxqdukXOmQSP7^Hg$HCbL>Ihkytu0YQ#ri}$o(DY}hW(BHQfi_l5 zDTKc+4E(cdhy|)zF;%U9s>XP7Q;eQtc-twu0ntjRQNsE=-)c{r-sjPIxrU_nA`j)x zS{x^c{6XzuUyvqxLZ5~dL&|ngvyCFn=PWl=*HNtF%*Ud)t)j8gb3W|u;N-N_A0;j@ z@(Fpz!Q{LdSe=}-ai`|haCeIN%mGf+VBFkvB=J02v2wekpqO)Sr{Ws)sBC(Zq!!F^ zmQs9ASj_*?Gx7W$ATeQnKF4k_gt4TkQ5KY|Y#Ojg+q}MONp-w|!@zwL&-KmG5^;i! zJ+QIGQ-pv{Z$&bbB&ImM7EX(0CJ%s0P|nwXKcuH|Pg~UMJ{?yHzON80->RE)b_TN^ zT)ZBJSoG`}_&T%F@=>&gYqEzpya46I>OW(w9Al>kEqb2p=!cVy_s0%;B_ZpvoByZ^ z%99ezzhNap$5>Chuav_eV>J9ThQZYk*Qc%qhJ~b|5bXXz@A!J7<2?u+v+gLsc){vF zcT!vrHIteyU6Xot*-&9!Z{UFi{@Ioa>zbV2x2KxFX}fF;{aG7FHUBf*E|y!vGzA;1}JGm%B*jL*Ttbf54~9>fsUEOK-KXOtsbNC37|G2h7o;k%7m$J zMEJPGO52c1wOguos(LeOHu>=MbXC6tRc30yZh=H7W1aQl4Y|{VlgQG`QABMvU}&a zSsPb_{%3f$HNbmsl0sSP$}uC}O;4cpclou;Z}%;K)Tp?(DO7#P@iaFVrd2-t3yIP8Ffe5 z4SU=$oA_MzyFtsHI#N zZpyR%vl5CUgQSs;DZLp3G6zh=W3wdmm29doHB+}F&t#*heSM5n;eoH z4s+5^(uU=ySWmx(gRH2K?7rixX|^kU2369c^WOQ!CDn-Go()#NTs(kR>g(ILUEm{4 z;Iyk8Gbw_`*hH|XB_@Q3jlqvaq5t6L4AtgQhO6Rh2ov&$vpt?2@mi#pUt7bYNsBL)F+$i_m z6!(QPrvde!zZ+njAiVLR7=J#J71sqFcQHKcOf)@;(R1%L&HBcPl5{3x=r$~W>l;p` z6Kn(d7wEn84Js#P);H+7?_A)TB`viA!#|&GH|M|B6xVR`purQxbniI zF!0ZMhox1b7tQf(lLiSWSE%rBY!=QDJy9dOx;jIOaRvz2Xhq(5Lw( zawOoNpDM7+r`7;Yv!qpa zcQz9QAsDx6hJt>tTbC_Vs1*O)IlpaoGNn(9noE@JsP%ukZiL2uh>3-_6QEwW7RypD zN)u1<&*~J_KL*u1Ot$PJdP>o@4m?uldY1qd>(+J8weQZR-v#52T)d#3n$CBeYPVYC zPA0eupmnuusgc(ffPWSg>2_%7@9LuMl)|ar5^Dsn4-#EXf7W!=-#3SF7|Nfkyk0|m z3Js{y?$umSdyiI|;-777RX68c_lN1>1s{tusQBlu60S3q^(9nMM_&P=(!s7wj&A?v zE08*4B21BF5mxf&29vJd^6;RY0*FyqANY-PJ5_U3ucgSvO|@TI6NZ0=a3rUfOOa>( z%-DqCpE04&lM)s5kh3Rz!ijT_HS@vw;RAJ$N+v8tp2m+waqf6UgFu|8&EYd zY={rqw&JApbw7!l5mdN`9JKn+Xf&^HT_#lm8slaPmUw&o*g;Ngg*$8XtRVtUD5~XM zXnFGB0zDfB{#k+)eFvL5Q3vmnK<;(`H57n9C--f}mwNPIeQHuG*$6uG-uF1H*04G&#^qBaG$CZX%fb)Nkj)L_^nRSOCr zJ+JScmwXiZN!t{{-rdA<-#xOE1lrgq{D$q)M9Vus6~~CoC<{ zfg+jaGGFyRgwyxeZ!!Tv!7T=_+!WXb6{0bJaMloCs&T~yF`*gGtP`r~pg@FB%k4U% z8#Pfwv;09Aymv*Q{)>0xLJg2;BRx-+{D+4surd5~KRi?+ELvIvje!>hjKon8RULa) z-vN`sgW{jf3%`!q>$l;XPj!kw&^NFEGs*`(M(Y5rfW$10OSjIeVF0%=hXKyxm{ors z=Kgzv{UrElg8O5Fi*kA>R&hC#j5(4qwss50FgbF{?8xz?4d~Art(McQNHUcG>P*#y zK1T7{z$1m*yEEKcaE{P>srYAlN_>`5p#H<511MLp`p-I8b#OksYFwp^o)!Q6_U?Q* zbg&x7um{(33OJ`A-HaW@Iv?S+gXSnZn_&daT}x%#>OY@eGcBL%-St$gHw8WFKhujQ zL26G!Oe{|EM>k@74*2U9ZiaMetT)JNNOXE*xZ!|3mk7uq-VJ*1_p1F>(h*1+d7liq5iY&)a!epA_-uxNUq{o{A8yKW)dNfTnc<)5 zNFP4)HAxXj;Q3d&XBGcU*=-R=VKVz=%-qB@L65{gKV|hxJdd7dePhD5KB(`+={Ec` zNU^VTRKV6Gp5={+jmxkmZnW&A9q3<2&-D+rrw5E;$kvU=uw!X`Y{ zTO7Ya8#@~#zq>;1ITYIi)lGbgG8}?xM*Zi`9DscgnR2ObX1D=J8}M&fgch@(*I7KV z2X|2QXN_`fVxFq=Lv|GUoitvlP+iv;#-^ZM&D6IdvUpRMoHh(7ov+v0I&WgVt@0)$ zIz=QMXmv|}ugX_t+Y05{NAl+IbpWbtg-SSpZE@6pHjP{bP6dD7=%xh_C=&l%%#$sH z5}7nKb^RS6-iZ3o@ZlEpXq;$=XsZXuZ2Vc|ki!z1xzst)hSgzJ+qje=+EO%5l>AJp zeLUsj(pfxZ+Z3*#al*9JX*I;DoY^z+8%{A03Z!47))*R_#2m4>&>rM5!ZwRlJWfvH zYV05+8Jk>3prRjTlF6qR_6!H*BRV=sS`CP<9P{zi>vog0x;Y|YCGVKEoBvs^6Nd@?MI4hvExq|a#4*aPMCblN90M;J9r65aQu^NF7)oGN zfargTW90Bg#XsNTA-1pL7(3|Fe~aU=vvK}Y9NT*H3_8YBa54gvzu0hM6dA&v%^tLE z{iOtsp4Wd+0%3PY!#|%#e9CN5Qf?-{a_QiIeylI9U*1Sap0oixlFoWkviDgMH16Q6 zKg;YH8g3wRD+>JY%7e!})C+m4V1bQUAIBv2K$eY46YWg@Vgy zyU^I;DF%bGXovf7y1Ic#`PJO<5O2|7QeF4tfm$$L!hI_;Zu7_UT3GyKtfu zqR6Ri`3B}RT><4J%1@E=iH0l#5M9{(Y&7<@sl z$zWG|lrX_tAVnxtf&Puze>C|VHB*CnUAXc53sG9fz5S*tpB%<9DXuo5EveY(T)-5o zvt(`x=sB7!=^S5Z_Vk-1za@19rMhv<>VF0eh;=L{V{E(SrZ;K@hJQv-0NZVVSczM~ zZHSDF7-C(R|neVE3{ z0dPWj-}2V=ZTsEWepqesuKzq}VRj$ZtlJM&Eh0a~c5aqh>E3>>bELoSFRRUi$r%3m zEXPc36N2v);vv-y{Ii9DC2@u8E>XvG3)=wW#W?B}nEl5n-ovO#TxZ}#H3(ov3>7P_ zh@b$K#O;Q@VWAL!Xx?a+gN={nMzeH7;S#EAdZC5|Mq54?S`&(Y9_VkggsNsqc|j{X z4JsnLAx6tj5$CKLjhi{f#3adGLp&9bj65JiyJOZO*flG7v-rvagRBDV5v~67SyWZq z6oV}yuz0*l7KAtj?{w?P~STAI;lrA+v`nBqi84kaE$ z`K7B!y~JPz#6OSX5sg8vW0S_35DwRUOolHBc44Z;QDB1TI_s(+`z$8t8_NRAk~HF1 z31Le{uw!5@CKPs93@BlL6s-Vp6`dfe2gk(wQ@~=S)I-%Qg#~`n;u_LLV>17<#e7&j z7*=t&0}Y@8utzlfvsKR1t2$cOrK;+8XW=j^$E^HWO4!&nITCac*^>3N=dwx|o+^am zpCzmd#Dc02>q5suQm&dvb?1FjT8nbyFT%iX<8j+@fmci;KDZi3(gL%O=&5JyIOg%A zb0Y5({V;FR2$uRU-VF$C}MWtG>AlQ{ZOQUM6w+YfZ;l_|S>OWg)*1J(l>g==Q27M#L zUsplT>feAjjWCB5nOxBTQ8})&&r2E!l8k|VIzzJQ&x?W%?2m)6sz5i?`2i*a{PPo3 z(+tgW5&A+wpYQsj^7|QKW5sAK5FoDPB~pfESI1e?D&!8HQRYU>;u{H2A&Kk7f5$`B2L!DKkVrFO2yeP7$2 z-g$&ff&)Z9mXSZW{nk4uQxyL^X}L`&^wK*J^@zpr8&OpUS{1VSGIm)#Q7`FOC_~@q zVxg<^y9i6-MM=+1*L zuE}CiJ)!|PLF3Q$__hkS&(RtyCwMy`-#$nBkyhi+Y5m4r=yN2?T~V*#;ee!g;IL@^ zuYdFBsQj7A$$IM>yJft5@nU99aJC0&@k~8u>6x;7Wxaxz_fj8{JGx}-)SngqOh7lC z)IOhL@(CX4kYQB_`t^xNdOFAk76P=flAc@fgBISgO{7r8^^M<9nSBZ(Mgn?>Ab@=t z{`u_k_wa)sFI9M)zgaMs&hY$-h3`E|wJ#lx>UZF-h0f}g{8?0B6Bo6 zBL`i^h-;1!-nh>BR&W0iU2?eII->sb-w9Q@O-Cp&_FQ!b8f-3FF`}vIx|F~MFqj1H~60mqaG5ygX4zL zkBvfeo8p7v9Uo*AuW=Z4NUO8cM%TcgnTu{@JL^0OGQ{oX&rZ|JsdsdHf%;ve-M!8E zgYdk5q}Ks+61OQI_M>Q(&%(3E9dps}&p8;R844@iF8U@RD)wyn=QD-!s_zdsKqYNhy#n(I{Bi>@v}*OA;S-=6puOAx)V_ApH=ZsF`UvP20RB1d;Li^q z0o?)e{al@QY;5-+THJ)b0>7Aj*d>BO25{$i+@WubB@@es9x6uCd0+?rdE6bmZ*`u7 z2FJk|cf;4Ip0Q66^a>Y-Hl}*H!@uDN0G0%m45!EF<}Nv^TmD;2SN`L5u9T-_M=ZR(jG6p1!93DKT%)Ne7dn}6eSbb?Ut&@$2{M2TjJ zihuS}t-qp`J*a47kZb>rue+6PajG&lvETYLIsR_!?6_59 z;Jza2KQo^436BzHj#~m_b6?e-sK{T651P`3e-`!9E>nN329vWYdp7>;c6wT8PQ)>9 z>^c6!m;-xGU&h=wN%f4*w-tbe)SlS#KL{WaQZxTXbs9t*0lBBLf@JV$^`G-&Nn0{C3&T3{4I*n;ogUuwBF((Dn!rQ*0)ql>5n*XxCR&8~4umSXx1JWGZz>6Ng zPdU*ntvz+oucw^Bmj?U>;@sd!d6oJ-cZFW|d_t3H{gvVYG*`u%E$5?i(lgbA>payn zmq7k^YXUtVgPtD>Yue{c@}P~wP3q-`L3XY|K>Rd44x?uu|EkJGN15WEr`Iod{Zo+z z)fxU-st6pvr4^%isQ>(wRwn4vL8-;~AnHF4Pqw>H%5l(nO}=rAdS8<#`|Z4L;Liu} z8_S2Y+A)GKD$>UT@xfipBj}<@v!Zk5`Jy9mg$>yP5B`9u;!NLf=uj37ZL$ap0fz z$_Kc^hx-s>19$7h!|rQSP)qq$=8fk6`JJBKJ`)r&ZR5%KpwX{)hR)Kg2IV7if`~ae zjh^@Tmsv`m%=x5eM|vI!BC1Mo7;!pQ9FAW3qXn3Q7I>qh?7Z`>5|axX-CODdTgRO* z@g#nORvX`Nu6MwQNGHQTXUmc2A7vPOSAPhzT(K$V$hXo$M8ZqAX_KOoDpDb$;-7C; z+tQQudi_qgj^dy1KZfvZY|cKO6vaQ^e@vJB@%|pwv2$`Y+Oy~V)w9!Ka5auc zOIoaFLtgaPYm{SJh1Jw}DO0|%+_xTupQBEh3g$U~;!#{tNE3^uUJ=VaWMkqt zs_D<7$8FHQWC_{uh0agN=F!_usk!!Z2DGF?Vd zH5VNPbo4t^2=!6m7-=1IoqhkbRVlVA06l7jcGcfxePt_qyG(W2;ND;>s=t|lLMaL;X088p(w3AYpdj$?XJ<;K?AHE zX)a~Q+aib;RcOLkGFH*IIcQ^fxS~2`BK|o_Am3}D09Q?86bG;tHSID4jn!S%SYX7n z@Ke&wQ8j*uHYG3FL9L8V$5?NS;<}i4Kx5WNf>-!a3YTxVxEk=+dDZSzMWc63GrP2K zEpFdPiho}8VBQyJYeDwKN$kyQgbY-t_-COqEy{7&LzJ|AXHPAQ#m4jf-3uxoyw@E* zMlFy#8h3$z+SME)yX7(vr|uUdNG1bW=otJc7{E=kd)z$lK1+sw#);@XSL<09)Olq= z-tBBW^bKO;_e$5Y40@9}pyW~VVIm~HzRU1yzB2<=G7{=PTcWzau%mk6g%wBy!Ku^l zV$TVuTev4*uc|(lP+a&>EGl{MXAi#Nly77K&bnx0UL*94r1)pKl|XNQiK1orhR6JgZDFcrLVL5I|+E3DXMKX)w+Tec{F?*@Y*RFj6m`PG>(OB(4 zN%!iytf|1Y(%Ylo!@|NuDGdIsa#_`OZK%*LO4Ppgl1C$m$Xzg}+Bo^x0d8<itJfa;Pu1Sk zjbFQDmNCr~s6R_STiCiZZm!zvrIMHor<)#}py|(hXHh}#-Mucajk+UWfu8EiOK#6JsurrD*vRY6Npt4GM#q~Jdq zUt_!d!kd2aeb_002V1>sBN%U=sx$Y`%b_BZa~uZn&x%*XJxlVrYMC@{&d#1ab}&Zg z>}JCtHya)0+M-@Bl2<~EQY3z(6|Fv^NV4Znx{8u?W-xGDZ71EwPLglLG;QmzokV$x zWc8o1t&g2disVz?hxlM3{@ECzd8!UrnDVK-Z|4M|KN}-7_=vDtvRvhXRMjHr*+GT) zy!A^0b08!O@v8JUkDxMd(ae>pi_&mhNEc1OKfBT_t1lVr6%7u`wxnWmg781@&2AXl zjH$cTn7Tq057ggC5qN$J)=oF=wUO%M8B9!Z=+7neG5h6Ct_UJb?Ggo?LDYX11I%i% zu&myqRd)0?%#|`Ffj^4@=Ir&dBAfcGEChHm?>HI$Ig7tyg_Js! z;Al5T@94@$m@Fd8DHR9kkE-4{@Ftpn< z1;e+FYzO!^lH#A6Saxf@@de_hbQZ*|_lONxJvQ4rw4 zwRoG?f&1m=?BpXHj4vEA=Dp}dLfd^5t8{-b4K)z!S~Rd+ilctCaw z9iQS}SaxQDCe~*p7ghZ8r80USH6tZ^W<>x=P~iYvrF;$T%kG73_#6zf^FUnrsyt?l zaXGW5$-tVZCXV++0c7~+ys57VRzzLo`j&2Im??b_qMr)z8+71^EBUZ9D1vT*vk#2} zR-@b7iSPz1a)-^4b;oua{#ov5kR@7B^6#|urE)SRi2M{koO=!n&;Y?y<_H3sD{;YBBzGOuZvJTfG(&vbarBb=?n=r6H zT$fVnimuK^mTUE&&r|EzmIN*5|{{3NjLtvThHdQ-v@s#QUbRdJB>XL{KoEZ3st}YUU7g|W;Z0o zKeLnu8KObvbiKQ|v9nT58ug!LW6Z!+AW&PTz!4n_^^SKZ@Hl}vZ+fw(`FI`c<)%8~ zgGGB>O*gVD=Z9#+={Edx*WcO&P}nFMt+ymA^C=w0W`|=XJrY#HkMa z#iNb6nCT<&KxeS_N! zJT%MbrFGn&;;bBUH-a|SUgv?O05bgZkAq6V1pISaVGjo2_$jT*9j1&#hNPAC>zL`% z8y|YvX&|jgjyxI{qq-U|MXrklw2_|W5NPxi+dc5lLvfvGf~&&_!oWWp@mtTF14(qO z^UyaW25C7<+w%=8FNI7i{B>6MS@@wsi)_L!TiOA&ul1(qb-aPAAjeH6PGy_*p9Lkm zaY7GPaEzO?(mMRlBpf}c9FBED&D`og=dQ%W1(Ab88IOtOq8=3rP1b)#ph!>5fpnQ; zFmtRk@y~6b3{e$Zlf$#6j^Q5Or1r9j6Kmi}*=~E#)mugLk|`$lF?k8qP?H(> z=UJ_s_=w&IOxbPt=ZB(tH{uzjXM3CL^S^b_!Q9z%na2EJ0S-D+UpiWvihusfFM=B^ z;^fi|ePi(DPyT`XCX&^E#yaEDyu(;RrNeBzCX zj_FvviGDc`trkZkeS^L+E@wjWP`p|0#&rI)-SL$3c2yKdeyy2CC_85Mu6eljk$!ah z3RZ>M(q*wT->PX$X-y~urT2wc$geL7Hf1;d+~tE`+W-tgNkL?RC2*7CpXni?$E2UV z?K;&9q3$lgND}eS>hvHJ*IMD-DsHjqeGOc?9r`nzAk>xiW!vNp;yc(_n@OdT5aa+Bhp1x|6uorxoIZd_DKiip_Yb_4(H9n-v2ITtnBmQWUmnOsTn&$gak zFMf|(z3=l-8tDfOXK*K;UyXBk9UQLY?whpB8&>wbPZN~v9IdQ5L|xE3{-`7E@IPA= zT9OP6Kykn!X*>^HbO*k!!6#!3Qtrn?fKG9Zq<7UlkG{_KE~Fs)^xSMaJD{$!@Rt zB8D{{X%*8W19KLh9d?R~czp&0M&nuxpBeu7-0Qdv0&alY>(i+b6Kv3*lLhCEw}GHm z9OO#(Y`gOZXMN5Dkg;wg*Di+u4aK_M)#uRa|Z z>FvgE48}-BYN*DUJ%8iRZx+lLeH*9wa4(gujyD3&pW6C$H6|G&UQO=c&^JDnzoE$> z!zeY>V+^eQwyX>Xi}!ir$x$}_0=XJ`TLu_}ov@?FUVD`@7g z)8auxSiXg5CT$GmJ_%AH(C)9pC7gW99JZkUZ#rj*5ujnAc+*GtFa1@#(L-$2?Rxh~t5Oj$P!K%22nrVih^&{nt8o<{}lwy1o%B zhcWbxLxWt7RWcqYhdm!(dLF(-tP1jB({X-m%ICII93Laz9c~`y1WY{+a%H8ObmN~t zw!04c-oXk`|2bsMIWR9o@{&t)?Sg!ii-$MlTcs2Jx`2Wg8qw}n_}PL-W4F;?cMf~- zB1A5J+^vIj(WLn2Y$2D$z;_ZBz6w(z7A<;)#%U;2Zd2^Afj)|rUy;5XGmH}P&+3<} z6>h97*d;eO6p>Dfe}=jf37YQHlbSi>JAJt)oOspX*W#G8_1=zs2q1!LPQ(WxBqPho zCfb9NU^dp7{8=0b)b($Fs3lsj+`*fk#r1Zm>kX>0I0c12M4my#KQE`^6_T+r$;jW< z);EsB8LL76^H$c%i=-HxCf@EO)j@x*rq>Ov010MRpa?+vbXxs7^GiLgiFM3{$Pm*_ z1h-L#)dqTYqj6*7QSZx{pK+|l#pAUNW_~^E^P3uP>`Xm_Iv1jbuHk<^3s5f;rqoz|*{BuQRW4Zc#aWus4AS3N=!#_){y#+`GDG8&{ zC9Tpd*x3eb82jN`sv3jYoTlQ46Jq;jgy{`n?ySqP_$j-&nyWu(**te z3?>@>xm!Bbwml8%8%p3d)ShdmXT2+ReK?)ejmV&_;-9tj?R<6dx#$Iz^s13DD*pLx z+L1*2k}9qd8KCI`J*#GjZH~|e8hIa055+&XrEAxNfZPzzoG3DyH9SaPfrKOvbxEU8 z5v^sg0xK$HWrN^CzLw`jF`b@Khsx?Pap}62>#xgR??_Oh{zo*v{Tmw$-kXjA?b_;& z#)?OpHe>AEK;L)1?a)~1nc$gV%)Hxl4x1vH$`V zp0@gyB@`dPKb!Bz!e#q9%aUewxdkN2`zG?J|9nsEW(i%f3R3PL?8_87^TKa{32%|g z$za7?ja^scW-d4A@qR<)c3ZZT-J-@ATQ^#>youp7&(%04(Z=u@k`6~?EOX4%H~N81 z>UB6iLs5x6UqcR#&lvBhhnS8P>ZMiiVtmReFm-lXn-qd;D7&FQ?{{!(>1<2DRT+^o zASCVfHpZ)5qJUq3{59(hmnP^HzO+lM#=Vxodgda)FPe#e9yoptqvh4_$6&b*@xg2` zlf3FxF}UH7MI<`k=;od*<$=cVKkKYH(OW!QWDGI-?0^>~CSE1hlv`tYDj-pf*1dP^ zZfxrgh*4(!XQYW%tLbzE&yr-Z55V;Q6)UQW_PQq^c2Z z0MFI9{m-AC)}ifk2M=S7FlK_@#4-ZRIW&3G$_Xkx54VbeX>L!-acSuiPVl;wlLnCn zgow<+Th5~i%{+?Q5%M{7{aGNf@z6KKb0>+BmkCizUQU`HgeuJneqUIaUM1}6r{LnM zaFPU;Yxw7U1ue75icXS+#`QkLut4J}J~&a^tuu-6T-X@#6jeg(UJ?b=U$fqU3y(7E zKS%YRB27lIfQY@R){A3>`p?P`oZi`4>r?+o_jcR0fH~9w=q6*FL>w&o>~H_Z`INNo zE>U-JQ;eRan90PM@~$h{jUAZ<3vFdT=(*J4=WvhP0uN@sC@vWGiQS9d%06GaY*!nw zvFaOb=o^)O(H7k}z=7Ls`Bwg}F0k+8B06yX4c2j1{4*u&v++49ZBkk(9o~8@@-@?ihq_%A)|BgaTX`qfEzrA^ourl7{txOo^hY%q(I%`Sdv-#MB~OWmzQ2Q z!aCD1;0(#3PQxH+K890Hd&r-wStPdA%P-DB#iRz{cEwxcUFUlCnH^PVh zOionX$e#dC#-M6sU&mlyai9IrxNjmy^KbO+KSwC_u^O_Ih_&SieM2Ozdv3cM>yD^& z9{6XUrcF5Q=0!$&aS?ou@Ygleu3)Gn-u_W{z;&M^@f(63|D}_joZwxLvDRVKoX+cg zK6%yB54dGJ$J_sWQ`cdof6#x7VJxPRSjy6$Mi@GdMUxucXTc@<-PP@9bR~t-@VM=r967pde zDMe1Rbh2r!peh@i|GA#C@<;uSOGqwcg^ERRR2IL^*1pWDCLZ@=GhLuRC zoNoU7Ge8*u54N9F=$vt%ZX`)J*(y0M}H$Y^j&gcWT__PQJz+ z9PyN-=^9q&Gu&PY@$sVSivoUsUZ&3b(-FnXYCY27>*YF^OAjjUCeiebiV9ab8=imH zSSCGFO#$9+IHQmqoHP0J!-+~804D_{ys`n&3VxC&k)Hdn~)9v`~#!Lu!CpMum`_l)CfzXax&qcZx9||&-g4^0r1Z^ zS_nBcN1Nh>)HiPY^FenOm6RKxg2F^O-}M;hsK;rAN1D17*2e8V-#t%26(U47u7>%a zLmkz1(j6WazNwZzj#XKv?RMwJykl2sM3%~{&$HsN>af<*j>4Wm1GGz+Jb*yCAm05| zJov12e1^2L`p=Mm@ST77?~wkS%Z*36RkOGMj!dSc7uAWdq*gFk1GZc7&s|keZYnM} z;};T*SBQmbjPSVTGU9`4U8v*RI*68~@y8 zt$W<@?gy`E5;pY28k>K7(7 z5u4EaAJI4rC2-O&a%yw&8H$P3{2OstK8im&H-EJe85_pqUH|zDPIMe(j`_ZC!no)l zpef%9#X9nO)AOy2e5eu-Kx>`&#x$IV{(-<;UhjCyt&EU=P?!S5n^FH+VZjIGAmQ&+ zR>)*l^5>lMr?RF;CW z4~~SIP72Xm-kago4&EzDAbFr!RQbA92ua00Y{W${X}& zosjPgD(s=YR|gpxDis&4`8I8@=^2Y3VIB62cnUP}E5mnwm#P!tiA~vV-5wR&xI!vsRh2io9N3h*}XrZV2baQh7&u@HK}- zv=*&aOR=IfNDRrqKX-nJYA@|su1R8@*TL05XpiV*EpaqgV3P7pC^ek-J3mF>!Mcyg zt?^Z&qe9pR$E+;ru(2(tWo3(TF3r5g4CFFmGzMN&sJ7`b)nXFT17wTf8F9LI^i)KR zcc(b4{9rDWF_naL*%d}8gN1ux>qARW&?$z|M!b6j5kJRH<;3bjovJWcrB%(wvN?El zL3-Zyl@dZa1F4f=^f7 zLD^9g7k+rC8tUb0V_B8EsM0!$Dp7xK;LmND%3&d9f5FOVfn%;WD`<`-yY4Do;{7>^ zIRXB8lOc1}cDv8&Pmwl=0w60; z{PVk#n93H23q9o^QH{C_22fEh6fBLt)Bj=B%Wn6XNX0a^X$v1FrUs7{P?pb~f#G{%HR-LJ)%jLiiyMNJDY)q|x( z8t*Q`vEq7Db|0p1>?`Vh9gqNSF4PBnT|VynG(9+zM}DS$*LtJ0j;;Rlh1!vNfwP;> zqV)_CJtqD6vofBJ{a9&;9fseqQgn9a`ZVw+JBznWx$)2DWEzF}<~Pw-p!nzL1X>2bCC&rzK$QnF+p$ zr}1Zz_uk;7G75ZFd@fjL#XmRxs1<-5Zj{u<`pFQs;h*v2V%4t^^pdu_WrkKA@a;N0FoUWuw5$Cwotp>e-A&YK~W2N}#V!*(s|bxb-0B?s_7$Qqh(hlnHY_c54%V6E&3?;?IhI;Hw=pv zuJVca;IbGv%;D4H(?IE-YB4;JpZqn`wdD&*a#R{vRVRzPCpt}cLcU?Sv-1F(V%___cl{#9jzUdM7Ws`L$6LJ>zk z4ga&sgJoDe#=N7u3)iaHsO%Ydq_aZ3lq$Af5njU1gkjc*0#JqZpB*$8&$63Rn$AG# zj!>>*cYhh$Z!{A1y^FNfR%sZ#>P%eB?d?_4>Uy8oCS^}At1L};a9QZDvorXe*A=ct zdGfl@zVJL0UM_@semzb+K`V!`{)3o6N}w83^KokUw8)rZUmcTK%7XfJtQ!2Rzzf>g z*%*~+-W7OhU09)j3yr7vpeU|+zNxHJp!!@3dp3NXRfx5^jPzPcT2N=-z41jtLj8>e zHGQ*P)4s4=q&P<^^bL*pjf>LWdIsenN_gqTyUSZ;m{c{}Zjh*(^^NLmLN~L49um+v zOpPZcWz>O|;UH;9>$y#8Pg+Ioi4v46x2^=VVR30vsP2dMIzNO=u446{UoMMcnO~7? z4ar%>v0iTc;@6#J6Pl z)1&cbr&_!(Qi@e-U$f9w|Gw(?i^EX;Sy@S49_4HX(0iqkt`+&@WM`EoO8n*o>6(z3 z(h`#;C|$4U96hwKYYoA{$!g4g(DW5!dwBNKP6%mA!)r3z8J=^HtQ;38LpVpvpF zt^AJ(PWb0}3Ga1RPYMpKPZ)+AM`wt?ZZsa!sly`F91(uNeM$GVSI=Kj46Zj;41th!7#+szS z!r}2cFC`?w6$G*bUaDRO{<&(+@JxkXFFZFe9 zO>RvE7q$A&hH2f*hpTFQ?=khpiut1(yeR(J=+`1E>_B zIu+>mc5CLidv7;9Ck6QDLoZ-0+aWh3h(xxNB54KUfrSd8D4o9DPVp%kRq{@^{S*S! z+bLY-YA`<7?Ci<6)wVgTUUA7`3lj?)>z*Z#xe6a zgOTwR%vDCJCqV*4r%2;PL-wlXyaW1cadkv)Hv~r2c||U8 zHNc-2Eh6y>Pg;yV^uM67-4E;4duA%IxRUJ_nc7UWtz0_9yZcgY(Q7iA6`q8JU(~|K zu}a7v6#YF}AoLFG3n3N}=p@mBe;zqCtdDeb{wzx5I?N?CfB>eEn)jV|ZNP184C@d} zTr7L`T(8@iY7nDQbD{49{TrG3GoUYh8zuiZ6T|(OV1|EV9aqnM89Q7l$(WC z#8qlDr*##8JqFT*e)yTI^my#2+d}Bx$qq3yi<^N%5y{!oUKjEz=B)HJ#Q^ErEZ_~ zgH}_s8+Xjmx*qhm!O>L%iQ|r)`IIdq!JHDoHRBt~Mfj@p#^itA50L9xe~%%R!`oSv zWDF!wJv{B<*q%+C3NC%-`2=~(hXz0L96i^NJzUs21<7}mxZLBI^4!)%F~;awVwCvU zJ4o{%Prmy>k_mE4*q>_g4!D|49dCvsbiqmY0?CBR0Xa3WGtBj>pj#Vl+6$s z>WxG7DgDVb9$1Aolelv6CjL39o^2A0s2RwmWa4pvu~Pp@#_=gOF_Esm>{L8#GwkVvn9fYlVV>-nIdYs&hE&PU&qV8;m`{{{jIWhc{Fqu z=X^2*dY&3g{%0Kdy?vyEfr&V8)>|FIKQ}his09D}^$-r+2nux`)XxVSYU~VMYz$ra zH9?k)L;TMxU61o4BDh;7r-iCbVf^_c&Hka8&hf&Ox(sUj8{H&uQX zYm;LrmW1Df(1u5T>Qj6*Hai6IvMS1OKyR#Sns8*``LEdSLgeXF)G0k8v&ZqzFX0zL zc?a1aFY8%jlod_qS-ilQ4FdcWw8hpWlOd z%r2Y8up)V^vhv-${~QIU!w~no+u*3xnDM&P8;Hdxr0ft-6fV$&aQt&bx9(T#*Kw+w zSxjd_H%tz`Upu(EePN9{d?(ZJ;D>qHW>n2rF0jNT4mZ>)=HQ4u4Bm1@^|h5MB6X$v{+<$SA;XSe)O| z4gGnsjYV+dl;v40}lUto~O(rorlU;+~^(pVw=+8wY)X*{c zpT`^*M$??Ppq}1g!9T=?&WHG)?Fk0YJfD0@Ggr@Vg2?N*s6Hh#qRk51{r$qqO%&F5 z&oXnf0>YIptveE;7%cwh^wa@;w&$}KB#{27$ftZ}W_mw8Xzg``_adn6Q6wcMoeB~-Mh z3Y-0}tj8`vV!nI-?!^V>n%n*FL+gxu_g&}}YbST^q%}f1$V0H5mS&Y0$^We5 zGsci8; zP>p#E2SxXq^Na862UJckN~rD8ghz4^-WMoO)4MeI;rn{#x?Fdd<@{wbmmcJQ{(TzR z_=`=m@W~ze`4ikRPs%t*hv7LW&z9mn1?LpyC|yGg-0TI zSCrX)S!&%$GJj0`vqM0+3EwFa7VaH=|CGA*Tk7ogk}~fEzi2Z)=Bnwj0l|UV^Y8k8x7@t;b zF`Lq{=BKj0I{N`7sM@fyv*GqMp#XvOaOxc4xX`D|DC??1OL!|IFKob3Zuu124=P-UIy4DSTW&)5$?e zgo?8c;-4dHXn^Sfuzp%)S!eKk{J~{*k_1NiHJBRd;eQ68`+6|j9tif$($byG560!o zlHq;mFRGK`_-6+3)Q2~#>vnf!byWS}aq2}nfb<^AeX;v(_WPy5l;>#$P~(f8%cqyM z&h?jz9`IH9EoW8`b@D$)z&w@-ncHSre^x9P_~$Dq!n({#TRYW^g>?xM@`J&z129-Q zxTXbb!LBCY)O9EIvvH1;2{qcL)4q6}8%>Dweol9>z}Oqt&)Ap1{|E5TmrWyrZpJU5S0siL>tyyLXAf}^lTr}s0AL&u*-_wvFIsRE0u|HRZ*YTx% z3aWDu&sfl#ISVPG3IX}N|UMxmXWCA7339AItq3veBV~@&b(NPfh zCDfLV)us4zMw4DsT8Xd*bA&HjQl+r(Wg1kO5kX6`0Y<54v7&0iKS%AHkrm(u0AkWI zyozrK|2)A554L9(YpJKe;rM6akd}mif~Xg4?oP=}*W-qM2HY$-Tg6!C-QsvdhjR&) z(0BZE%m*!*ap{Ese1X$|xW%+6faCaQ10CRG*la^~oI%PNrLG|eBM&p1}+=deP{ z_`NA4MLBN8>ryKPn_}(S@5@@GAjuWGtgpMgHs!}=7%Xbsjk+{}f6kyS56<5bE#`>E zjQDU+Zo=`;;sw?>@X0|>X4%)__~+M?7d|;K^=Gm&lLC%^9)8L2=wpXhQ92X*(Xc4- zPEoPk8}T|z*m&Kb!-U^J!r|iNz%zJ5o-sGa6B(Srh+{(}F1J*I|4~Jc16qvsy4nsJ z)`Yqa{USRD2j9WdEdlz2Wg4vZ_Y%ZL;z?i?u+Lz%^NJ?m4Ej;>sVA$xdvOc|nto%u zJxA}lk1E#}m{tJ_o${jg%O2sjW0h#C!OZZv9qR|esawNxXC(`vYc+PBl)Re;@^Ym7 z2$Y?{D0%h<>yU-M&JQhYrXDU7Sp=A7h{bT06Df6aUDB->e=st!ANe@WU@!^Y{8% zIMM7oy8k&sp3$y_85_?)?n8Ub)u676us4V^_s~!|p=|2Lbr!)$j`b}_TyJQkX0ozd z8g0`wnpMK1$tM$9ew~=>j#h6B=KqsB=-TpGjq4f$_5RT5AL7zE z{yARO9P%}2yH5KM2{#u)1+wFxVK-;m&2Xjdnvg%pkaAwv`GTeM!gfFt$ZeChQaen z{KlF9Tb1>tvUAVk(K64%KUi*b4v`{j$8wcW}O8n+s_7Pbr}W9V?u+uV9G_+(r}mLFalcUCW$=om~3 z=Iyn~Xd&7#r|>#f-_j-lWBEo-z>6kO4cMjGbLODzz}Rc{Psx-2`8`*C!*u_t3X^k|FbSlyV$FN527LW=AF)y0{rt;EyefaRLdG;tw&D4Z^TVNV-qMIua`h^ zF#N$5$ZZ(yQHYtF&40M5tsB-=F{Ev!Q@%x%UMdhg?r%LA_OpA&VZzSn+)USlTGa8+ z>%Lkves~YVDR2Pc^jrKElX;mYzV6HQu)`qNgUoo2)}e0Oj2B|X(Xl61YkT1o5IQN2 ze}>-|KWNp*ixs(g40YxWcqDH)FugYC1fRH>cCw}>Z?nIZS>wFef86EVL6^?&i`^J% zwEcFg5+{>^fA)Vg4HT$yoy>P}B{Sst(35v68I+m3l6lE;^uWq36dAjA;au z4IMAqOq+z?@z1hcc)B;O&Mdv;4ZD#CV(h<#_;By(;y2dyk7+#pt(5F)S$KX2tBOgPY{q({dHwPSyTrB|f_bL!OPn+XBCq zSFw`d@@0al#f@z2j`wpl_mg_SQjc9z8WxiG%r2NhPzT5ziEh5OJ{!yV!dKKSPnc$$6H z18*yf^DlGG%{st3xVM(>a7zZK`1{}r@he-jk!z%P6pYI7;=YRf}m@|qz3^VoG8WdGPbUv>HT6PBWTk2LL|=mh$iy50#}oxr!etGwH&gZguHUF#DgYZDKSeYN}zmatiWpM}1`HkNY zevyzPGh{80AuwKc{IkE{j(BK41Wokj3C;+VG+21i<)QE@;UR!pKb|c9=YO$sB}v^i zwdj+#G6+7Hpb)&)ZB>cqkLF++at}O7*EykzeuH5!@XyxB@}BOgvFZ$`t0XnhCK+j- z_-FHJ(2A|hejfTp&DrtKB9_Fa1lD?3)27R75m=|08|B&b^22n@ZEj4O6HA=iv^M|> z`@rP_RcoAZ9K5}Bo$z!4WYHbQ;Sd9!!A5*tc(J@>Wb@)=HEQ%U8|%9r1!w#{%*UqL zTgUW_1`GcTqDdUoX)6Jjqze5^{^!+II3fTX{kvPl%w+4lE>(Yi5Ve$xUY2{G#Xsrg4tzfP=%d zWQIZY+04fDvxV?W(vyJ~{k@ru%f=CAzT5H7s;q^GS}pqGP$L3X1eVU^e>Pz+Q`o=d zTS?nD{#n9~BEz*zmycB>xzG9({G$kKKkF!X!;1fTnZmC|8lLiUI*_7tgX5nQ%j$k9 zvha!l$wq(rX*y-e2MP{Lx6T+N@XsuQD-LtY=5ab|NQhLW{Q9i7YD%$UkfY-E`)n4= zr65iIXQ!Kbw)a*FYZL@I@4vU7eaW1bptA!)X%9;?8EAyH-XMIYjhGVNBFYb99_O8^Q5}=NM z*4+M@&ZZ}We*<&-eL7>s^kl~CKB`8(3q_=nPUZ*yA`xee>#{bbcX{?0tgxZupBrCD zo06Wvs{=%-`5piK`S#)IUceWZ*LJ<-SvzK|$?w`})&b?~_^@O?cTm$?H28(|{juHv z^PZQ0ZCCl${2}IP{DGI_F51EB@&oNTK}(=FO|*8!hMh0rk*ErEs^bR$OLHcELnhj1 z0iWxSbrY29qWx@z3jGDg)&=CIMAYEx`vvLtM`Lhv=F)O1@H_F(R_)4rkd=unrX4;n z@z3am#oM1Y5&&*jsELr!AVIppCj&(Fx7}f<9v3YK)84QIcEofxfAY3&F<##4F)C9d z{^tc@Sv1gC$Ne{atm;qRhe@x&iAu&|I`$0-=FXPMMsgmpN}g}UH-<+Uhx0#_daP{S z471bh1}@!=__I0V2O}u4;CR`b*KQw{{d|kRZkWUkhU>AS%jkiiYTIUDVd9^|32W=A zWIjkHu{UYaoBapP&)}2IE4F(2wLzaml@;V$`N8$x13gWK;LPz~&7^38Q{J+lt)YQG zDNm!j&;f2r+TPRNa5KI*6$@75Snb2cHFRj{5U*=XzhZzzzL(Wi!4YwQchx-R`+6;% zHX-igNR35>G9Sl>5!YMtZ0qSi3*-Gv2b(%)I1Ayr1zG(dM}huHcGsf}VO%&kyw({` z&Au{}FHW45b;o6iykRXBj5+RbZZg6yeLs|=FTg)z74q-^?B~LDZuE>A!&zl{@O7a* z>pfQGvO{3ita~gP{MgTX{ua@7w-{Bd%(WHZ+&#l+NC^A-lmSFe6*q2B7O#LjduKaj zf5DX5#5aquma3pE#3T8WK>e3R7M}%1g3L(#@DI~FKB|Pzs;-0R} z0&^`)Ko{XRN&sI$Sj{2O9KT~>L@bo>#`9yH3#lx_>?GMV4Y!}Y3S01;!mI9S#KR0i z3IE4_Mk5~0`G>tRS7E~a<{1p&lff#m2u@`MvtLcsoF_lh=KqLzGs6KZp^DUXCCvQb zJrAzMuhwGiTj*7=LY)E#jZ=FlZ%ES^^8YgD#nS!*> z0Yy7}@@jn5Lv3>hAO2^?a#OR^3R|!t&abv{B_iK#QDFyYHls`M4;fVqfc5dxoQdb( ztSY!Wn4}h1HcvF3UR#O4*G0e-l3T}KnNikMB#mU5D^c+}BKJIAHw~*g)I*JBPNV4V zuE^*fH`2g|$Lr3Vu3FN-nDv7xgW@59CK=7$kg=HslEv}Qh|jszwQ&cHXB27SVOP;fFYCmMdTtGdjpdA; zT$h>OtU0H7cSiz^vCf9b8Fx&zd{*TSI{w+r^=xUJS)%sY34rCIWqsGf{t~qIb!WD; zi2oTpuI#Gz?KT}6EZEssYJ}zdefX_I>uS!g{)3bClS|mKglm!s0sOOvQ@*2@naX`E zwKj$IgIwQjQ-z{40*M}yHqxqmN(cPf&!VmGVZ_TG-dao3lPBNT>(#4KyZ!4H1pSwbJYt?WmbL+6~+t3PZZwiON1?kIFimZ|2~2#sq8s@Ole zW$uw}xJ$CW$p1Y4SYqZA3(2eG0hRgWeNj{`(Aajy(tzYZGlu%G>B$Fe{={85&q?kU2k}EPv2(GGD9Uj>0i31xivr#oiizA@s#KOV!_{ z&Su{w&3wv1%+$OAHdAA9xRCMErZ|4Xg+2Mj6SggxNgT$ax)_X~QsznWY{Y+n=|tkc zwkQ|x&^lj>sHM_`Fr(_vAsO%{^knhZ{mYwRncut#1y@N!T^#@X4h_9y=L`{v zJFAfY8SEIb-+i-n9)f#MqtI%dIN0xr%R`_uF!t`1VL=G#x()Wmxp`X>^g_x+fjh~G z{hy*~P@etkzMpLNhrvr&;#z=zb`=xnS)_~Sq!K1O1U;7R;FD3{JCn8_%AFMDWureR zO%MHy%;W6L!iE}UqdZ&J%jDM9lHbbRcXrW}AAY2gaQ%9j=&CfOF8(~>HTo^G>IG+)T<^5*NoQM~hE6K(A5n`?Rdzgvw;f2D~WX zszBUCEM*T~tb7gg@|1`Yzu}xFDDlYwh$l1c?s0~Lx_tqFGrqPZH=ry)W`oC*?UJ(t zJT^&!S{w;-9}m9V4dINP%_UAhyon>~#a1gOTsP z*Y&~+)&RCrLhe`Hx=Dg2dB<0v8qB(}SWF!{XQW9cR4)}xKMBURm2}#7+ zgv>eEc?KQ-teyM3+De`~sTZVv&YmcGHfKZb`1D|(!iJ827Q`rz&1siYI))epIWmRA z!EN5%>U`ta)Q)%u8W8J-75{T)Z+Av&fdW?uLn3<6AAB89-iJ*~cit@7E(hiLUHGdE!P;yviw(=fKM&U&icuZHUlnvjDVK-;xtY09H`=1prM6XKr9gS{ zKmX*+lGjY&M9ClVI>+ZOp2$cFu#fd7fUuwz!ZAF)z1N2+!7N_XoPD9QvpwrYXCJY7 zwP_k(^;&k4i`CWYqNcqiPrPUmGoA$phv{@VRG@fNQ`7iQ`9W>B$@A^zPV|@} z$nH`rrNi1RB6X7d_$FmNh=2b4S~emm7Qb8WHQ!nd+0O~ChPk;DyWLn} z#GWr;8g6VW!q^vf?)K8+?)`u${AI?Uj|VCM+;fPEps(;<&CdXY{r-Dj5F-Q;;d4b zPwCmgU>+-wtv|leTFFJRju-GhAAklZHXt*8OwW5XD;QFgPw_!dte~&=)2Bv)^nriI zG}bwdl@xyBpV9foKIY0bJ`2!~W@nKqD z75T|=9kx7i&~H9hXFTRb5BxJ4h5&9sk-jDYU_S(FjZ33(Qc<7cKr2d__tm@~!HP4V zQlI#SHp57D--0#HqL$9{DKtvvKYj>S%yJ%qfBurP@C^mkIy3(KvA%ODDPW4Y0{{Gz zfj7Phf>~@>n)nL9zzZpZU^#oRHw3J)U-ZQuoXJaE9RK{1GDmuS3RcX7 ztro{W>j`T0gX=iXY#xb;O56Srr1#R1%c8XXwR93FJy{}3gk)*7H)Kw3g6+^Ktlo=6 zb7uUxkR>s*Rn=mOUbQJRzHwN+m01)FTA#{@MNw)L$3ORk zdSg-jS(P?0^3Hzt3??4wg4Jc-4J(;VR`xA`H-m%SAKb0qa!$Cl8j}QGB5;l0lgyrm z`14^!9aJW3)S*OkgFM#~$4sCCu85thVZ5-_scfukE1+~@|3N1==xq3R zR#HnDM-K%=UKcG+Y*_%*@9N16EDhaM<3=+ zVLL>N?Rq;z^?WIge@1u(uJe8avmNg?Zd}9orj1y&;`ry~vgAOs_D?fyW*-XsYTY-o z!r65-(XC8GW7ELxYDs2A+7)exD)w;*NhAn+R~ zAj6Y<&L7*ZB-hD&cP0bjuiL)p$?^vo^ZI?;d9_`XU&uhv4tmjH(urY@xpGZ^u$A7!FAlElcs5}g-uQu3k@kIb3N2M zZF#BMfDqj7AoX2?8Lu;rJ>vOYB|!C(rb)KwCB83P&%kD5-**ae=0*I^A9u?4g%q_K zozt*2(Z%!qVHw-NKVKFs{=9(f9md}s4X0$H@Xz|%?^Utd(mdDs#_6uhoNHUYFCYmL z_@7A;swaP6KzhNO_H*d3C*uN2i(XJy8}QHj&bFzxzU9R|3qmN8zLs0@I*Wf!gKFP5 zmH+Ip;2PlXeW5FFc;VP-hSEccYJhwQ&3Fi-hbI{C(xNn$Br5Y&-xTc z8=_a#vKPkhNH$LqMGMk>HQtdaI1(gDpIm9jKTlEoo(?P-@tKz!_QqC!7o-gp8N7h* z_8$a^t!K&&e*S&`mmmqYdY``t(zmQAhbXs z$vHS!_~+lgex?Gobi^Yaf9#-(>aNx3pF6nm3?|t8HlcNyPgZ{`3cGcl-JHVYdcKLp z;B_H4`p4IPe-i;Jb$RTKMoy>o$2Soff(~p(g#WCsRf4vU9VOL6{lGteudkMrT_I|K zer{4%yL~N^xGTvzS|B{Q2Fi2JXj*^J6IvkG!<)BNxi~m2pHGCcG0orRL&(bI2+9R% z-!)5Z4b5NPJIcU9b^P=HTW8)@H5?!7%*fvNj%pgncbD~hHQsY4=&^?KwHlvu&mA2u zI2a+0J7Fy|Z;xhfJ-%JWADr&lh>yCktgStY7Mi6O-81V#|Nl10ijLO&xy zrFbY_G%5rdh%2a$f1Vw(zS3voJb7W9zdHWeZVj8Vkwt@# z5pWWvq-b8&sQB}5nJ{tw5?@y%;v4tkEWxO5;K6;8U7MEf_{Wp=!i!!|uJdm_qGmEt z>sdKIZcbT(lx&OTdAFkLlxW8W2aL@}(SHQYWdd zRU$Hq`K&Vn!J-!d zda}ziFc3j$;AFOuMS0mDh>7Ov_-A$NnfqDLo|AKoKFyiFWaXk=w?6*hXKS#x^c4-RT<3quGr0}x`j%(CU@{6uJ2^)v z`KdduE91}mS3T@U$Duj+ocACC>R%m)&}oR*@hbcIH#zo}^La8oI{Ps;rC5MHstIiKmW7HB5R$I@BZv$5oTZd!vghN(llT{JI;$8?kht@W8JUQnFP*%GR=Vcn#k z4V*=d#FD_%vCvj7m^5eL>#FC}b~n0hHLhb>bst^}L!A})XP#=!9fO8{OBfFuXIIBR zle)x8ND3IHK_u=yGg>`#tTy)V-c2UQQZ;}aO+YpGbg(A9PW-dA>PSz_K!dGrZDX*y zlK&Y`T(Xk4*>xP^cqy)WLE({XuwKXkK}R_0Yl+Oi691e%a)QB?FIiB7O;b5nYs@6Tx-XGCJL3)fNOABQt@Hoa`a|Y>18P7vZy=a8(Y5| zsJZ)fT)G1pa_^3Q$WepA$A~|c<#UjJ64+Mv^cwuvPdSf{f8N0#m$&@+MFmo!O=8_-Fm`ub)-Z$p2w*(ctnQUa)I${SSki2De`ZZ{U-AmW~IO_~(B= zdCvL#4}-G?U$4Pqeb3(p6L3`>|NPezW5V2JQ2Dj^J?Ku3h?&33k~zYEm@@$?)$z~& zZ}6(YU-Inzy+g;(xz4n{j^E@ta?bjYMAY%mKZJexd_g7?tK*-CIbB@__{6pICqJb4 zhU1_0go7WNFQ(u1$}%&$j%?l!<|b@Xm>)ir*)K}G0z&9I+oP#rX=4jNPktuhTp zzMCf60c&gg+~ENkHRO3o>he3^t=kFAVvq67q-}Nlb0yDL_Z-kAq;J=U$aP;G|J*#j zCx+O#d|z$E$yCQb$9+#WNObk#8YjeAKnSVor^O{_gUaniy@42RrZ?L74eg^(o>$@k+eZ}0-m>`HK0L-j`jk5zO zVwPdAd%^F%Ivts=w({^XT6K;~b$FHx%~lQ#e)1_N>t83Uz^3U)nLGYD*pXke0y(GV zs_7}XNB(EcF?#GAO+lU=WCdtNh2-#xQK)YCqt%}X!fSIY!}KPAf9BlA5+*Pod`^S3 z3Dxn>T8(9rz0PTY{9I3dsL@Q0#}TyjB*TT)kYF6!ER(npkCfbS?XG=IM%wbgRx?@V zYEeFAJnV$C9tel>SfdXnQ9yM(WpcLQo$e9=LA!gJx3Q!&J-IK-Ll@SBXVhRq^J6>7z+Cgo%`?o{os=s4LKl%<666G^2 zf~!mr2FDkyKnjzKy}gC1@GQ;cF(9s#V~hufw~>AQ8F`U%8FJ zo_z6DQB20&3F{1KFVd5BC^MaRIK`QyQIQkipRcr=XgYnVRk2^gL&GU1ue+jZ?Iq6yKUyPVp2wWm7%S=);HF9HB$mX&dknQqfGAkV{~@qdKY9M@yZY|UeOa-}=sbtmyh z2C0NL9SXqS#d^JqFSk1W**%_+NHDTbYiu4^Zg*GxV7z^mfQjUb=@76Es5<^xwkJ2^ zVb|eiDXQl9=V`doP?c?}X%Spn9sjI3W~Vo;D`L7k>tpN59-y@oUss{qOq%K{X9nLC zgQA!H!EdajyxkY{#2z|)ua|AaMYG58&k0ql1$IVaWulka*=m$so6?q9fWvfU3NKPp z^Pz$+df}fNgL%~}jhv9(M0NN)Vc1Dpx|ttTi=Xf?OUwL``Xc_>Kmfi}KF9nutxHe7 zY4*J5_&qJ{!baYI<_oQm;Oe8c9rT*FW|&zUdg)ky|o(RN?7ZjH~{WFo;R8CQ$B)Y(kjBCOh} zdMj5hgy=)~pOZplH4C{2!9a7Bx}gEP6|>m7L;<|(C4X?ilah{8fBLDM%6DJ!>vS(X z-P!rooQh{5g;%|ZNBUJJl(QhSM|J!&v(V*{kt6EF*y^xMrd~MhpD*?;NJ@ZSPyL`X ziTO8-OS7PVsl)s>R&rJ1pFI~*-m9=IoXD=wT(w@Gr-coRwl`p*^bk_Cg z=bvG$aBZi(sLr79&ka#Dm~795Z;h4XG+Z73JZ*h?ZR3fJIb^@46&e!$IlQX;vMx*A z=`v2P$9@jyW5ye)?lYZA{S5rGk@mlgk!L!-ze~`QU;QTXU(+GITNVC!Mj>oE)4JXJ z@oKwV@9<&Ih5NVZ$kTNE^H2fxy;R@R5m579U#p?%e49N%gAoN^b;#-Uh^#@;L!_^#EX5wS+KPp#m8 zM&BibD#oj_+1rU;ic#fA^;Uet;uWYqi_3Qa=hk4zGXgedx+4F&y1ALvPEN8xyr>&i zm`=;^BJ#8#Wh32_zs|Xa96^Wm@f>~fZs1Dm+>+=17=b?mIy50z4*M0|@#aU@^AKV$ z+w$NyX3_nR&=BKwZF%AwW>MbtIy9;m*?T)Kj4XZf=r`a1tFDQG%l+2gC5tMePRnQ)NQP8h+ zy?2joGgRbGB=trMvNyo``L;LQLN^t?b`AcvH-rKp^F%bB2%hd1{%vpUuJhO`x&_)B zTgOHJ5slEbylODwbweJ`@Qy}&nDM(-W1q&!vkEdRr`HxZnDGsthSpm_kYS{F@LD?< zh)1%t!b;0!eJ|bk$CX9*EtIdN%QV%1BDy?k%vz5YfZy1Tx8?F9BSsMosvmqWRk+H| z)$zZt)OCS)(T}B)e`ggCM!vVz%6{(&vvD~dIh9 z3yeQcIZiJ*mgs6QQE$cslqz;GiTpfEbhUIbOw0UJj%_ov{FA=gS(;1@^N_ zXcW4IsMWdk?IGMJm$~4EZT15 z2Tzq1{3`s?8;*b0`VOnBo7ryB`}K*qircU~_~-Z6?ztl0?Q5lC!xsOQ?l(+jh3PL)`c0c7FyI$oJLO@Y-&|DC|Q*Bw8b6=He-4&N+ZWIJZwtDbOGS_dq^;xVkw6MCN zrSQ4VZ&RW{$sCyh_LkreI{aGdD?<7X)_WgWS6f0pB}}t&DY9&qRWB-ygb2&t0nPs< zQsvX)4Vz{@Wee#6(`@eO#yxvs^`>d;|Ii!SLD|oV`Z=%t39EdogrFxs_H!(c`dXv= z0E~qtt+V1A7?duPEP3*dU@!%#7lgfG8UeA~-}Htw67bJ2yRF z%H^$s$+_1O@+qNXUDy0u6!X-auh+5q>%>e!x?k5sxcZ^>exDSg!P~??f8DU3s+YpQ zg_rO<#$mecjzFQ#4S&JzuQ%8K~G-v5C603V4J!T zdkunrh>(o73D0j&TnsL7A{m2tv=@VCIgh|UUt1pDME>hVH%;SQ-e>SUx!yByW*5+@ zX}s#Kp3EbQ!@c#)n5VSp#6L5AHi?%btE7zHh6H_W;-AGhVfC*cT`!-yj?+M3f z<2rxjQ`q0C?J&(t_Yh7(wCC}=@r}B>_s4#2)BpZ44Mrh$)DMmepd$-Sb4SS-pH|V6 zX+Q70fX3z^7=l_4vwp{mQ=WI!cb8pfufKc%g$;Gl!zLVx5EVv2)Lo`8rn{6hXU0EQ z+h#@nWClfpa$P})-?o>Rsg?wfB3x%;)+k8CKYxbY9$3`5nQSPI_24EG#lr{x=SO0|9P`HpDlaYsNW@a%V?XCteTpXo=4Q#o6aLvZMVp{a3D;1> zPkykKHZ@ZAqRw#&piK|Zai%v^mX}II($Ri$DzGt?G8_xA`1NTe(pc` zHzrYSoQVwZKU3qs$c&vR0J1TgeYg7bJH~;vNFwz#zhRxpm-@u(!t$m?{vhk1Rp9vN z@nWl`=Kmt=xHOIZQ|f*t>yU_&|M}l!9g6eU{EsJVRg`Y1@BZEIb$+vxbiE+>H$LCq zOsMw@%PkfE^T*qNPwUn+`b(MX?Z01m(`r0?Uw_jkbgjnqaZRjf)92C#5((#r(586( z;ENn{adON>M74IO2PFlN@Sa4q=IO5deGTHhWC2bC|MLYznW)mpJfWCaRwPjP=Y=88 zpw!5Fu#$;Q`EKV7antOBDc$}xv&_6Td~evlWu<&T1SlVDU~LEoa)P<$h9 za_NfT4YzKsDM;iO{ia*_pe&Di!Kc3a(e%miE<5eJ&7$5I4E*zfP9&-$G?RD|VOZ-@ z9@vh2%9S0+=HR=>_*-bsD-zfde-4>X?DoXy?XE4}AH1Mli44a-+j?fMGv*Aw(Xcti zh$<6XNByAPm;S_c`Q<~p2RrTOK!}xF`*w+Xh=jlEwgUdy=*8Yw8+UNtTC~18vMcCo ztW}_Im9!elwRIqyuFOKz^j=@hnUycC!ymlTzj&w!5^KOehoSOt|CKLVb<)dn@WYqu z|G4uIh&esJZKOW&8ykiGc&yuGVG@%X4K{hUsN}ov0an8bP~q~)pz6f)KX%+O$U5|L zXE=Ndk`3m&RZ2D7RB^Oe4>v?$Wg|`gXE+4$wip;f%7W~NnLz;m^X`Z;w?z$?>-t;_ zA10POgJ*nA0|ChV)%Id&HhMsge}3c4#d>Dlt9pXpEdp>Eq-U8320ROxPk!1clXThQz|7>6DjNP1jMY(8>?luLHNVLiS?8*Px zJ`U^d)J;P+bkRHhS%f)q|Dywf0{a6E-;p8;{4;Zx0zc}T^bNbFf&Sh2I(@^k-@7iP zXcgsDxex#IR+aL*!xt&Ha9=0!qJNQcd*3CwOXu6(kSh3gfTLaz@_et4-dNx4FMfMT znO~4LBXU_6vA*Dm^Y>}xUWh*jH$r-7QVAdZJ;*QGgnx!A_@lpvk^h1pFa>#@rUqQPjKhn3$@$xPdg%JPqhq2vF9lWRj zWdvURKN#C`J+AXV7~4rZsQ!chGPVT-y6z8C?RO$X+0VE1^S_7?$${f%d2za)e-I(E zDyrS$EBKdhrR^sE`QN@3i-y{r{_$i~@vIA5zBb^WlUMME$zzMZ03U*|P(zv6YX z<=S(@M$h2r3=;pmfJJ|{Gs{~!!<_Sc!GHOKnx3rO8}@VFo;l{{>y3kUtox-oKX_69 z$927*4scRy(sho1{+{c5Q=BA|Ck6QD<96uz_aL2mr5o;vM|#;r$*MVDVE_fnCjR+- zK)=uAArYPS^C`aPpJ4!=Zgk6(+*%m#H&JCv!9MZNza6Lf!WwKV_SZp`s1knGg@69% zlQ%s%Est3ljw@lkcR~i>B{P%WeOKYLy2oQ_BKzH{V%e5x{O9Ii$#b4Pi@Za)N0;T| zRSiB~dSk}QFQd_0r$EtS>5`XXF173i{smroq4K z=i%(Uf+57oI5Fb?*UuXKpY*eK@IUEi$;O9%#(mlKxan&Zw4u@gb zwfjWi^Z>l*Y(V!NGxzJ5rdk*N89btYxYC3N_dt18th~M>tqP{HX>SiRUbi_v!GQ?( z6I3-*f@Tk<=Yhuq0i2%W@{yxBf}-&~?91{*Slw32Sah?WFT>nKb(5iA-U04Fbl7ip z+y3FEZeIJ5HD~e_ki7^kPy)+x731ACxGe8D|2pH&W_ow`jf>J}J%FD-2KwFT!r}F? zS%LRZwJF4JxVuk3WxA#E^y%>SFzx5#VQHS4f4qZ(YBUYm&+mA~j}V5Ij(E|}hJQ0= zVD95E0=0v{^9No)zsC$1`$7|{@uZuK(nv6H?$KEs!g5odBlYvuUoWO(rml>;1_Qq_ z!`~my`nZrTyO7wept~b!d2GLSRqjQpbA;b;aNDkIxeJxd=8o!r!*hN}2g0Fy=Bs(g9f0%5mJtE)TSJtIW4(n_hBl(4$vo_`A zH2TLh+PSj4Kc!)`H4X-Uoq{0frEeR$>1vp-YM%&%`@rUewp6+e>meXMvvK|=Xt#mqbSpT7_aFiu|9F3%wNpYcR5 z2r=;Pyfpb_;=cM?|1nrko}2Q)XP)k=;GUfH<>6K9j(>g`s@vmD@TOhYTqGON&(7pB z?K^3FSuzsQmHlBWEt!oBFg_~#~vH~)BHR=)H^d2at&=b~vG|6!fyli%@;U)I~Xhood2|E$ITYrT`!8Sy%_ z5r26V>)Wef0H-JBQ;JKQMeg8D07kOu;Bs(Z9%$TS^T(H-9$p*IpyQwWOw4^Ar|AJn z>WJr83(}pW=L(B^leesCus-FlR-}xbV=z*0-_dtQ)m)H<7)Xn5s!uT!I9x7kY-`4! zre`&H;-5F`eZ8KxROftQ^e-iXy*vInUPhBV^f6damUUm9tYtM`4C`Rc7X($E3)1k# zUqWxtfia_EPJ7p2$@6u11$xHjxEf1H?+kB(`kDOC*5loz?#!3fG1>2N#otrS+Ck!< z+qnG77<8ss#lha3MStkgbJYt@d2Y^gxXtKrtMfyWx`}_bwuj@iK1qRKB3j10%Wx4m z82;cnUe0O{#s(fWq13hHaj|c9Yjw?8^(hv*XQ%tHdU1Y8>mIZDNKu3Pv)#UAmlC0K z&P6nO-SN-w7ZV)&J$RLDkmHswHeRSVpS!W~c>{>M2xZZUe{ROco}!0ki^Erkv~(7- zPb(MrXMdqGUdY}HgU#2nZ*uf9EyjKF$sG6wBS$iHC+v;I3vlP)ICoIjvfcEr%^Btk zi2}OgpC#<^+HPOpDc83-IhnZJzQZ3hA-lci9^ct?U%h$=R}L&iQM*--9K(Y_wsbKD)CrS3QBv{*RlD~? z{2SNl?f6#rk#>VAS<5>s)vAR>7X6s{6kC^9DFhBME>E45gZY$S8{Y;tJ(XfS7=Qk? z@vYKo%)gv(MVhYbk&gMTjVr7x@mA)*GIWh1&AtW%eCcBgf|+bPUyX))T^S z-Fh5sv&k0CFMlwxh$XK(GYyxajtqmr!Cs&8s&ugrfifm+dIy3%dfr|y_@OsKn17d3 zlczkl`gtGvdJpr*s(5&;@dJHP9#ytfo zyC5wk^w$Ms`K+Lja+&fx?yBbkN?!aG(LFxsqIdi=I#t^`<3pbpQ5p6c2TyzBX;%1Y zIa-Y=4{Z77D~R`FIqGiFJy@Wh$6H^G%%!A>B;Twb z?7%-?<^|*;Dbt4}*QD+3Me=;y)n&p0Y&x*moZ)Fw^Owv`iQYwK9aoE0G_Tfr&3~p= z)#|Pj|2&>}CBIw7*B3^n{O7pOvO*R`_QtS1!+25Wg*a&6`P|3flXkG_$(`+6%DSx{ zjmRf)24~eYp7^t!m|dziS(_0*F}Gs66Yi9yy{5IW z2BBBR>o^F^VR&-3vPOr%5H-~6`W&n5UwglQFAl3zRBhs)&8}OFjY}S;$94~p?$V5R z{PR?RBtL(Czr3PcSr5lQzYnZweg}MC&)s<*l;3xZog@HP0u{ewuB1^7y^D(_TEj zK`rX|=MN9wYXA3gxYJI%L$)aJ&la-{)7){pBbgES2_xxM_Ve3=_Y0{xcGhn*#mwtX zi*et)%a!?qvS7>)&*Q4u6pe3?=kbq2RpAcFZglTgh0{J%iw~E`@Jn-U-xvL`0$zT&1w+QI&cUdM zl~ZnZOQCb)c#_>kRfFAr{v+5VQSDj{<_D)!ZlW5l+90Zsx}fcrJYVY&I=>Ig`MEiE z@G+Pa?CEODRw z&lV&2Fo|DMD5>k)Yw*Y1DTOv?X;BaN;Govc<~}Z>GhRcjA*<)tgl?UBwXYWCo5q%iW`F^E#s}?T@QVsVmdG5DcT}$>lmF`xT@aGD3Vis<=tYtX5 z899kF@*Pk*M~m@9y%h=~ap72t`O+WnxMZn}HO^^)YpG&q9cKgRQyE~dMzkr5gc8xTR67-a zzS4?YDq5QLZS!94dEdK{_=pv zhvaFV58oH!%|o1ictFy1#6Op`=4<)zfDU;;S4w(8@+0{)Y!!^q)+4WLJ{6K%cm~1$ zyzd73ADU?Q!EaBJ{&Sl1AOLQ-B74hY+BxY-hQ{Rp$ykcH|ugBHV~aA*}JqP1RO#q zXGkaiGd#=T5R@77@}SeO7{}suJ(>9wHzRddQ?RC)Dcsl9UT5(0pw{{KrYCn!1GXpb zKZ&R=eg*f4f7ZQsGA3hIm~*6NxU(F5J$HBh>+TjZ#PQF+-rZ}MxFpgC^@)G}e!(Z4 zl|{nV@9-M@b$2hCJ3E8-`;lkxwhrxiV(#;J^*Ig1pY265&B5jDB>1BD4O2S4#=^M=n;KJ1X@Sw|?Sz>RvVZId_5 zD=mRwWb+s=D--*z_y%pygbOHy$Nw(*)?ncIm;3E!KOX|sRMDKDe#cf#QR;l+Y2I@7 zZ;-omKmB2cx3OQS`gh(-u8MifnuZ&r-tGeV6a(gN-W+RX1x!>Ekba9_v_tv|Iq%&> z*54IGy%FD7i0%v%-8s}*Q7|M*knU&B!#KIydRr?AAaU^GiyADV-Gm8}v2gjE&(&3} zfi(`Zr-pw;gX;9}_diz4cYFWcjE*5|hK5=M{y)k8tVDjd2uk3K1r^6JP3hHAi{`fM zcSeZfbDgP?&LzEf&?!uw_14l65PL4$&-I;yw4^*K=R*9(DWB?DU+8OFQd$Kk@Xycs z+Jm!}j5)V(Y3Zb&hq)eJOW58^NbmSup8nnMC8VWp%+mL&3Zru&eq$0Y|F+Id+MdhQ z&!^e^W<8md@oFLDM+tRgxmG z!{Cdt?ivhvJ}eSphSYGG))z$ow1s?Lut0AdVUPGZtS+b38&kULkk>e@ZmI&uKi_OV z?Srm03!HBEqjByM`f`TGOEaTyN@Cb>C42{9b#035jV*2!*1@(YBIwf?RugHOPRBp{ zA9q-Y#gM!EUd>A$>Jy$Bk5zy?AG5Jk4jEG86UoazzzV#@p!DthN(pT9MwN1EyV*1*Ad;09!rLAIEGwn2fd%>+_~LN z2n0^Dqjg_=19?6bVQu)(^rG(29GP) zQmxjPnyX@Q=*>fM$c8Lrr##oEe@Y&9TRF`3XRa+fT6w$%;lbxBd3F+219Xp{-*iG! z=BxT!{aV#PIw5AnPVzsqs^N;x;E2SLLGz(}vIYasUjt0EX8nvCU$l2 zoQ{9?22#sQT}=(OI@*HN*{ArQU0pf!(@%`GUEWeeKMi$)JJ*@-PN747BZ|p*y2r-H zU4uK1mDJX`ZyCpF%TtX}p7CamE1Sow4i)_3Ef~HTFM8sigE#oY+uQd7Q0)H7Ha?_v zMt%2jKL(W*CRVSP(2f#iaRNfL-%c>XlM%)=Zrf4&rtvedlIu+1E2!Rhj_!Xp*5LO$ zFb8xd@O|yu`-Q~tp?6@zqceej!x|4fFSIyo6byi&)FY#p-mb|12#uf3H)@QBPUTL_ z$(bO}Ej{{TNmFfI#cNBOra``3Kk`%s3qijrV1FR z<@WBWdchlZoj>Sp&nqe`U6gxDmCsanySmlZ7NyELpLuVsq!Sb_ifB4*h8)Ic+h zHHk2+R#7^i+svm_GQ+Mg2JO0VdvB;55}KXhf2IO_bY25f8U^d*3p)P!k+Q>b>lr0I zfpDE9lFV~MJ*;;j&bn|`(5n}H(|p05QfFu?ZTGV8I99w5SsH(C($97|>V&vKKmT?C*&QzFTlD0~k7QoKUUz9z(?tGrOSwtvnD2I*(@nLl z1f0oY%EyhBU7I3*&@_S7U8$sJ_F6UiOM3K^|Jf~A3vd4Nf+vra zlJEi&zhSLi3CY3EUHO#VSa{8j?qg2l_f&Vca>om*(eSwo&p)o+;zi&*R{LIr9;z}S zcH#N2!@LRGN&o5QyW*ooONV$}c0`E1y(vO;MY68j=1mN(OoPht&(GT%wAeXw_`+&TO<% zFOC7Xw%h%|WHGPo1{CUH&!KW+lFhH6llY&Xc#owmj}NBpe_1~+ zGg2-~p>Qzj2Oo3Nu2i6DWkHV9PC+{Muhl49h~E|@*>z6xKU-Dj#;=c-`ETgBP@OcB zguv&KUnbd*vg^6xpf}7x)OI`m`H6X1G3V49i}Z#p#)J5c?Nj*emVSg^t~Bw_bz?uE zU&8=ROUHb-#{~Wg18iD4@{4**;0Xi3C{(gQD)(T2D^H|Adj_eo;#XT*!zHPE#p|dw zL;gGj#(ZkEw96F~b?_9be zFbxOSHlwunttGcKAHUj2pMIeNWggF%cQma5vu-W4XpFIDO32Ec_~+AK$n55=y&Q&Y zEmmZlWX9_b^JDFFhjHefQx2V{(@p#{q-`-`fD20(5Br9mw{;jNv^Ru*cGU{2AeCp` zHz&qVS`Fgs+Q06%9RK|Pq>d%7=oD?eLce9AH~3m6 z24odDOPJS0d_~n(Fa&W`q@Rg@#uB|(#RO^|FP;?eKXZwG3e>is$q@%TpUjtT`&MUc zpL&+dgEF^>84rBp6%Q07D^(#%+@s@oF&1x5V z_AJuRb{&rwdY$ga6JiDESrFe?#k};ZC)71(_=9i={_=##dwDwkS#Hr^p3tTpob^_& z2tPd`c|cWz&t;kJ(O;gBObEw6``31QKvQi=6|CdiI2iE_fOa9r#h^xql@!a4CWquX z@z2wK{^h`K8XUe3>{~RY^L7m;AEUSQ`PR#mg`D?bmA&zsUiJ-tTb^ zsV~PrzarX;ufmtv!wm0P_z8`hFkR*GWN(KPDvQ@4GqGbYE+D*gP{ZI8;WK4;~CYG0ls z|JNy3KBbTap9o6pu z&UiC#l_D#*ksm35hsu&%&O>FDbEkLP9#@0Qu7tT~CbxEF#4P@t^km^TK>BL9N+bp1ZH;)cTe$>@osNG-2+qAd%Fut5}U&4KzK|WTypRFv9 z^<^*A1GJ|#4pIt`1(Ih&zcz27n-QNg)+k?nYEi=ra&VIttt+y5hLcRo@@UZ^N80Yr z3+S>EZ4ZOT3BUIKjP_^^hW&gmw_$uQN1i$}yX7d%<8ktBZOVh^H=fIWTB|8>E1b!( zdMYJ8L57hX?U#xA%LSr4f6p{d{0No>Pxv0Jhul;$j(^r4^&t(e{3$_l{B!;K$C~jW zTe>o|hH^k%e7VPEU8fwwVr>%~NUI>!9E|!wWudQ$>4`TTgmJyIg~Zt(c}@x>uzS2W zmF*rEr66_4v;MJHZ__q^Cy_h#MwfmbujzAKixG-$AgDq7Zdo-A#OsQOVciO_t+pyc z>vYbjyfl*IpV#3AzwZ!}=h~fDeT+31j)NU9%8bmIoR^G`~!j4JKanVj}J&guD|%4qZpt@LM7r)O9FQK3SyPS)|;hkxue`?abb7%--E^2)X=j zPo>+7n2xQAY{YY(lYe7J(8($T#tRQ2Wm&EhD{(OL zgC!~|JWQZOEQAGvoiR*G=48E<(G(UCx1820dRxS^=CuhNOcJO0_8AQp{loqZ?YXVM z|C|ibgjL9%Be}13SGauR5^nUZ&Y2&q*)gq|IP+ohd&YO~F(^=W5?{AAI$~Cj@_ivG zIer3Px0m;7z?^SWMik3E$&X~YRIimzM#DIb!QGcsM&LE=XYbL3Ac{WJ`62n;7w||= zC8CR_C-`BcSn63ftlxN#4Z6AfZeJ=_c%)1E87g;2@aZ+!3fA<37w{W%aG-bWVh(-s z#Op5cG5Xz2_Iw>P1>AK~9RCb=$;1>%a{TVe#M|TiR9~0yNO@6)rj!rE)d1gGI@ud* z;T>X2K{nfUxBlMcyy+lZ@COZ(TTU3+6%|HDo3fEKXX2lCTaqDd5y8~r4giEdWNH3u z#y6rBEPx<@Cx;A7Lu@s8*2BK4-FZ^7{x0atHS;Or+bH1${`VqUK|s$-_>J3%0Uj=# zdH`E&&O598PT`-8zit+Fk^^A;{c`RQ)})^k|7=Y*$$^tJS1CrNR_|}Vg7+XQ%uFVP z6ZmHp70y)vfL`<9+=|z!_8{&g_pvZ7mrnSN0Q^7$zlnd22huooGfezuY<}Z| zoAI3_C2fg+HmG<`V$(4ns~+yRc;DDeLAq6+(z$dd8#1uQidgMOU-W`ceM-sShhQc` zsp}s8XHf5W7rU3Nc;DE$-S7vC!@SrqL$|{P;WTWcnZ?G z*9LZsTD^*rHWJm>wJ829c8uRn3Yn#^h5U7i4gXf^3nKz9S`}t^uLuA9%W=}Gur%K9 zFtwhk-^abSerm)EC95Q6jcE?lbZtvA+tc=UUAj;Ej(L_KW2 zY;c~~K&_6I{0y^RgN1)a4T4#@(N9W!0zV0Ia zd9~6W#t5R=1^jrKX-=rXwUCc-(Y?2LJ&;uzJ;$p_ki=JjfKATbGYRBa*o}2(xQTi} z;h*h~n zy6+3vp$?}yGJH~}7PS}xoyQCKXYvFNp^wc%7n6@FJIsNgM~6@&63Cuh$!lu7szgna zm!>D9zB^?vVsVJAX`(#?K*764gEttifMD#&UMPCzu{LEQhrDp`PA4V~kpiN+Eufe( z;8p4`uKNq{KN_y%B5`7^u@i?Snvqiu;%4!-NI$GwW7ssN;|a;oY6veHdkK%ru{D+!cq{!q@4s%)y`EyCu;f&VHGuJDbY+$Z2Aep!ZLNdII z4Whwr$6d#(^K4R?IoaLaX;mU40XS&k@U~kpl~CJ-xrxj1&*4h$=w`F|11h+(Z;pd| z1O4ucj8+D*E%?XW0#rgMVy4%zBL3O7w+LGMjiyyC-sSk`Z)ok3$nDy%p#`;V<+^b#?_zj?iq$eymGCst% zL}#As3_kO+IIx?+>0wP-&W-n>EglEAXX*SOt3^NA_gJZtt|!AkIpR|jWAtKvGrr-9@V#WfeL)AZ z;P+Z(Kfe{?xS`zhRG%81!BzZ7xU1d1bD%e>SjX?@&?vMDR@oa?OUg5N8@(OFYPdhf^Iyo5pNZ3~Gq@EZqD`=mz>etGAiqUB^yW|l4)r>-w z{B&(f`Qd5)ylHQ}pzLQ47aGOe_3YfbpT|9JfL%*B`DDD&Oi{~WKg zny@e4l<89yn255l`V#*6pCWo`aQY7-S}ApofBt_WD&J}YUv6l>i>SFVDU(d;n*7fY zQS+W$M9;T~>N?)?uOiB?r-&8}M!e1(p|^;-g_LnyB?Zc^P4!l9X+u{Te_?BhrOvb0 z_Odq?H8=fcAt!*par5c2DyTqnr&d7E6bu-XHz3z|R1{4Lk3XFZ0^PeF40^GiglMATep(XF#S z<=WK`=qukX5;iCMVao5?zw+I+zi8dW{lYyU0Zt=#;u z%)48C|6}Z0w=89K;46us;7_mb|41WA6$Umseb!m4zn*5h5kknNQo(l5%y(u;GeUdskzMGeD}yFzvjDx=DWw$r^rn~ zzI$o%-Ot=}3KvRd{!6|aY<_3qe?H@qkif6<-PsI6an?CA-yQaK(kjZO5EMyA^4lmJ zISs)hAqlQFY3`enZja^3d#_x&OIA`M_&IeyS3iUPWE@F+nic=ZpJBj<@jHz`!9TZy z_&W#lz$*W9(n0Od2|uZy$%HX8Mk_b!#gki~ zc$52CrUA&`EV_(u2>w}OFu~yrDo^e{gKzsGkvQYSzahSBp`*5pVj~AX{jKDWT}H8s z(?EQ~BOOdev5JNoos`c=JpXMz-?nEqr%R@$gk69~I-|zx&SVpwZI1Jxh>{_7{bRDpv^PEYu~g^sWaPFZke} zjYcYgGraf$RUr6hRVt*-8zje>^RX)5_ufLDlfiFHlDxQ{!!XV{=oXj`K9km4<*j*& zzuT}DczaI4KR?NrXX%(8&Ow^MrHfd)`;Y5W>yhDSiYyy4bq$v;Vd-+lT;0=gQR1g1 z=@Pn~rdq*2D^YDaJa8Pldrk~vU#a9%1R<%FToY743E)6B673CD0ck1`6fe!1vfDbL zYy6p5ZRi-8z#5}OTKi~e- zHESBjN8xXEtL8NGabcKcp*&|8oxYer$kVjVyQWC;TrimOJo!mpaGz$M=e%d-p)%sA z>lVXb=g{+oyI&Z4Rk`!tAOyW49^Q@o@27MvF#$seAX|^Ie7?%++k`wr6pVn#JHLDaQ zt27Ri(vaOY0+sn%`0GvuA>7*?bO(9N(#V9-TJ-ZW${*8}`Qm+=mY4|`Mv3<046f`y z$hj`dtltzUveODQ_*wAJ_uFsS94X^iCdZtc2bbN?}CjI)t_8)))#CS74#DWZaZ)<~e1eW`J>4@x8_JZp)j+NyZ|FzhJe z%v~UEFG3opX?7`d5MnSPa=Dj+(sQ>qtCpaub&7EG0YIkLDWBhqV ze$XT?(hm*D$iY|9{37(Zx<{EyT>_-5RLluJ1-QjjaEmQe5k(f~#{Pq%TJzD*)vJjv z$aG5l4ktzM&sv(DG^U%^6`MpShwlTgXnbBwG>JFO z56)F?t+h88GZ*}GFV(jXPZ|y7&*ug{#*-;NokoVADOs3v1z&e=norT%ur_-a)Wcd( z3@#PDL;JN)qRz!!oW<){`Je6A4|EjrH#)iK>3457zQJaNIYBo_kK6O`=U5WWf`3MN zxzoVpC<(fpcb6JdVaLN@=;sW=OIk#m#QIuU{+ttZe8Ga}A4_GvBnNhFUYO-PF@PiZ z=PdN{$3a`_Lg=$oDjz}>i9o0%$)c3mw-R@3{hIj-MmfklR=e_VIBCykJ3CnqXy;(f zcOMTg|F$IZ=4!d_;ApDt%%|)ULeRXc0yQ(Jcd(s0PvW2NV>E(3=utM*OmxKdr{3y5 zJ-c>t(tOHesh2r3pQ4T!T|7Nz(&ILloM2P-Xx2GvmVI#LiSEq2#ExZ*=U(zDb5eA& zP*~=J>qn@mEU!&qlM<|mfB1CK;9 zFc-j0R%pj^tu3F-daKNYpdlfrzmFb>>#**eGx~Rrscx7pTthiV6WlZ|98CLpoD_{U zxZAqa_Nj6hTv}GTcw)uN+}5#VY{a*klg{}THPk$wihq_cM@SFREy^#N40e0D zcP6bXm#)-X<(Ropqy_Qhv%9N$JCro#LH#TTHX{d|D8$6NmCV+>a5aj4UR6JzqyALL ze%9OfS;k2@9{sE~Q4k2Z=#8B!;pA#u#$tIhQW(9Iz_vwK?2nPMBc)ve3uo!4=~a2_ z&PC}S4@#bqxi*1@XgoBO6p0h3`6=K-HRX9S{%mXUw79|*V}&l>S?XbTQQ}^irSq*N zJu~tZI-p4Tl#CJUB{X1mTMSaZv6Q+A6dRsr;gdn##DL2DWVp&eNq3&;*X9xH>T;FQ z?9o6Hh|5aDVFd-;r(H?Y!F7L%m;N064NF#^b_T0Y#c#~P9{p^TkoPNI_ie~c5&L=2 zK}wr9?a%frQ3DZWC*_uUBEdpem5`+|4!mJcYd;V3gho^M(yh~$Wy7CoT)EER=g;)9 zMKRuU7KP{pzjDhASK}%+(nIIwBsifAZeh-)!#emXUmK>)>u7jpGnLWvv=gk)U1c|lTkJx|s{Kzl>*&(D){_{ctal_1}O zJEh>CS3j#qzbG-ov?UUndD$Mf;wrmc8hWZ+) zpPgeL&BSCaxEEZS`DDiH@)uOp8u#r@eT|mf*Pwg_X=W(-HW{|(LP|NKy`g~pBK|pZ z&Y+%q^oGGr^0DY6b_xFZhv(9qoa|)86N5{<&d|BtCnb?xAZJxjBX$jO7>X#~T6813 zfGyod2<{rlUl;Bxl@%|%0ldPZaMj6>SxlN?sEq5N-C=Gtc_gfvp5FJQl0XLXKi$R zvho!utgo%iZ?vdr++v)dW#gDBEWxuTVF4({%RT+AlCkTAfO%9yE3kd)<&=-nWuvbk zeATXFBfxL2EtR$dfZ z^eX(%BU62fKs_wq336?hm=tff6fY)tK$lBK`0po%mO&*y1jhE|e)y5h6ZsIJSuUsk z;J%YVB`b5~M@r4m4}QQQSfRdLoYu%`&>vjAsIPp;q12tSCT2i{x=WYxKZ8S( zZ+|aW^}>h*UYfKkZyzUXvN?%%6)uZwG<@cbxAwd+IGrxwpX;}8Ul`f{YYf9+-hP+2 zS8pu_jTXlMZ{ixsXPybR`Sxsws9~1dl7T#rY6%TFZJK}!Xe6JEhK80z zsk_hMQtp-=gNd)p-kH4tWKHKu4(!4gl>XhgQM(!`GktLBH2$1x50X-(t*%6i>0?b? zjg5noL*ORoU9`<4jqQ~$xc|Y}KKO#iAB^pjQfK8k6V#F_Ms225FCrY+@!?0xX3i#H zgvYX(<&1%G;wt!Om^nL%&8!qAyr5^kI|mTnVg_I!ybAv_MY4_=AY}sK_o|=6SZISX zCtRpmc2F^QdE)DGn>UcpI8|FyB4&Q)G&J8GcIxHj-dvgv)OB1s5B$dDuUNEaD@eRy zJ?-avYj4+mil9te{PkD`Faj@+(AzIL*zC(SU6zjah7v8S36bTptWK5{$g^Mn@Z^zC z-prHl^^R2Pyz0b|g@}6ceQ8=!un_*KaK6>=Erk;W=@^C|@1Zp%P!cHpU$}JcxwY7s zHS^2N9_>ZM@WzSA0pI1JmNMUjmV(+^r~TUYn^1srDerY&rpv<6?yUxc>2lm=BwjEu zKS*2u)|#GJDkVdA48dK3e-`q!Tj(GCp==pE1jxf)x}@`YlFRAV%U&Z^Li3gZ00C*r zE0lipaSV@a1ckkyx0=iG4bEBl%%@)#zkB;j(_U#jBqX1uP5qEeM zc|G{&kaCsZDTPj1jhSsnj{ce$uiIfl^tK)0*=u6FF3Z5%wkIwf<#|<)XJ&fG2HXLh zxXAx3{t4mN_vY+&b50JX{Y=HU9J)DKR&L#;OoZ6(!vAdezDC-26ewhPuNnQj1@ElT zd=N{@{+2xJbx<7*CP&K4t|8*FHa z#K>&vH8Z}^0_yLtN4bn=L+1wfVys0 zex&>&KI6DzW)ali^(GLOBW_CV56YF6+NMpY^|8x`%ymkV4@K7i|2DrHd-h0{K*m;lmF|Ai2_+1v?nQCnIE8&jrL(wo>rZPtg*3 zkW(>IQbpPBUGtptR0;nw<>U){z~C%8x=Vt8W?L;Fad-wLe|3xKf+CA6(tghJ3vz?2 z&8Hlk2J$K1=2JADl+gzVA}AQV49a3eNXETnPxTJv9Hv@iyiWB5V~pntSvj+;0Ah40 z{`pBTXGF+F+0crZ`)=WCNPMG_g?9Uag}5U53LpytQq9|MlZm|Al>ZrU29K7FcKdVK zaNufO^x6jWJqT`LqqMT^*pxJMw!76xJg|v)qBR(T_@Hnd79VL(=w2;OEb_taDNSm~#X^ zr-P=vgeUWZS5iE`{$noOQ#i2xo)e>4`WUiET0f{4PCF=n)BS(vxO69;oWI_$nTFbx zW{~_a9fX2^_VFxI2En>0SO*j%(vsYiU(GM8g6&?EUljj1>2%BsOHzPF;4+%IY3YMQ z$=dV6$l_fK`dbCOef6SpVlu%SHf1UHhI@a}nJ=jP{Pl67+M%8l2UE45AADnJ40r2|@gn z-**bqIk0X*0E8($xVmRBRKap}2H%7Df+8zu*M0&2TsC9H2|4l;2Y8^2^9%l2Wxx&3 z)i!90zsw?<%Vi)N1^=uy9!@Sx1!}rdf_dQ#uKo|(4LYm~_~$p#)DIn4x`Kc1iDr>T z2tV-8ebMCfKl9xXw~P*ob5+g^bs&+Hay3$yN#-UvM8xKiEezRf5GkWz~Avq4XV82N)fQ!zlvA zjM)0{ed!D37tI~ywchHKW5!UY;Gd-$GdUn|T#>px+sF660GfC`{LdY!;|nw0urWXQ zC3OIaU7PK9{3dn4$y{5J=MSl4+FkL_|B*Ug^c(rUzNC&m?56!wZk3>OoiW!5ACjLV zS0k!MI-n5us6V$&e`dYGE`gWepQ$H|f;_B(JaJ$J|NJJJrR_CT?)KCV%5+YM=4llq zV+EVm4{}fu%?Jf4CdI{d-aiK4|1K{YxpapP-gzz98Gic3&GK)t3 zNmT+CQ65jX4>?pPRkK2eM!upPd4kUvLc+nu2_t_b^*z%O1z0I*E#NeoAExo z(wTCH{n{?YKi_|xj@xGqf_az0?#R6j;*m|`vfZ1mT*&{ZxUM|-TyBpc3&oOo%@TJ| z^~N#>+RYC*-3LVTR-NZSiVenc5Bh^S_9D(b?7?fmn;A0ZprJLc&=P@keH;h=g0#E9ist(^0uT6D*Y?fOKW zdkKAF>9l>Fc$ClFADySuBCg<2d&A5z7s!=&fJ)$#_1+VmM%^};C6sSq0H@%ep$e!1 zoV`qd-0{+Z$9Lm|-@@gm*5uoFj;-7QIKjv)M zIf}aS`jZ#`#KCHBD4lx7Z`nabHaKUspH-=(aE{kAjdB=J`Enhau|88)1-n1JeKL)1 z8dN8CE^-s{lXHMQtKj<^<=<%|3H~`ifNu3Ae|(H?ogPXdF7Q8_xgMD7HWc+m!&Q05 z?t_}=Or6JXD4HJ{=_LOK?F+eptx@QPq6*Gw`2RJ*{NQQh&u`u_Eg9u{`0v-r0dMw@mcJRMR4D;?d@s|9K8KuHK^;(y;_X} zm*$8|bCmlLEvqiA3<)FL(t}o*SY5#fx#A9Pit<0JNGcD6D-DnaNl~2ymtJS7?>1-d zIcA5d0w@{P948U4e9YAKpbsl(Jagutw)9%gW{@a#NZmCKzZVdX8E*tedoDk` zUk_B~yt^;rH+t7Y+Vow}j^UCFsMhRCspU4nnZZesIWyu4{IhsE`7|#yN^pSXcLpRc z=;sSx-@O4S{1@CK=#TQDN?$WYaxK*h>iPz(FI59*^sd7HZ1qH|8mONy)zA7O#@tC( zHO!o|vIh(Wm2H-bm0J5qd*R394MkXk%YACq+;eYIhG3#)U7U z|NA{Uqu02tiXr;C$T_Keke(PKMK*vCy1rr`>s!|tal}Chq0c(HX9ZrauYkc;z;Ah* za9=D|8AACDN(f!H6hDPY?ooz;gAu?>_MT{Ew=7*8e#NlWoHGYQz~@f^zc6^IUa*!Z z3emuIUWfmCz{rRW0}2WwBq~9oB0eNPK{%@QqIr&xs1+XYVm)AB2L_F7_(^Z1$2{PU zE)t}17z~42TZY4(cp_+{28uan4dCe#WkHcF48EbXEW^^lcP8&?{q?MY<#r1o`uFSI zY}XqA|G}v|7gN2+ggpeXz6Vzt#@43#ZVv%U6{X)rdBGGkhW~_v^h6&VtkK1|=AwlC zIg8ba**Og*n4ynXrXj1L?zv;!MJ?SNdZJOgH>TGk1jojR-haONfL&TE+bIY zH&GQhI*9gbGnmy1Qs4_-wIFpbb=*kIB7XaPNQ0@ID<2-!2 zaXKC74JCwzkiW_E$tU;a`Gm>t#AHWqY8X|Xor8}@lYN9dJCSE7nGy1wjZl5T42Qcf zd)@$9zE5b;5dl2MI14sqtS?Utwh6-$z{7UuT(M{ht}_C7XHVz_ts=i;uoe^!AmP(L z@^@MZ7w3FEg9k0#Jbw-YTCy8sNmOl^d8NU4QpXK~hx`e7v;M5AU)_}WOj#tlA3tWxbpvH%A%ytcd(-9v85Sx@*|=rpS*pF zs305$l#=V){!c`CO?VA>_`MNPZ$-p!IR+xU%Ci&m5SSEp>ZCJaTM%2F-O z>Xd1yz2R58R9u~G{>Vvzh=#*nk{hr_MG6(T0`&9{PBT~w=^bK6ZsEVL+(7{D@)Mlh z4EcS^9ZpWRR>pNH?EcRtwBJN4cXIVKM)Eajd;tHBIZp^kyXuLPK9RrEI1xZ}S%u%@ zrKx%PK=sC02&Mv zFw4{%~n79K3fgO)aLrUtFDZ z%0~XaDM91I-)`Rlm3+f=)~gZm4biSf;4}c}khdQi9hVW2VkKa^q3I{_=J0*j9;D&%Gx*k)`(S055GlqgQ$wd zm;{QQiWZ$iy&4l%W3sDpapVsRWxkx63xXto z=tl#o+uv%ai#rGcumN)%8o8F$Ikz>FdcGr*ZV3JlZFN24;vw zo}JOAjjo$1br(*E{iDVhpWl%m#$2Z%HG>I$l^q0PMS9uf7xCCZZ+DREKf?M-e*tvx z45kLq(Z|s7$pnyQG*c$$@hIn&aLetPTn83kJSms$UT4Y8}jX;SLHQnyG`5X?{+*>?GjfLsHCS z9iPi&@9A;K2DC326cCNUMfFZooqL7KO?&-B2;GO`5Ph@q1(ndQ&XKe) zio*IKX?$bUD$nPJt+OC7Aw&~=+_3T?Mot#UvqGJIW9PDT=t?~-qg`j1#9TW5J5Z3r zq6Jvo1iglb=0(AeCH~8RnuweO@FJ={9H-nd;gAe8=R6H$QOfjwWv-WmNHG{?f5T$q z8`3r5)_WU}Z^Ud|d_heZPRBN7bv1dtS@|=QUp}^|0HReNi{?M|Iu4f=EGn5r{XzX> zuAj=ssg0TQ?p|PTR59~5`QkYkg#Dk%m$Dk@dA>tLE77DhGFUD4`uiDllG~>10Yc~( z(S$TIQ?qFNxi6X}qzv_?-OU@(qza%wC9JamqTf}34yJFlvZ1%C0R7`zB4hP`*p!un z)qd{l3#L=){;!%JtaGa-oqBm=6$l{ueN&{Cj5+NAgwWrc!gRx${;(+**ICOh>S>G; z@O{>qN=5+DkG?&+2jNPo^oA5E_4cQ@sogZ6r(*?A(j$Wf&ZQXt*9jaMmc{ z>g;@S`h#Kwcdp#dks(; z>0!cVQU{pc@ow#neV2CWC7@8g0kR>0===mAW5-%Hbj~QGP!g2#wZ;7hl8_-d99RKF zGe$tXdl^j6h=W)Ah@F`<8iKj=EplMIIz z6!smk6oLdER!H4J{ru$tQ8teF@#NxL@deW#o=ju=_>+Fd89bn$tGXHFy`c(xV#-ed z(Zj?$I|+~d@a&*yQC@8Vh`x7h)qwDBegLO4{C_G39D3a>SRzQ~H8E$E~ljBn&8 z>@VLy;Xf`jnBS0^Z=lK*Gl%@@R4U1{U_~1uGxnu`=!wS)b-B&m&Cva68X%jyyAGzJ zVp1D1XH^Tm!9hDhaf`%}V11p?&!^Q$ocnFn%VrUe1VFTxs7R|l`4C!P+Mn^!p7@4q zy`UH+s)h>)gwXXgTE$3RON}5_2-}?6Z;G6T(`dF1E!^?zO3_Z%**Ex z)WSb;2ak^Mx6@*P{j&P`2eC(%2?~& z99XATp9x4}aDaSEk?+C5-psj;l~Yfb!6;Zk|C}0BO3McF>;@Fbw%{=M-}()nPgdk> zE$pp4V^iFq`R@7{wI>JZ2F)V1Pi{|6nkXtVs69sQ$pKZK8)|vR87wCU zOBXR%<8|N3@yHhhfkBHX6S6~23&h(_&4TBE9xxq_>H^|4u8#2koJqW(YTO^8FK1G| zVZ@vbA#}&)$C-?L@~C>__|h9-Wpl2MKiBfi%>n4qfe^YrpzWDNCf%uF+Z@pLOd`zU z6v_P?0jwghh!Q)80<2Fa49_{IdI!7aC8%qhTg(p9y!-)+aT@E#4)Q~YsyRn{V|!F> z;@9&VsR{)D%wyEfwG4(TQ2etog&Q2lVKTfJz5bHhBK zZ`+ORzeC-?&vt`lLhJjHOmrlKo~%C35fp6qu5-s=-#M_)ApLhh6P@6nQ!|J=8i+K5 zJQM%C^^`c344C8`@y}4=Ix8Y?s4!8<=f?OUbpanj6^R2ObbnL$4b=SO(;(>A+@XL4 zPGjxN@n>4lb%K93(zZ0_ybNBrDYT#AQz7nLzeAbxG5lZiM+(yU2hBfm2d}Q?KQkK?S2MbF%Mz@_~Z*_c}@q4SZ3Y+ zqVchW=xOXK{IhYuob{H=3u=9e8r^9^TRXb_ljhtO?x6Jtb1$F0+mG; z6q~LTVL?w+0z{i>=4u?qlA)fUYRE~h(O9{He;)9UIbVgJX|!G&x4R*<>#AJ98&F;M zpHL?Pl1}i?d!ZM|xaYj>qHI$BO%Okr#soZn?rWB;h^|t)pYNI@q5YQ={PXdY>Ps(> zLHeDk`pOh5s1b9D#SiDYIc(YA)v(efO3#PJ+rBX9TfcYt>Jfd zaElVJ%4JZ#;gk^i<;BXoU^Nu~JcU!V<Nr}GG+bvkjP2l%vL_@QqBJ4qVn0vbf~5(ls5Jk4K7y27Q>3g!O1E#$Im3QdB1W%} zuC{;yJihvBW~r*GoqKh1e})pki7)t#YIW%F#)iaL+c(p|ve|`fY za5W<9Q>;JOB5{z4a*BU`f%h>@TvkH}z+T{e%+K=U<3(>G!G8V>!6AjMg`007INq>~oCyBeXdnb8i_($pKKNu?KS&M4Z=llQHIb;F z_YcFB(Vk@SqQAL`%p&dB*3~6T(Ab*BTtWs>K?wb-%;nY!d_my(yL{AKI>*5vXsqgB zpJRoqjk0kWscTn(9|jpMYR-RGVMdLZ$}?VY`Aa^9XK+D2r3CY!m#e%ArEWodgF(Gk zKWmH;_Qn#70KMvG$i_06?KX5ayVXocfI1LD>mQ9qszODHFKGE>a-S0^D*)em#wX<$ zXLf0U%W+^8cC5lq&_}N4LHhy+{PPt-;F8O{P-*0o(q=!~t%T51_JH6RM3JRQqCSU~ z&0JiK?YX;u)|X4l2$kTUKd|wKjUzRL&}#JkMA;zEf`1<8rON&jEkuj42-0Otw0ANI z9o*FJX5yTuY_t`A!9Qo%^Q9rU8s-4p7g#ghYU3MExeR0iPz`1tiGSvc-S+cuXb8nD zj`-&hgK94VC4m#44E*z0&2_tiZnu`_GGVmNR()+M6X_^5ylTjD8pwAaYMf|ks}Lg_ zC=4?-tJTlLMBD}#J$4k+LW`~?{%m5od$Znj(pRldsWXp6>}d~#`*z@yU-E;8eKL~* zf`8r{U`qRBI_YaK{v4VoGf<}Z=aL3~c*yMUo;wJ8V{Hakv2z|Py)36fVvWHPm^15- z!HTcT;h1W0b^6;WxY7Qxb@{+>|?PsO6nbscS_vDkI zpFa`5Op$Dm=PH9vsS|_tHn{+&bQ|$VQbt$VN@G?sM{W>?awG@*b2!fm9$aeF<#+Hx zxDEVBV2xJ9??aERzcWR$t!5fZVr@4^2h;Da2%%dz6qDmScTjh#;6w?$I;_R$_=3la zc{!LI{XszzfAGPHo)#xc*MsSXP2+Wa>{Rh8uqn!sid6OeVy-DHliyLs=yq3Y{x0|* zOzu-l|pyGDmMMs!D2L>Oo?`Elo#X9e$ zq4$JlJGm$Qbl=X|%00A#9JP3Ek7cl6E(47d5V}Y)I2u2?J$3B586hDO_c58c1Ha*) zAjo4+b4hs}DWEQ9@`C<`2T|yM1x??kQZqsPvjFKO|;QoiD zV@O%?&;MCEhFOmD4@(!gbk`r2j<6`MLKm7}3UDAuf`86!ihE1PIS0I8!9NRHXnWW( z>{8NVRQ&U=Xy$Nu;*tWQ?*#vB)_1e(%jt|9JeenVfSURtT=a^6#(KUkA@s&+`M%5& z7D_MC8#q=c>j$;yZJc^bNQW2r=LT@qEFpt?f`9IaruruYsdKxxKP(;Nb%KBX-_p^k zQT+3NmW~1T^XxBO#j?Yz?Yyd`D@BIlfdVdO*`i<>kh2FK$5=dQ`v6vaP-W-})^Xzf~NO$?&7tq4>HFl!R` zbjZYHmGT6%VZ@6Vr&S&i4h4@CpBjboVl)8QJ~0^ajbelDoo|AZKB@|uH39in+`01wML)ks)pTb$=dBhbutXJhTk$wi)Hx0h zKhjVFzBG{;Qogu@T5qMB!6%W2k=#Qk2W$K}ka18&6Ql;5*2LA&20;Y?G}6|n)@2=scRY&aWbTl<2Q2h9<(d4?T~cn|F;uyNfBrSq z2GT+*{U!%Xd>|O-QR@bUSiF$WLvINFxx++XdC8!b;`-KeZL!3hbK!sfr0{~~_YHny zg4C^$x+Q;zdcy<1u|Vn;NL_-|N&z2m-`+iMyy~2|MLms+956MU{C8$fDp!@@_Z(1Tq7Nf zaDYz<`dRVMw{kDnLk6-==luL$DvZXU@r{!f`Pn-$fltow^hT%7O#%VvfoR&W~M&M%oLGVAjnF^?cfOazG;PxlJ zpf*7MQ2`ZW`oEv*xyt|iAI*=%+!$>?Aos$G%_s!%&o7!^J8<8e%Jhxd;u0>Oo(sPB+*YKMIkY`G!yWmBUWLoK7?jBD3cjeFssp~cepAH?kWD6 z%~gJR`h|6znm-|4=f1#8o~wcQhNH2qbFZo488%Ecp5ImE+#Jj(gy5e`H>^N4!^vGr_&&d(Ln@UFU&o2z=WC2CT zy)m8j;PJ;ocO{uPrpsK%^x&W4rF4a;XdV^+d=!96V+4+3z@qwWTpSdmtir6}Z&`bN zLFsM8Fu0m5i7p3mcD3H%1+*|;XU)mhlwh2H31)D6myn;I*YQ%>8_g|M5M|iGW&V6J z*oFCmv62lmNQ>uXWdpU+KKgtAiApS&wOjy5C%ZJd%8q5K$h}RK;6MB9Mn0QCQKi|Udzx)&cV#oEcPkfY%v){y+ z%&PWtQ7*n`{tOh+tNY}F;{bnw4hH_Y&aJggK+vRV+_WCH4jVo@C_1QQ(gpv#Kk!Ky zR5gbP53JyyiPUos8ELR#S~|Rfe|{n*Ibii*0T~>jHzD}vaUOvM)B@)=I5OY@k|>D5 z0!Dmjt~LegOYqNmQ!Hc3{d-W^08o=Jm{f1MZSdGBdNPk$3 z#MO}eAYN>g?8oo6Ghwv$(fAq~@7{NODuzz$7<5Ed-VY`nC&wr)}JON)c+B@ZdJXawhW}CRA zC}tTC#OuUd?|5yK^)$i%jB2R2k`oR_evl~=8d8-M0`5Kv{`rf^H1;<14-LHuZ)pZn6@)d06g}8Gxl|dpg693$_n@cZ0Jo$9y1S z1I3+5;5*h2fAWufcM3rpp`zIoRDEiw=BR4X5sG<10?vh`zJ)!ADX60G8mgbP zB`5_n(6r7-!Cc}#&!jviGI~7wZ`#_d>`S9{rocpw>%Lv{yPntbT{l~$?6?rF8? zqsoi;j{}U}?KGDX#Rb*n3_-G|bCT~r(%70z6B-j*PkZp^recSH>pI&vhM zmZKwS9VcdVAAY?4wA5hx*J9`01DnkoA_DzRv<^3_TIv@_lGkZe-w?IG6bgPMNhxok zlArfFVB+$;%i4a6GeMly5_+S$ym)Z`hlOCx@mbZ#sNc(chdJUjNl}H3!u_S@)e>sB z{tx`5jCbh=XMaozS9_=)z<*3a9ojL>5e7fvnoE7k!Cj*sT90Qr!^EwkW4I3`z5s8O zjFppljD;^c;Z>y1ECl@8lSE5&A=*&^L-o`=RHY+s-i?*nm9!i6T_!ssGa_11SC7^0 zAhgC>m<+UC^*ujUe3ZRc?cNe~N8Hv=gfM~gsV7zxkENsHp`pJOQyfI#z`=WGYb}sU zSvNz?;ceSNBiT$I>b5;?)EO@NzzDTz-vozLt%TNSZ_ZYsi9Vn(r+()@qS#t#Ji@+$;Mk#hIjK&tJ0WIp z-}7!6i#B|vg+>kZQ1Rd&Xbt_m5GYXC&W%lZrA9^Im*CI!lJ9--l~@UvY524KcaE-- z^l5Q3JQaT({}MNhn-gySM!T)Ntrpjh3S?U(?!~#<4oQfQ=qARmC2{7JyaUJK@(b%{ z6xiR}EJMJirF2*kHF?IFN`WBqU)Z@Jzxl%{hzXk$ZetgMriH?q1_6gPODIrNpiiwA zX3$=W?;Ai=&S{C_e-&IMUw^#ann^Etzdc@#7I?yQ+yjY`G(bmK)c!@F_eNL4)Y@GR zmZqSrH)cmw%C_e`@?8X-;u=J<2iM9$qVl@=Qj?^v0^i>(&Mmk{eq%9AU}BcQW(Fzs z*l)e}`#=<#BAo<*SMXs7w@b@_w)!8UUNU2I1MlR78sX)|Yr)Dghd7H#SL zZdA^RJp}86=l$d0)gx-(XV22`4257Fypa(5g{+3cxWY$`~%yv#g@4!{V zc)PrI6}^{28}N(sBwq%VVkayFaU(?Og11Tg)GVlrE`SsK7Va0+qC;{vXaV5jR@BO} z4j)b*pr3YlcDw^GwX*uGj@EBivs27WM#7E)gXtCnI2$<%!Kop?Y$oEsR=fq&Spr>) zv=t4aDCakx&aV5;dP?6e&SZ@4{NTOL4N&z=XQ|^A?~Qw#9YLha)*lZ*fR26W?dkyL zO4lVOQri_%0=mPH8Sx9dw(;m zPOKM|HWIL4=HQug8{cFqe`J)Amksse(sbP_@T9wC=NX~ZKZj_TcqJSm`fxmmlo;cZ z#QQ&daKC<*C+J7*o zJN%#U5RV@eY|c&HpvIvT3u>ZJ)e{lFz$66UTW5-9VyvxNCF6(MmL}Qg5%PAwkTyaP z>ij9@Q(jb}#7=C8*Okir_*qHlar;rD`cKIfwhq-=13Nj})2Yy$eotZ*%K`?^xXpbh z4(-Je|ECenW%XCuH+`U^2N4ENweH^>;UUt`dw(-KDv!n#u_S5e2Us)sPgw@XifES~ zRUNVmh{^+8{Jq8lFMKBnvG~=_yq;@jShL|-1{|ViRUJtB-4rT+J-iHQichN4`YREb z$7s~PpBO}$I`D;`x*r5;WKXt9+fgd{^!sKYYbW+EN!KfIOZ0b%dJ%^knK+(r3qexU zc5XmhxitoiL>*AfV~Q0KJ|VE-1RuAJZR(i4fDR zS3N=9Rp^4pXbk)jdi;y56enu%QDa9buj#*$_+%XFUj3fPt{D)DjlWc~P9zDglECYI z(6+D8!t2Zf#*J1Vm<1a-wv5SoGo7BNZ}6!-^cqRc*S3Tk`k#Bo>DuQwB)d5*X=2OFk%^; zw2V&`&wN4hCfM;Vx!qKJM3|8}7Y@;ZC>B`i>B~L#qO}ri+gFT*{exwltUJ%@r@g0o z<;|W-@H%~1ycM1^<$KXX$W4kx8DHo; z4D&y(u%nyrVIu$iag*|lNgrdc08zyf9=j49$D8i7WOTO^R}fF(kik72urlSN&1jnw zzJ#nX7TEZ$yHWLdu;9p^LyXwSCZFojDF{SuqE4sH?(WGaJM7r!@5DU0^QkQs5wV{RMlv1CpJMYL zND+SBpGARFC$Cm9OgVP=7uw?cy*AKN`J2##U1#mG%U+wgK~!_ z)2lttB#|NbYhY{>`8kBu;UIwXb`z>u@$c8|%eT82NE4jcTok$bPsCDrDHnuBt?4M} zLlCKR$lWq~w`TE6bs~%d-H=-M$1D_dpL3^&5~1}x)aW!%vvHv{G=j0%oc(tpi;jOW zsIF8!uy4<3^=-OwW zWQ%135svb1IB1CH;#tG^-maW`Pp%3L*XwSD!xgnt3M z@i9Cs!ul!v!G>jfpP1=66;>8QAs!$1->dce@b4M`ad1Tpzvqx|5e_{UN-a+%a^VV7 z{PFn%$d-5pHC=%b(bDEA#Lc5F_ay7=KPR0@U+<Mx!YmO)QsI-DZmD}%!KOKMsn4;o{ni4`9hs`N zrsx0zsj~30nX>)~cD%25bv^i{r&d(|8r#%CRVbONB zL4}7ziDVZej%Rq?{VCLOgZGv(a^2`r4B`zQWGF(Xvvw2dL?zr-Y8fiMc)wH&r**CB zaYMxf{78|GGrviav%z=`Zga^^o;d-wubigc%nyzm4IP3K9;JaW+Zt-VE*ZogkFCD@ zQ>_=!;+XBBs8M@OGa(jeynFf54T9AV>Z+wAcSWNFwi2~kN^|u^Xa?z9)Br}LryjPW zlKGtJU%~Y`( ztCMFL)M$!^?Sgm75tPeYP{&x%4GQ^Hr|9x^v5z;CkF9I6fgJ^Dl6SvqLy6V}7^mCM zbt9&2tPnwTTV;dTxk>FXwsDts8)wq)9-10!fs2xvaJH7bBe?lPZ$UM860&97(;)CY z7r64q69gG2X62#37oFWG$9|@u`(xrE!Wv!T7x=B;4Mn1^AtYQRlm1gtvBHxD3ZeyU z!IQw}!qpENRddRr(W%KadTQnvD|wZY5sm*PwQyud;mkR3OK-=6rsP@1`Ws|v-zUDg zzzwc_Y!(HtuuoI!(*#P5S#R0tPeU}1w&@M>@`#6`%MpVoHMtpqL9G$Xv>@(O&cEE< z91*JGOWr3KY+AJ>XqOR6fq!=8isFf7yS@OSgLZ;MT#jXtdL1%p&teO*^S6gS4%JUp7Q7L(bI5h;vfglbWcWJCjeqqj z9cI-(&4=E3#zmy1Yy)vOtY4kCj4t$|}|IPf9=ONoHxdyS+M14gSAW zo@w0JDBy4CGk`b^nb++?Y1zz=w!Q|p7Q)ZNb*NfD4}9`A&4k(PJ$!#AcO{@I972CJ zNb0uGCoS?30DkT1ZpksW;ivSw+Vtg{3Pe9EvtgSh*5~sfT}fky1pc{Upi|oDClg88 z{z?-*tJck|=g|(j=K@k_AjsG#d7b{z;=|c^k00m&lQi;_Deg3Fc=7@hGJ+HMwXV~=5O7;#)m#U|FzGI z;bV`39)S-+#u)p%2~%{iRYOSVD#KeYu_3MOB2th)UMuHF61wphv*L|WbKXwTiqLNe zedW`yhN`shEh|IsZ1ofBvRd?8U~+tOyH>7&UV`sli@s8Xf>y_RI7teQBwJ2CB_zBA zb~p0qQv!i&Y$t5HF{@=OWp3?`s4jGdqi>jJRVCx&HdH?sTW3doim*00Hsn;lMR3f+ z;{d?|nJgGV{_DfKQxmFG=ULSuexxer{*Xx-nIuZ8xq7eSa! zdgF$z_8X)gS1;|Q6{DMnf5NRf=^r>8P=_=Rd@j zb2ujCD^0DwxO^Nb((&W@NSl2$l&92bdGMpS{KXB2SXkEAW!6rpm2)AxhxU?Ry$9*J zlAd2_SXYJkR!SIUP%l5H)-x|thjZ^$IcRglPlmu)RFWveiW4b&d-ewTh;;+ah_A~p0u7ZbN>53$2SCsq{xF9yK;al ze;GJOhawa(gdD@d5Pajt*%8+I-^s4j&D*N)E0O(*u}}Edi$}cuMs7C9t8X4FQ8(>| ztdz-X6(|oALh&Rs@Om(x3s;V$tITSK$(f4K^zhx$jHM86mK}Z$pWj0T+R}mNrMyAz zhTpiZVeF1fLen&kSzRuHab`_2wwV8g%AE>}^HXUQ@H+cImA*5lGq>nEeMgYbsT(ea zhDqydi0g^HYlv>@@o-OoIlsP!Su@SxqyqeM_$zKCE>QPHwjh(U-gbsl-kP`FK!?5L zY<-DM`*;=Vp}=6nE-&A(kYLA9E|kK}sR*P|mR2TK^PYu%RC+NKED^iDluP&XV#UU+ z7PHs}GgBjB&m!v#@sUY4YWNM3Vmw7+QvTlOu$6nRJa5G@jrup?LrWB!K0-7W?eF~l zUSm-Czt#5r2CcB60#a_xKv?q=@|MqDjZ z5V_ph{OlwxFVP}+5vp5S<}b z=ix^uEZ^e2j;K#gC=Q;q7W{08nH7)mqLhIp-^i&lJaC~|z&6l&r%w|Pe}!|;=@Het z60K?onw_4YckX**)tY)2y$N2gLR(4U0$R2WQegIX<03K(^bW4GGFvyp`&{&~Ave4l zKg3{#bnzWiX^sWa36uf9zAA=l|C;sfQ=HRB!_*IR@UJ(z6RIQsfVf9Xbc{#T{su-f=mHT6?=w5a= zSZO3Dz*kBeN65E14}667$8VBU{tc_m*5xNR>_%qVF`PN_@)`s2A&SOcwH7v*_bx3b zbJAsCnr}|eW&Jt58EJTk%Wp~UKx~tojqs=JpFISs<*1=2o!z(BScMB?R0QR57kj)6 zH&AF*XVn8015tE`)+C=f>lr4uu@Ab|$EyVK8y;Z`yC;m!G_3Ux z*vo)w=I89{iekxCmp_(TsyOYv5Hmd40{}o`o+n;Bofg9-PG>Wy_urKKGHFX-I>W+N z=gW%)X(z-AxF30T^`2z_O&OYxI+LI%Rnk>_942u>LWV8kMn2b~4FMQITPkt5P}OeGZO%`p zpf5VTJ;FethQQ1~-Qe%5ZHL%kMAWSwlek+O5L;0oa8&ieK9wqWTbwiB545w`dv)GX zy6J25fl~S#0qq{YFa8z7TA|Kc6G8K=_f6k#QN*xPr z3Tc?%zGTb;?hX0wS?|eqgYqje1G*gi-*=K7vw(Dz_2nS?x1`I$ySzC;{j)a>)l--J-tX$BbL|t&`AvEByZJt(voz&PztIC}%!QeAmy|<|Gd-6^%GJ zZ*A?h3tvNL9pX5Yf?%rK~%#&JwG4gBD)p&+ES>{3|rxuzM@j zM&vtX?|+xPb|M}b&9(_{^UwVA+`>ttsPhq>HnF_a9u29ua9Dt+DBwPQ)0`;nA`xw; zL*gR3Ef!R6LdUfef{1DX>+k$f0}!O6PI{LdWQA3Zripz9yjgzD?~F0KqKkXcOn zi{@vPwesZivlqNL2wRH}=Amos)nD$*n!d9!n&ydq{qN$K*H2hiSYCn8;hwZyc42F| z75Nvo3PI`3TD^%F`*%Vs52@>=?e%4^DM{|ZO&>5*1*x6wlk$4-~zD+ z3OAEVlhS_~omD2oFR^*(xBdP&H!RZ${BoEY@vKnLpj%ASSo=m1G)7Ni_`$KKJ_OevI|U) zk=~!W3p$3PY_ar1=yeNm^jw&Ne?3^ECjpva;${Y(`5roor_kl4R4eZ=ed2>U4kP#g zBCc+RSoW|!ad0NLQP>2vqaXS!*aII!yO*3@;T}v&q$?NTz`vqn6*OW{OG6TLGJ65? zMc25UzH&VJOKV4tgYe71Yv0)Kp`|)88cMWD8zF8F^CXg^yeiemZMcjPJuV1;By??l z6YsYl{^H)I8_DDaOPk4SGKtStxPj0t>_r(K8S>a$M_j06 zc@~TP<5ZxsoowRvCsY%>h%id$oeZqXK+;#Y?3-Y3(~$fx4neXD-20$?8aaph85ACa zoG(Pjm3YJa3H2h^9KtyHJX{(24Wg2DDnXOX;A065#0G8u0UILIomqxd_~$SQR#o`* zZ!njgRsG9vX`ZnV_T{)JL( zLU>xhtun_S(NGH*Iw@`~*bxtma&{bbh4P3gtnI$2X6b*`NOy5Gn$q z4Gn^Mkxg}%K-pdFu39OAXs7u#yWT%V`t$=|fOm;b!^8|Cs4doYLCDa)@=xRh@Nnck zt@?XC8MtQ=nu~%_eyp!OXJmPpi&}mkLH(5AXE&c+T<+(4BK0igiitq;1FN;c@HuNI z{$fG#Qydsv9;OIgJJ0mteF)RY?d0{(#NuozUcLF{`aTu!L)^^JC0wyUcb?(DN{a-G za<^24q`3(IMR0u18e`^(U7~dd23|@VRlgy*QhWTA3&(1=y3)P}n>S{4b73v^AmMTa zx|px1M_0ep)UEt;n2FcW_tT$ypvWlH%L9NfSE@E2_Fi4DVp&{Al>H@oL6LY>tmcOb zh#(cwKU)Cn%SMH;bsxs4;xhS@@IDlE#=aBZefVC97i1qokR3hl145~w(diG+1WJJ2 z<^8&-QWEsUFUtNTbCQsLfT&{MDOBvM$CVYV2PK94;xFV>CHDr{M`BG)2YfU@`%ko; zvZPlDDl0i{fuhfifz_8gW4Q$xI4V@VLd9zc3-N8)Y=k8c5pHo^-=>9x;fy6&teF)w&So9oULshIkn3#F@oQ`oxJ-b2Xc7 zw`_V92y{7hwtW<2f<6CwTH+`iq4uYO>5y3yW)<``{_IQx=I!7eWA=pd9FTp>?$gi%=W+4=uZ~j`Y5cMRNuwBF217ajrq!@0yknc zZpm8DbsGxm2TNfIBL0;wuZkyjn{g6j?(QzXxf1jtnDDqlbwAzUxxSu| zX$U?R@;!*1pz&de?Dw&Lylk8UOOLN}{)=y0{d1GSq;@jrEROHDxHMjf*^Z_=?hlr; zL$U|7K-3MwCd%=;`HLh9^cq720cyu|PABnAW6W=F1(iN^t~lj$VSIS?Yn-Bv&Yu)# zM&(Vhf{2VoQZ zC$xw!EXp&2N7i;c0j8|XT6Pnz?07bUpX+p2Yi!E?MtO^|emyV9q1o#kdvD}~nCLc- zrYDwvg6IjmL6|(VkBv?KdR>;Nc!N_QnsuhP$KjRyOI=WMIhX43wk~n8)3;yLl9J}; z&O~^Nwm{Z>&9j*urkx9TQ@h&M%0*J_iVm$i1xNMs=R||h7oZS-tKEmQz(3GrCA4T+ zK(AEK6R*=kKzs0r$@fpL7W3NO8ZMK7C=4m= z_av0$%geW)Dep*zXoVk;0}TdiQQAH~tUU0G z|2?rC(%DJlpm~Uaqzj&JV#6W|^w4D{iNJRbx>mzUwI>;voQFluMzna13@$3ZJRGQm z{>uUspJrr!`C%X0b`f^*Uftl`!XezE0DB6d4#AVEm9|(yDnuE>yI_LW3$Ar*GNe zEa>xjGdselRrDb1etVc8I7K>@dED}}QcW1Ul=49C**`k%cOoAS(9OKCkefMMKt@$aBX&Xf$=-|PK>ZmOnBA4f z-{q}?^tTD``8<)IUiPC;xh$*NiIgC4#k|wV+TJ439RE>GB7> z*^6cmXH>NF z9^5zyDfTi0&CR7SNorxhJL_a>i3gjp0 z+EBsnsmmiPo5Q zGS$J~#XgLumS)N{39#?fRP?S@eJYS;z1y3XIaClttrle8vGyW==UtIWl>$slbS)AV zo`e87R+bFEQ%2@>NbD$~l)HaL~#7s9}@| zt7{nPrU}*Af(z!Pl8QB`Y2BitcJC{4DboJ8Sd!p`SY}OtBdO-RAAiNg{7v{;E z%38LPsy_GaOc;~a^yZB*_>y&t9=7dOCEIcn+T{48wyIHxADI4#`*X7@ZMmhd;zi>sZo*R zw`Ydu5NCp7VQs41)t?9sQx*vYuN9<4HXx0cF!HACgy1Iyy16C__6{d3OIZCYs>~8e zz?PS@Z4@4FZ)Eaue+)M#1Df1%yM%R|w9?^s$C*PxB9~2C(>_whaah8gpo*H6^}8bl z;xc9=%*OzS&hQdc)9}4aL##I%fDNmCm4oR7olMyw65I<=UJec9`VV~O51Dnhpvs0r zMkJ9|h{<2;J&Cidu7&pz;eP;L1*R6E29B-AyM0o-b3fMy;?EEZzf1GOwoHwstcO#V z8FDxHgv2If&fSA}@a@`r?AO2NmkD)DNv4+(UP$8c60+1kyW8l7Q(v@qEmmr(BDD2e zb}a_LAO*6cK$%=)W6;tJVek}iA>Kx5bGp~mb(f&6_pVwvd|$?6Mm*Q&ZKb0)Z|$x; zDLqEzVW@ss!|g``jsouhs8V+znZcGAh5%u7Pa>#aH19s~iFoFXSiGEuvO-K6ZJqJx z?@B>{CN{uattUw~BNqq04+SljsB~XZb#vV9S^8$fZW=d>%I@}VSCqfnmnmq>8tbJs zye{71U%9t|CV$EnE30%aE7Hss2LIIXtNJ<}i1!0vWtWM04w?Pf5_YF4JwtdEjivz4 z;l@`XfF2yu!#tJsChXnUoA)Od1y6yU(B$&1ev2VoNo`{(ZF*jsYTFczOn;B~%hr2c zzZXjp6;k?_@fO(`fVuOlB$}YU)?cj&={6S6h!+yF)g`k~i zVs3}HB$BF_HW0tG0W`#m|CVw(ZgbcY?OSzy`FU%kAyy(+Npk^lH5vIJHX#Pt_3FYL zp-KWM)kw6D$w!renCp$N{zJ!92M7xZ;k^P3!u5)kZmcx6>wr}ttV(@iX+U&M9q+3V znf~JMR!+ebj;m)^;OD zE?T-KF5MOfKCc&P41$#S*k9JbWOTTRD$iWpFj;FEt870L5HZYHOg;7Yq)=x!T3WBl zf6jO1m6K7Ogu9n+((=+vh)x($oRtJQ(4%{rw6^DV@coDn+nD|~g8ar#j@@*yDCUl> z2fDp5+sV2MuVm<3_)NY%B4*$_MR_aa-u4pm{JH;gF#0&-&c#M?HUk?5Ew|#teR-On zfnXR?j44c(>$c=d{wR@{AX-xN;JuWYuI($s*n}scfP?qtf_a3$bh6D&Io2p*exV7q zmIS-i2d3K=P1Jf3J+uG|I2p4jE4m>1nhP^y`|H4B!ln8^WJUm6Brqbx`mNWZfX#{) zjH(CuZ}Gt_;9j`?Q0pG7v4O7YDoIDV*G@?88o2O%so9J7p+#{ufWYMnwj{wJ__6nJ zFWXHq8+{-D&EF*3+XC=Cq5msJ+Cs&Ei?*~GG*h&#{jmjV0{#mnD;II17v@6RQLl~p z7qi&ASg|b@6n;}EuGjqNyDjjMSWCnv&!lM=l9Veqkq<5!gi zzjBUBnVQUhOw7;uSQ}|Qksi)ePWNNxgg_?Jw84=Zgl@*2Ex2%r^^)9EMoAGsEa)wmauIxK84_Buy%!7*m@@Vg(O2%(czGqFif#-#)WtQ`&74w7bk5acL6DS-mB+yR%A|#J=ocAc&{(P z!>Hj`eI0eUV=U*a-H#`G8S9!YW6kRA;$rGZhvCxnuD$w5M~g=G7bO7o9Jr|r{4?Td z`f}m>pRgPOf55JoYR0>j}}Lm_>tNzSIkBuVQf&; z{>eBHu^OB@=hS*K_{ss^L4hihE7!Bo|L)FMN{yDIb`7te+*U&)g5(Va+*8LyOAR0Q zm*EC@{pu<*1r4$1q1omy?lwVFeN1TtEG*S)?TP8Gn7@VMDY-NI7Yo$r6oqtDs(vrT z|0VZtL`lY^BO;!802=p->gZ1iTjyk}XHHfc_gLf_1W`2>7lxcYt*76rabIHX5j?eL zf_B##SOR#Wx>G(z2u7;wov6&X66v>>W?6jOkCD1VmBVY}b*gX&Qc#3@v#;MS#S}Wp zF(tM!e1NKuA*k6$S3+;SYt$=`iX2H-@aeuc4YtlY;oc^lKKorxr1)L#Oyb4f0<#SP z;i`5IDCO*rVXW7S3rqRZO&b_T6f@n-;@J$;%4*4=?|T^bX0Dr=A<^d9EHD6Omtok) zXu7*_D-!mG11#pszQe-xBAL$*3>)bgB2Gv$7nStLF5>Ow)M)k9`2}v9APic>eeknK z6V>bU4n5~m!y5Ae&A#u8e7yMUTy$s4X9TeMRjm<#h7kUQKB&u&wBBQHDt4c%4`)T{ z5wU7Y>Ai_*YfS8D#jjV7tyv9l<&X*iB!Y>3pb*7?QqdtK{JB`zQiNkT90Go}kX(T( z84{YMTcnJ`wbVSJ2g+kxPKiK1kLsq*o&ptN6*KOq1{}Ya5bR{!qBWOg&lBHrx>vw8 zC;XV?VfbrVYNCYRBqROM=ls8(t25bnPPIQai#bN`BTXi!LX2-N~A9sqp0+=ailNVI9k1e!J1u%fWwpabhBM*-}zxCyFq=}eW z)uWIb4JTxM>V=uJ*3Lbr&^jP$B|&K#gW%w=Zdg9t4Y%VTXbr9f;}?8<(R17ID#~C= zp1ci(8>nP(;fcG58USfoxn#PYUCZn3eyvc_FCi`lmQ7BJ^+&BHMpYrPoLw0vA;Jzw z5}>BNH$56;-)(hSAc$=&sm)3|Fd=tph_l?K&s-M^E-eP=zgy9B;%O=p#$-!w7Uv1? z9~O= zYaEo>mkpa2{i33B3V%636&6yBc`(05{qE3kxmSXf96s=4!&_bLwvw#oA~?o-ypc2_ zVE8hqA%~f{?Di$({ROSd6%Y2}sUt#v{i9}c!^P8C9wLIRIpiz-JIldot;3|V1eGYt zoEWVXjB5)LfxeG{A|GXNZIbs^aueFda3UT9G2QD!{UJR@x%ZJ1F@cE59!iW(7qM}7 zntl!U>g|NztD{@QyUkN4Uo&dDG^(dVk-wc0Q z3DS)i%|oR`@(}T2e!1K0DfC{RL-7~kF=(UVe>A)wVHhPUzT?wWO(D)=Bb+7)Cq8qugZo5tw0_m6oy#== z`ZB2s7j9z=xABydT2OJ^#a!SBy+iL$>at{*m@$Qjj+qcPfYV=@8+2N}zoAvHR{Y}X z1i>e?q&^na1mPp@sp~ft79R1ZJ(|nq$TM|(s;tnpVFORDRFK}IeL~wTZ;*if zqfP*NL~gafACAJu;x!;7T9PG$|0Q={nrrTdOzp1Et|_f}_~#eNL_TVcvc2|uq83|H zmfq?8o^SOJ7;SWgnoX#Wk7yBoxXj}lg76z4PyV?qLYiD6=oV(Eg$fEH0C{()?W#RS z?=88H0hmk`-904D6`Lu&xp!^xcSq>1j_wpOPSzhm&>{hoV8=hRF*Oq8n5;$aPz0D* zu(_!>n22I~u^P*{Fy|?uYfNPTsQ$x`O6Uy9lgWj|;wAn}Ds#YBPE_7&F+$o7)=hCp zYWQC5-pm(|YJPzC(choa!IV4gW*#3T>qex0yr!3d518Ilc^ZDKWz_je=3y1un%E6; zw3Rv(`JC#t=Z8DYvp{{BUBb<-U`pI1C&%HHU4a@hITc=({Ly7Xv>TU|`Ofx}Xlycr ztr}M9`tJyh#Axmrryp~Rmk$51+C@%#4*(*T`l(Ljp)vKwdoe`#x{R2%Wa#>SabAY^ zW|)-bdeB=pqF2=OWwC+i7l3>^eDUrBt5a|~rzMHWV8l%wtKd+UWkqCWJvrQyiU@qR z-$+U)cT2h;_GEdmKgBT0@MFUBU>@{(wXbNUGhJQHN@?{s((-_fXZ0ec$hgI8kKxDZ z_Oxk;p*UL$v?z#|KErpb?BO1*3{~RqfrbN{(E7JMyM$nSb*i|Ha;FNz_!%FpQK4zi z%!ELJ`_8(ugoKo(ht<-{xY53nZ^qKmK2FVeH1X0u*L#I-hkIP zJM691u?o-zdL0;`rfRZR6rz?2jja?VIv##-aU`W?RwyQInXm#44g_>xYsw^M*TsXf zdgfAa)mV^q{xZD0%KM}DVBehfSIlAT$MMMpO95IAh4?p$T+Za?&l3T?m{s0>x9jjo zo##mSeYh%KJsh$c%A&IfgxamVn^8V5c*&r^#<$1JGapxC%-;oIy=6`Qtjwm6V=Gcm z5Bv6s-^M(rPB9bF-)B_E7)=^GAJc}SD)JwUx=wGJ*&Ye+eeQuIJpFRVp>%C~7gA`l zahV?>(QG+kT1c9!O1Jg#-oto3%|~n*rck6uxKT^_=(z#mK}y7*sBF^KMmaqnI24EU zK&>mG<^7>KiO0SviW&re9BOf#H2XHCs#tB<{*gz}3qMsAd+AJ{HJVdZ-oX5s9yHZr zB)%%;?HaFP#HOLMmpl{aU0haWB$p3n?dz|Gc?RHmB(tvAXGmzc6hYh%HZ>vS`OVs! z%m=xc5p!4G`1uWqPLfwHrK+mo+R814Mx(iHGaL~MiABGL3SQ`Mwq4UTeg6e%wVqh% za1;JqN0Zw4PmsDV_fpV9`1QI$*^y#v4)td{gwSO0DKKlCdqm7JklB-P_{2*l{-jsu zu0CQ-O@PIyVKec=)EtF0>TMd`wmZ*GEL{Uj8P+%aX?Ua%YQK8v1@kO0BHn5|h1O7_Rg>wGvC`?jys< z0%$!C@KGH_;o*-R&{5{5l zoBXTK=_VfA*`k6?kF|R0%w4Dp@*d=1KNz88%By_kQwHmWM(#2^^pN-Mo4=UgNOtG< z<$RNiZIIDQK{@7hlDFDrP^oKZ^2CpeHeD6RnWE@4Wj^?1=T z$d9lh-8=rnHLT2pTOZBvr_==mn`fNg+7FKery?x9m|+m9Z|y0uxe9ct-5Z(wHlNLu^C$QnIEfzm-(4ys0E#1fFcpMkSL_1^z~ABp?@`L4?2!LP z-1s>J-@wm@hxQiW_c!<-bJ{Kml*?p|WTZ&m0Ke^e6j-sw9fC{oYhlEYmvk$g#O{Xq z*!KST8>G?v!<%n*Y;U&ePSXE##P`nOr2{>EBs)v~S$Tu$%|M`ma1GZrpRr@3GGoJ8 zPZxzlww|CT8c9t6%xm3;58E=Z@BK4CvX1_Wsa*5h|38k+-aIGq=9*2Z&i3+}=wS^5 zTV$>4EH7~Q_r*mJ_Ku1mJ20fMCyJEdn&>mT;rxBMPpw4Hm-ww)`Z0~?#0wpO=XxYM zy;q4f_G5BUw?kCS!(VN6O;=s8NlMyqZ#+Ty74=7OXM zNMf|~ebn8oA(nxO_s!r*5U0Ka?%%KS!jBQ7r2pBTWP8Aspr%|W6in_{UW1JYF`G^z zR47I30l8Lfw7wq9@MHTejvcen^-q7f&Ke8Q(lUdrc+hF7;%wM%O90Jk@B7vlb-)ehQb2E$V&Y44NI^3a2Fnaby}_$mkk_oTP) zF7t~!CfXrsSlpwmh@BJf7V)2rH{Z&5X-m@Lhb+fHLs*lqfqzTC^rp%QMR+?Md?h&8 z?)}l)(8S*+;%}D_Aadh0xoGD9(2_>jocc5k@OI;!h9-XSgUxLsdN&B$0_(u^+WgNP zVP8X}9~azy=PVkU@h?2*(+|=KLo0IjcZARnGW_J7c_ zPN3${zuVQP8xdPQZ@yRXsUw5{oyPv@eXcv!LV56r^I>8K?xq8vgcl;EaojQzWBOzE zi24&;5#|GA~1iOT+4?;uqR}jwOjM%_)?u$ihuq@!5aLfuh<=bF zl&QRZOt(zsbsxiiok{1juc{j;ShNRTi*TZIL)9C36gzR0KCxiD0?I3nx7P%3$?pu$ z7%e2O?XfKrDB-Y`zOUbVq)IWf)_pWP<+m{I_8#_|%-?2Aqa)j^=W}U4y$Re%F9wG+ zUF)dkWx9d-x~7^p_7cYvg|=f()`W8l{&iyg_E}2xp1Mim7HqR-IpZX8tpCpI=EM6Q18Kw$}Wf=eAYwv&G1uD!;V+*o>)&W zfEPU?7Mfrp@hEVubg(d}5bziq(!l+EgH_}`yeN+s9}l3B0TpT<{46VB+Q5wg#rpPE#Go-JH)tX?K=eN>v4o`h-tO#27c0HxKwdW z%PbI{pPr2Uy%YHq9RVo=?V=fvgEpCS;1F)Qaa3fDhu$o7qhM_Y^&PNvmAYz(db~v&ZYp60I~*uYMkDtMA2r5OM2xsM)WYyDk2SFsvujc8-k5~cTcl>j=e~0{@Xz? z08qeavmy8)nEMuCJFq`&Yo^901B~#=TsR#hjAJc40?Z$%=(JV^=k;&mckd35Ygx!J zY2V+2jjfWIqWHI2rCK=Vk^icB(^Ex(#wqCK7Dc0SvpP!1>U%;AUEkXM^X}ZV8VkCv zudiqT+s;~`GR*W$C*0K#z??5L7MyYUlEnaE>IM49>$pCt5Ti$<3)*U;Os9m8UnK9r z)aX{M?}Zy1Sp2?}nEXim-C@rlK@;B=XudNLAFy^BR`J`L$S#1*&)8H?vIu9=d;5hS zY&y7;>g*I(GnraaDi#obyco&ccHHDd*b0a7a=`=nCf_`Rd&afUb&It zcL)+A1Oy~TO1E@}BLoIWBOQ~D5d#K$&iD8H!)u(K*W%te_kCU0{kh(sYp8p<1YuY| zuNKX`%V&h})-;x_<|(_nRpoW^O@IDPtmNt*L&6FkygW|?C53Lb6~?kSfz$r^9&MYR zFbBY4hB0fCg^zQmb0WW}?%6-}dN!MOeAIHs?j_GRiDCD8@NVFauxxYY2O2J9;3HI4 z`!?e7>|iWh9;##?9LW@lYNPiLrzX|VG~sd25#mSAFMH2~{Rf*3UVfmJ#7heBZSYwm z(td9;+&B#rWr`TY05f-1Jr%`xX>_!huN;e7 ztJGCRG6(ywvhfCvas}{I>(SAl!Ug8tNJc)9)$%z`Ii>MJI<#1Tz@ryCwm(5X(y{_e zczR z#tZNy964`E`sO1&!M^))@nC#C+o)`fvbN1}%cp=K1MZu*=fhIb3drC(`zon?Wl2c& z-!E;z+-$$hn?LCgBJVCSZPWbVOh)g1JBLO(mHhW+&k=ylQ{WBg7qwmx7gIoV6P}(` zQzYLW`cE#los@);Kc7470SQ(7qRh|=%fPVGh-~OLW#S|ziz*U4!|`k{#4NNCLuQ`p zQuOd$(PAvKU?&~n%+5YPp%QUt@@J0Z6j{lN%sS$^Dlxf+E?e51ab|hW(px?igtxfj zonP|3-sCLb^yhqS`LsmgGcqJ{%XX9+*FPW9V(1N|as4?SZiH~QBN|KUfc21j?-F)Y zeG2A!Kd0U^eDW_}%D*paPq^y(Tt0m1*Yg`+6qnP_Nf~LVJozaz7Td>=x+zv2TY+?2 zC!{F_tUq|2*ffJRKKCqqRgg)AP~JoK8ahIMaNh9Urq%KlUbvn-%Zlb~e&j>*pNN>h zM=B@UXGF1pHK`e5krOQrvr_n{7wRfYLEPO=yDo~l%N=Kud0->4w=XYTdcb)=rvKlQ z)#Fycp2=h(l66@v^_QZeZ_(t&P0q5?z`v`>+2*e=q6rSvJFy$=*%*$Sg#1$W^B+@5 z(gtvjw>Jt|+^zGfmw|15-b7HR2Hf{|IV8|=ble(kwR*lO1FfYj3}Y-8=nlga7Le1E z>Q(p8+x`gxMay_vbC)iF(}Nzgz|``u1UL{410Gu1e{kjX!Pj&bL)vj2eSordlqy6FzJs$f zlLq{fmaZg)zX?6I++3wcI-fG_+*5Po-EG_*C$(jsDot-`^erg3UMYyukWgb8d9OiJ zQg~n~kBrGU-9~AJoW?g?qOtXE6ouZ?BWu%765O0Oj!kv+o*b;yjGM{GzrndOzfRs$ zm2rKBL7nX#zRJ$SC~>aybpneJ2!bd6`@e4~P9I;wA z>Md7{0~eh52b(yR^?9tzKZl}`k3@Q7)hI-WIF+x^l^t4%^CL6t95`Fc(`JWFd}`EI z0OY`xO7l1Uf)Mg@tmc1b5~+Fv5??jW-r^3SUpA(WMV{4_IL!0grQ!x}-JUm0zR5ZR zAXIF#FFukcJ`J>uQHV&?A0QU-N2JaEsO33RXi4hU(Y@%>2)@PjnV5dy(!9vDc|9{y zJZ6<{TG*J0}g{ zNgs=Rm$)~tNu5V{IrQRms_jIfG_h30^q+mb*uI(a@XzJ=3Qs^M%mnEfj^Cd8xkPp+ zVE;s3Q_9@YlGkgvvcmOc<3Phi!%AitdtKXPY`5Cf1TggO%P`kL5`nRRUXYZZN!k+r z+h%rrPhPO!I}z6Tcxx5fF|@k*U(RGN zC3DZX3&a8hPg8|B7+aSS6dWUJZJ`18)RSTTEsLz$zR{BWoe!zL1&f(E7K-jY7U`CX zXry1t$fG*zq_6y`zk5sNdXd#T(oOjLZ*_GKT|}DX9zod>1KR;ZZ5Widbxq zVx#&7qQ`wnPT^~kXt#`Btmj~+;~(w{4B7FvldAyjfO{I2@WdOA0Bi;Co-2Z{SWUu! znDBY9oYFhOW1y!N%Fagg=v^H3s7L^l0D|eV^v)}23kN4p4v1t(C-dvjKm#=j3KzYF zOhw_SFKptM;oi&W3TxySzCCir@p%{!0lU;c_mm8!EgG;{>$BaF9<218^tW0nE)oTW z(p5eGcW>ZEpKr-4&{&9*P4Mox9wh%~bPEKg|ayEy;x)+3d!7WGk4N>$r z2QLVm?_Oz=FG%c->7-SQ5(S+rd|^!e=P2FS#yhBUQH)a38aV$Vu?w~U7ru4;Km2S?GpuFu({m~<|@h=YT9ZFtKAecB8>K3a zt3S=|)ii9$PafEEWdc=%F@{W_fg-4OlB9qYV74dssA$wA6Q8%6=`8VFcba1%qRV+R z>cd;1{MoZurdU4)UigcL=_29Rs|bZHIoI5DKBk*D{(k{2i-K;eo86_rs?AUd@;)F< zw)Afv3K9^6H=_7b$R)It|IIg9xBl=$^6#z^(eb3+Of0gOzGvmXgM`VM0_|TMGIN+J zZ}2swoM1i1#l41NZ|1Y{IVkvd7@sCKpO2mB4P(^Em9L?VB`4zV;f%lf>j0C@Xne&@ zHeEaQ^zNZYSf!)5XNFkGq;<_H@q(YvSPv?3e7+I@70lKum&x3voT4&r6rx>!ipBG5 zyEn#nr3Ss3{fzGShYf>UKL(#Fv2~xiYoQXGjLjpGqYvFixt?c*;*693&gM7?p{4!33 zMv948&E0D5omuv|jIs8D2o=ZE-R8$KPBGJHAP{b1z?d<=zrmdA5#P6-2nw$M#1Y@b z==(SVnQPEiO1YW5TC_1oKD&X66Pz`!(;bpnqi@=qa)R8zo0;>2{wTLkcZNs4dx=qo z2i`|u7<@D+OaFOJa_=d&MZGO^HI^{w-B=YvaR6;eldNqvYqEq|wM$=Oy0i1P>4E~D zh>M>7Las2mgleTEQO#vznPGllks-d5AdumARkIuVm34E?&wW6R>Hc6s}6uX_!6b zx=&_!h(+QIS#6T@pkGBnci%>_v-G3A+C8^V`r>`Qh@EyH=IV%B-!57Cwe&vrqq#@y zAft0mdSD)tTG}3umHw!A%`cdpdy*E}TygDMZ#`(8K+)fu#^>&%HSd(zl@sz!Lnhvl zID7<=<6bt*dwRZi`VAI>PY0!Heoz9VpzRDdqr2KPMen4x3x#tOtJcST3y8Y++Yo&3@f;7xBPYky5I5#YfK&}A2JXZ)nM zC`=+Be55*r*$P;dA=5;C4$M*SNG^I*FW+Ro!SZEPnMsVr_*teg!rqidHnWjm_WOzL zU?(sc3Tu-CtL@KVAMD}?1-57`n+FHi|8!2w4)A*Cy`|4Mu_-ySdW4pFEUWi9m`+^( z6}mINzxC7c-4Yi3GY`HzjO1*Vo9&lA6h>XGCCP^ZtM6hpNwuUqRmh~5k_rBnSTtY_ zFs)FXAE&`1gvFak{!2LIz*50G5}n{)&h2XqzLMUii_Z5g3J`aK!yzXXVzK>LU4lxe z#N3nq9528gpnrFoU|0sgpi%q+!A*-3q5Z<#r@HlZ&HcXRRwl33bF=E{;wEDlQ?^_U z<)lCGyG5{ZUV8+{>M*)qG0%IZfy^`_+|B%(D5}La_@3s`BPSf?8|>GhQl#F_gTd~j z-@1?{j453kNu=V)>$dveCs4TE6GDY;+1s>Cr28|h1CS-0LPg$%thuTQ~tDpcy z@8BMuxQSmdj(g{8QUTAwft%&aB43X$Nd~x*U)LBdY-_rOsg^vo8iQGzZe!6zp@Pg& zJN>hB;U>~P1AKmw1?0UTHaI8&N5wKt)aV7-^>3OY2UxsVhI#z#ZGm^HD;{-XSrc^G zad0$uomf8A<)9Ezx0e}J0kmqL3&5mH*C={HKK|rQ_IgKb$n!?~$mRc>AOz*i{KwaQ z{)h>V`CU&nh>xc~;z4o1XCBYX#A|CeBD3UieFJ$h$U%35Z0tsUH=DuAGkNW|>+5TZ zoQkG9cDduuNhzIBCw%@6S$UkCt6%9%t(e-EiT z@B`B?*^V)*?#0)!(8}{@%zyjscp;cu|4G^eAZ*&E64hA992(i|&u6{~*gPw+DY4%j zRkDg;p{3$VOuJdI?q-t`beX@Pwvn=MjikHyjN5L}QTi&SY)q2~<8;cDLs#;5d-^{o z9hYxM8Q8yISS>+A3-#D&^LCI|CIcdtL%^kdA4e*#G7QD&?6Aa0*|EG$jL-xOv&(&!nU7{VE#naKGJPWq+4FbiLC`bD}PD}?s( ztIj&}E}^r*pJ@(`EiQ%TkSU@HC0cR4R5oB?F|h^g>9}+B#7iYNlDjAeC*S@R&!t)~ z_tEIj)EpWH;tmVZEEwURH-26J@(YlTV0h^&r1ss53{l5<4^1kI;uF_e=<4&gREo+& z$Mc~;3%yJ;uQUw{m~pcX8xC@Kk@>!J6`ba48;X0lB}^k!{<&gF=v{Q$NqO&E8gxV1 zVFGN>A=*+P-i7d-%uw_aY~R0R(J?0?mGxVpTTxcsi=K zHajx1uK~kqwz{VNCA7;XBVz>CX^1e#*Twobb$bD8|MgUXmcdT=t9U9^>qB_6c1awGL))8kU@%3HIN)!354^$^iMi8r>z&LsI2@UTFZ zvCbybgqB>m0ptPKQyNtlRMS}!Lf;P?xfm;1<^Kb^8d3ooQrF&c3a#lO#u&YdNqYC~ z?DLQ|CDus#{7aKmAaxkMEazDYsw4;(ijHjUp4IwG8Z@DV_6&6xR}t67k<)XF_CEqu zuQ$|#l0Jn1b6wF#UK}<42$0^(1UY?^fm+#IH3%&p1_HG(N#f$$T)mA=E1SU)kbE z_K3$+XCUeyBjF)hFVp4~)?}m4K$w(FU$=HZMzl0KfG(70y;lgbVPt=K>9zD_cVg&R zk$l8+#_&}%xhMA>*4uS<4ARB3aLnn;%9}4Q(NR~pk0mr=@1#$iaBe)l81A?PUNX|T zQs`Xi-%5#cs&=N7v;ttVYQ-!e-QNr^lyL4d)tv_8TOopa{a`|dX+AolKolI*#{e9~J*)jUxgB~D{Bd_AU-Y?kGD`Y*~n`YKWA>?>(5 zdn_ZsiFu&?Sn%ECcUFdgLU#|N)81R`Z#B_+mb4Ml`aa~Gj+?C^ZB|2?vdVi~9pCAa z&>%0%o~*d)eCm5dVjZoL#%J<d(d$+qRPq#gW>RJ8U#e@iS7om zSBvUGRLbN4Qw8GugCU+dY7x$$`V=qdnVH2nx0448&jDHY#Vea%Zo1M91Rzje?m?Zij7hPcQ&RGIFMN@U~E= z;rWcRUriyi5I@fj#hCXZqR8WBNFupEtY^&F_(cA72xfF2{hA-BQx9sTR(Rcv zZNR%g2YVWh=`*IJYhd!=9@*%!ozXYJd-YcASB%Czq9**ME?~S7Le14>+kbDI6l%66 z%%#|p@RNXXppO@uj6)e`BSM91`xRkz((64g_r#-xhrvm0Y1AFS-EiU1 zx0AHzFR(E24VN6{ffUx;3K=jTeLMKxOH0Xs-sXbXfzHhrfhQt}<&q(sRv%y_e!D)c zFWvT`xwlVSt?d)FN55w6`w6X?5wNnJ>#Zc=(ZC>o`F}ro<}atO7`e+!4S1_nxBHOP zGbMb$1ec%!OHNcm9D_${*LBQK3m^H!9<2R>B_RsyTqQQPWO7 zHBX|KdwL>U0Qt(kF*v#g z{$79b{fU!&F>_%#iqO!8!6BhkO(^6Q)38(%mCy}QNKS?WL*l_!Co|8T;i$*#nH&eo zBjtj#QT>&F)34^a)9j=Yo5Gp-)U8pKRawK~<k~vuQ$nHtJ7J`1h%?_mf74dNi85m zr&u0g?@eONGrkX_q$H_;KCn0Vcx(RCb2Q7v=b@gaNMlEXbp`z9;kZVdL z#0OnySq5Q>v+2SAgoAh9Qs zTL9T#-RJb~%HUtFUjSi6_uqK)lqO~m1)agbid^Qz50*bHy}v@z*(B|@g=d`%qa3pp zdD@;iI0Lnhmu1M%6d9I7h%4RQc<$9r!PSIcS`4%F`x8)&ai6Rgs~~qIT8HqqRYxqO z(%S1xDK{)cF!rQgHlfWG;ce6Z=F$3$7$oeyOwNU?9%WP8@fMyTqRDA)dA*3;(O7Ez zSO!u8Dn=Bs#~e}*t@~8C2tTR? zkJ_v~;%Q5O02{bnXNU!xr&n>1X11v0d9yn>_#o%uJ<+QXL`#S%K1VN8fMQoE4ve?- znhb+P;+Nyld1};g4x?qLx^2@mD%7Z?@bAfZ(>_e)I)%wfzmKTdM|J%WtD!Oz9Vfw{ zz1cSO``bbq4ID3sPSkl$;6ciFvHfe$h}IbKSJ`6$LO~L&mvPN z>6bxL6r`aK1Q%*0l8e^ggnm#if2jLnk2|jB!=TO*pPR(bmAa0v1pOR=i*AdfwgYTB zBxAXJnJF(8MRHvhXL{yxkZ=6SrN^#ymyj_5Zr(ra3$^Xk?B&Y<13Cx)OCbfD1HYT8 z1~vH8fZY9=f0xJby>2#UMW+?wP4N^;vv=6#XG&fHT01;lw!&Xd6??g7zh z@X_U{m-T%zaC+_Od@>}_D@xVkzkmJg;GWNzmPI^s(nGe){aNRI56`pb+AZu$!?)S| zzTuTdP@m_pI0q;$AVFsW3UDBuJkF~aXJ^82!l%U8Bs5EXYL}1$Fw79L=o=^Fpnnda zl=z%=mME|JgX01zJH7w+kYQ$j`~rBf+_0z8bMF6E_>AFl0rzUT#fUV8C3I>t6Kz>K z!eUcur?IYZo0O;>8Xl5sqebZbV!SqicsFYQ|1~ss zNb!hKh)wN1aa+Lp2xtH*mV3EJ#nW<;Ud>2rL%pOaU;I_}9d|C!wRNg?h^?A&_E)RR z81d07mPU{nxxnE0`eJ`W*cv5OF2d#<^9uWv8YX@Z4M%4}L9rkX|1J zw$>pr)c18XLBm-N>>fVBRRWkIz~`)e5_(<&ZPWBIUKFoAwG>+Zo5g!bX0wlAUjL^> zlT`rh#sa&IPFyuNGA6kxCM3HdmusuM*Swulv`GOa&8NLmJZyIbtoLn#6S4FBp$~Ox z0^`}9R}hA!n1AGB`W|l?ij4O}CbO0oHw5B;{26iVYW>{e8!E=zDEGPIRPXL5e;DCM zu4VZtJHp+=$J;%phsin^SORLzRw_&@aZ|SZH7WI90IwbN`V~*${qgL|327q_nwg0F zfLRsET4W`)m`nLb9v?HRj?I~fU8ZnNIy+XM?mI#kN&@vQ{g|{ffloUZh$MuH!C_ zYM=e>MfGRcC&*-q?3;mvxL#s(z3jf#&1Uu6>Wcua8OZ0QQTS&tL!b~9K42U6dqX}p z_{jSE(U9g)DNxpcr0hC>%B?1ku6uxy<5J3Uqr%7s;^MdyKEj~M@u(oF(g5+#;nh*o zNU5lBo&8CsDQ~_B0z2^&YbEq;Av3aYyda3>={*C9n=j*M{#tCS5;XjWzAi%Fm3dB2 z=ITWu@?5ld+EMX9V5L*4hT;%`i)wpg{G9lJ^9KHAV|a5*ZqTu3A94(M8AT}QDBGSt z|ALprk^ddtnoGjVLF%XY;nweg34W@rl1OYy-DYMv_ox>wg^t{RLvtnvFJZkC10K?F z1qFyVxbnouw<6DNC=R%&30|DZ9|oL^*{ZJ60qu{?x8bTd7*B-&S$b((|HnXMgjc&l z^X-joyJL2CrTge^91M{GtP`2%mtLd1te>I?g>JfJ{;M~((vAUfOFsb4 zXlI{1eTqUPf~OylCbf#4Uw8eu8CW|a|6sqnc(}6^i$c_Bstq3ZW6*ZHC>`RFZhcoV zN*(m%=uGVy+MDv(f%zR1=6O7Ofzq{#r|4(14MM?!@;)3P_A}7&EEQWW`f1%O1}%X3 z0*>*?SB<|XTuas{;}4)brNxC0`zhr<)%-iK_|Erv1TbUlRK3fCKEh(i+(g)&dhKv5 zR>Tp77oqI+x>mpW^2s@VoP;Pyp#UtJmb&aq@bm{cfB#H!4GSB(^M(cmx~!O-wIWOW z?qrSc@!7r1uUuD`(_!s%bv~yPe{$x1F}C5;UUR2*;pZvbIwxq`aPb+|dxQ|R0N5mO zxoNuGWFfAU1C`qK-8c5bbjE|YwI{zo;CLhALpQy4r5FqZ@$SIUkR;^iB@!+Apa=wY zN88f#+IzzmS4vGkTN8CH0@82zDSs1^Ik2f8@ApWuA`^#Zs}EKx6&A@fcqWte zxoRq%=@|ybybcSi3d|) zDUP;#F>=^;lsGV+r>GKoG5|XPxptaHMo_0IVfTXCC1l5fH~fX-tXw&AsL)=^cs$io z^#$VtXr=hN_LWa2JSVP3)8v88G+wY=skA!@p+|ltIA;Xc_`(?AhjKB^e?~tN+6CZP zGCuCWO?7zvAAjBc{qgr8K9+>8%T-K@XeMz~SEIQpq@ z>lJR^OA9~l%e#*Fp=O2uj?s1l8^Tjqtpx`+jyuQuj{JR%FG+B0M?bw%8gO=)NX=N2 zBXZj;;;I@~-%^I=6`~$NroqToO-&zVQ!^feO2gy!1#bKlGSq*VE^y9y09k(?YM)hr z0zd?MP`cB51y0=V%y17nZwRAUfAXiRP@{^&D#Fk%)9-W!aR((S>b}6rJ+BJu-ihnt zXZ4FjV6G=oz@@aG&69!@t|6O zaQ)UirBHA`&|~yBglJyWF9r>{dyoLuHYME_n(XGeoSRaFfrhw?pQS1V?}3@_O;9pvbc^ z<>CFLdFN>@ab;5*qouMfpgW>sKIE_O_b)>*fmwTb#CSIM(85m$#B-xvsy~T5*}{$o zOIUO`_^vFabz%#>q_=gQ-o5=WUpqbx!v7$5;Ch@@hRr^J_#9};@I z_6NLfqPFr{o3vk*?mFDVX}c$JjE`U&S1f!?z2cYJ;BPww1p-9(nIv^p&zXAkoAi?k z%4by?i@z8rgBP`u!L$LJ*!clYT%=1%Gr7VS+cHKzn&H)1!Cw*7kPm()@HcTNmEJ;O z?M8-G_TcT_S715d#VUH+KUdV*4F+=`0Pb~A+`Ma{dq|H6=-Na%xoJaifDTKK_|Ijr zy?@*(>w^@`6tdQ(6dVC0piTj#baMS<+3efq%VunFZYzz;%2S#k<)G?j#jK=I>Qsy$ z%W#8&#JBhdgms(3Ryo8?{p@`~sSdGduBkj0C8tE{e!erbtiCmCNjFW++@EyzN_F9 zd1DB?<(DRId0k{cz?dz|V-;IC=jd-G=qnvosT)fYem&EdNl!yDt@7zOxti3unv29u zuTS8(PA$!LOJd?il|q*PX=hWC?;fQ(L+9n4Mph*gh`Zs3$t z{drzrY%iDtGmNscTnQiuR{(1EhPQ3yOIA*Vn>_&WG^Tc;Q=I>4$-#5UXoL4z5hqVE zp338=r$2tF019cq0g5B*r)Q3N;>wX(`>Q~fnyr*cVmtBB+l-Sw7%{aL|HpN$M9l<< z{%;{(g7sbyX?E*chC(kV&HF0;hKMi89BFP#-ik!nnU~~bOKTfmGvH2f1v3&Eh z)=fxut>OrpcR2xJsQY%v!)<<62=NBJaV5%{{qW&JkBI7|*Iird{O>QB+kS5vYh_aKy9##Sz35J$drzQ!xdz zUH%&MwmHoO1Z4%T4f|D%)jnH?j`mq^LScEb!3W=6jRE|PU zzFd#pRcPDcB|T8->d;P_ipCqRZ6C+;1lJ86Z$7EVSzjGwdzrcez^*XV`bO`Gw?gju z3j!&Q6#QINQe7*8?v!5o5nS1z;pdsh_bM*|fA@wKzJWNWn~%f(-L;Xjw$9CfT>{iX zr8rr|fKmA+kh$ple-us)jzIq01q{!!Nep%YxTo0DkO+$|@qICdM)BM7T}&s#|vpRXS&hOTC40rkk^8TOO4)b*biq4jnN zYFr_BX`wKDIFy9Y={`I#x0-a(OQT-+oenFeoc;QtGQsT?N%!+!d_Z4n1<98V zmg|5QTuMb9rk0V=baR5UCGa(wQ9Tg?aNQUwh_Qs6L{!Vo(_e_U^QTk)_@#c2aJsB2 zae4>-#kqWWo=$vrWP&w_z*EyY837eE^OVYKq9t^N&0d<5+w5HIY>Mzg<9%ncpK6^$ zPQVg4D-murc_X~csm&|j^4>beU$KXO;nw@4C{6C7q1P483pgdB^=InqsY9PXb_kYw zq4&huq$SPHmo#1HLQI~Uh<}Q=bx@%9r9aMgzK74P@bS^twx4zsj!Ln$_DpP_5<$B^ zHNRNyV%^(c{5WmmKcO6Gz>+7A4M`}L6q^fZ7SUPZTkoA4j+A#Xb4BQJ^Pcv;fAI^c z;bc9{!O_lI8~T)w~Rrlh4D_l7njJP zKv8q|WoPA`Rt7&~du5{Mu$JnS(8V02*#vs_%KZ6qqtl7qO3AIXo`^NR(B4XwRTR9M zuEU{tG^VGu383`p*?9c@_Y%14;w)?8X;dHfV6-Yo_x2qt&xe5efdp-s|F=}aOWE#= zcth)V%9NnZiHwJIv#)d6KbhG0Qj80t24}k^@_gWlzh#wkD{@_kFRusx3Usv#orweo zlssH{Xq@n2r21QNoG!%)h;F1Bt25A|&G7AG8jPg?jPI?422L%r87~qDcSD%hpNxmx zoLx;Y>90np#0;v6IGy_cU3M4Ic+dUA_j^VC%hGEq0Kif?T@^K9=E;iuqs%>OEAM*` zALST4`(jC^U9{S0ppil_HbIGK z_58if#LeG+K*j&i5hT?Js}PE3MndVBtOGWO$W4A3;Oh;GMdoM(p2WR<_fuSCbua5JUb+gfUt02ZYhRn1 zcAoy8Y$tWR=^qI=XKjJ})wZ8?U9~e;nBEPE1Bj=}$8wtXVe+-$Fr(v?)0y)@2t7f6 zujBDB%(KlHv>BF^aPz6~r^_ZNLKhkmS&5s4UvugG^F!ewHKu ze7y-cJbI(?!@e|%w;Y>xQ=&9j(7%B3!*vLGKX}*QBfC2zogCE`heE*NgNQil07d7` zOXM%&&oEyKotbfo@5GW*5~+a|LX5;Bc^_JC7>T{KE<{@O_c$1psh>C$WJpYQ-dL1G zWf}Z3JQ6vC&38d{O;>16;;hLpk+Sq3<|^CU)`TC}pE3#lXdFBO1lI%Y(R9tWseJ}! zfViN}$O*)=>kjumZ;81#oA9lsDZJqzjY7h+3Hlu2kFhoJIKc%dL=j^TF1{DP!iS5zk6*J-1H=q%_0NEXe?~&RzHU z-n~o`?nuCb^SVlQ_s@}@U3Hoq>E%~Q0J=a~FrbrYLi@<5LtM!I4$dZ{Nl)8Y`r&}g zG!vBa9n``tNa)8pFGiFeExPj>ROp;ddnoeRyp^%gxHqq)Mb)&zk}$33FGcH@B#cPf+$((`mW>;dq0`_&~#Wd>M~At|UG{RK_Q^YZ3&O zmPcH%yeIIQ@S?OQt$ejo@1Lr3pT7E*D*1H->aK?5-+Z6SM0?|RQye@pJoEf6mFTu0 z;19Q?$z7$?{*pFnTi=KJ`?lsRS`?XAP$#(b{Ksd~BLlQp^)hfw`0Ix#jNgQO-p!BV zp}xdVV_RZ#ht;kYD;6}9e${s1W~rw_e`2U~31iY(h@Rc=|%ZnIpcIpv_^@>3$SDti5stEKGb>c5<$W#1XW@VhJ5IlOH@ zr9ih2xf2zg+$Tp}w9~j2kL@&%zkhL-pP3to{qXjeM84qr$|xY{Y3E*h(nZ_P!^wKM z^L@eq2{0UkjHe{4-6IxoSFssgaqn)^?91zsao7DoarYWS)xWiMQ(x4hYm z1K8C8v`E#WC(uae`cj^DUt?tSelvptT)vFsl^0H{O*|GBsnqy21XnKFZCmj@vlM&_ z2BYnE?_865NZC$<>CjFqmvDcfU?L4Pv*x;`PZ&c(j_U~-J;?EH8@V~X#PedKN&Hqq ztE`K>d+!uy?;^fUm`Nm57yDnr@Wxi4)H`}Q`qzhyro2%-bOIu8x zjn*0KX7CfNO%A7dEJT=+WYauQU4F_6< zJ6S!zu1sp41jkPW-{v?z;|g$e>EX13P&9`Z>Z9)TTt_C5)u)el^lPdrVoC#j9sTFw zR@yJOl^0HGq3z$lP!qmg2jr%cFV7{uDynlo=*x~n*^eQjRFEz9JTh^lO#Q*%oZy@t zeLw25>1A`|4rxr)#Qin|Y z`0(=kjJ=d;h|*z)Ti?NzTEe7fX;*{|BKHmVdm|E9NO#9O2fU~s7!doA#ht_fjkSE3y@XB!T0+-Vy%UQ=_immkv zj(RMNjog{-BZo#=f^$=JcRk6QcApMHr3r*@WfI^Z=Qv$(>jGyV&sIKLqAxzGBOFIB zCI)YkLF^jzAg7D_H_OyDKObdKUsHbMIsp+9_v}Ke1(vH+>O+SA9AMuw?6-YOGD1EP zPiW+ycQO_xmB1F#1_rGB`O4RC`YO4>YX)7RAp}pOeki>rAer&{cO8mhzvK|cArmRnhGRy=ER$vE! zZ{NoWGK+1sGJ@p<;JGuw<0$%ek}GOmXy8VoqD=2Ms7;J&(O_RSF4nr2gT?+wh7Sb1 zt4~YrMBr=Kw=xSCL5%zSRexP}UYmoLK7xPJfpj(2Ltth;S#TH|Few~3>cd3q_>%Xt zuijv$f6MdHM&<>kR9XMn4=+dc3G1MsW$Av79IiN)Zb=C0GfOAp(p@)=e3kDC@s22kgD%U}hoFy= z!{NN7e#{oIUVr-Q9`eX*tFViIDXpv)uH4%)@ndqI_nv0TW%I@f&sd}ysXcl+*8`h? z?~S%YH@(GLR)D7V2g>$hsv}WnRNx$7gD|(#m|wK=u&yxdZ#y0)aNmxnxtm#!L5`tj z-~kS3>d_n5m(M8?6beBhVMpd0P^qp!*65-_<*9USzrEKGJLA3}k$Gd{?6qs-ml7** zAB|9Xg7Vz#5AbKq zdcs*vzr)0vYWnPt_HHMfW(Htn!G*8eu@_|L@X@f>hXkL;Z4Ij#zCB=AIynGUniQKJ zhTkzCI!em%RfKP3%{6*IDy$IX*pjz4ErdFnu{@&1;lBb{|E$7}74+B7TPi!12=WGr zi|G`htOFpzr_?)2-1c7|cUSyF2=c`;KC`0-5K$Y+(!F%@2A`AU`MmZ*g2NKPgw#F{ zZ?5YTB4^bi@Vs~D53xi1apBv-8K%V6G^#uLl9kL{mnFpw!Gq@d0V*mR5YzNw*m?0YW`|H?qPz7a+b?eLJ zPnB=$RYL3{*Y6S?vVFwIZqk*lN6_{YAXiT9`>jIN6FBw#>7i}`8L+2yzbU`-v3;r7yUT-5+lZF>>E5``>6Ce4pghOaB`$zD8?lfVwRXGH0n?#%mue5zA!YH zX=of3bI^k4ZInZEtsXJkW6_wnFsH%;Pw~|zZ0EwH6v;93Okas{<3z}7rP?G4m_^^v z0-|h~ySMyeM}}U$06E}68ppRzCvIIaNnF%>1T#&Fx-e_Uccn)zxE^g6c8_!N znV2iWEq8gX{wk24xDHM7;49fS|H8BC@7BK__rnc+EyNP^Ctm&8HauMjIs2-UGz{6D^Rr3mo^3m+dGK>?tOI zpQ$g8DV>872IdxCe)jh4;i3hmo&2JG7xFcGfM7Tm!>#P&`JVj0rudKK?5dP#_#JcN z8D}*RuYw!KXLhjGSO&S-nijKP{~Fm5U~V`Q;lI+B{8I4|mYCeg7!#tZpe@?yXfZWJ zFX}S^YgZPF4`qX9=WX>%DrCxx!aCx?;{7c=;;(bL#%(u+or7bcAIu^K6Dfa8`^+yn zZB3h=Ix9cYQps&TGPkUNZC=5`{}z7HF?`09wfsIeFBuGg6er>)DVU>fpxuN2D7Rv% z(Qv{(J2m)`*@AS)g02qt*+ih6{VJCDOlZjLlkeX*X|UAEEy*^nvmC^MW_{u_abT3{ zh~F4NY+-}M*CtQE;~wf~)_qU0bB5m&7j2Dc(JIk2p7j zev}PgVR9r01@+tkqR|3>hUCcUvDskBe!YJ@MU?Pj=_UX3P29`Ucev{fyc7p#pMs?u z_;*PyWuL;U&X=P#w2X_kVSX5;BnKGKj-~%Gh@=~x!96hQ|FP3{f?CdvFw^y7ta_7_ z2*`7=O;551GSTYG`@WPslB8s60PX*Av^du=%?Nj02mcx(@lk;zN>9@5NNJCD9$q`7 z`N9dioVSGzBB5xuzrEpRe?uUcXIJh&g5iZodn@6e$O5Y`*Rj8Qnegm2QFP6y zW2VsB?`MsFvkaW;?*p|3&Ouj_%J{pA_Sx)6TZGcR2#D|uTA^j+wsWm3zT%a!VaA5F z&8Sx)daE&D8hQxqO_QEzoW<7Av>Zjv|v@?Zo?>)!uvQ1o?nd=R4m9NR6 zQ@rcm%?>0!);hkHg=^5`Tx1h#b5J0r74>?to*jao!hZtPk9Qhc-)7uR_1Gqb^veW# zkJwOsR}OT%B=T_V?R;g(4wGu#iSU`}(|+=G1w}FqQSbL+k?UI-k%D5LUQ1QhHlKAi z*q=O#Ps8`zlSp2D+n3ju`&1G3s*vUWamsUgR*07jP2j`ts<`!&J;DFoEBs~s&RiL+ ziQRy-`OrxKxAPPo5_Zh~lFD@JHQxyWx#r^Gw$L&_*e&nGop4?G(*ZB?FZPQg8rcMJ zV|j=&W=bNaYgD>m1RvwM`Oe>xHoOZ#Mhbu?PmOE|zn!ctcXH%Tg<~q%0xBCuZ|e}% zei=|!M+5e4E`Tk_Bip-@2jZ(gop)uf1jSq;qrNDtED*j4LD&6>d+2jT5Mq_ap6SU# zshgb2-xb>Q6>5M~^35_(L99ffk473kJ`fa&{c` z-)=K}H06K0_st9pHwC7-3^v{qXPHdYRplenhLYa{pT6o~AWhN}+wpDWyO-fFuf6y& z83v=MP#%RIW2`SiW=04Krs~$9A9Z#&zZ%LE{wMjL1=(AA zoZ;u$7e-_J>a*T>WD<00O}3nfn5eI2FC2O1UVXpw{#4-fkouIbx`DcTykT5CpkqTS z+eEF+tgznNRhU(+7xenr&b4zF^$6X-S0#5fo0V0-gBOQsTVakG62k(y?vK%R)*!2H z_O*Zgo9WIkZ?rmQFP*zp8nhh>co^rpW}n8cFLG1Csje%-tL+3yg>Z)?)ierc)cuh@ z9b)S^P%sk}U#rIo<}BxM4#&C@maK60?LVrnX)5Om#QR=&2I}TX9Zsa;ZlQ)_JW9U& zz~NP(y+^2i)L$S%J8x##x*GYNH_Jo4Js8C zTOw}ngLb#nIt(xA?jcUQz7zmStm#vOF@Ad$2$lJ|{4D;)#Qk{K^8>*t{!h?7!pAjm z*ZjhBRkA<^?~@7Fed`A%%GEDialX%UW9Bt$lM5P?eJNO{;j7MEH}4VvHCV`lPIohm z=b)+qJ@J245GL*apGxAl)^zbazS!NK1E1Nl15zbc1wvGn909 z*U${`-S_*GXJ%k{?!D*iv-eu-hguQ;la1}hIqge+j#++A|4~+xOTFJ3c3IBPkslm@ zeXaCC^oQWFYO|(F!2SNqM@KY%i^m-Hr?a=nF=;-{^~=>p;(B|1;Kop!ulyWrz~y8g zz$@vsGrJ*lY|ZEDFkM}UL;QT{W`NZVHAWyyH27wtH68z_#Er_N)t!AtoqOC#d4WwN@ZlWza3=L^&QPa!v-G_b|6Ug9~;0C>{JYn`W z6Xgqj35+jOpQj9{1>dOBKw-6r8i4qTw&a<}=&df?GdkH_zY7G0W`6P`w#a z>S}(+dNI!~Rl(}}3k#UgaWCXEdg(1f=9il36^0~prWeGvav%=$?Cuv=;M6`rjk6!H zv;0Pqe%gURx|fF&ezB3${?kICyG*Jd%<1wdPid;tEW$r5w~tXYMWbDkV2Rkd(YIX2 z`0uV-Tj9Ky+wsV6S~flehY!r3VzYW zpV2(zq;=$JEG{m@Do4Ysq(}lyI$y<$-?5#2tzwSkG+V32+gee{(ib$E|EZ!9Pl++I z!B{>4&2Bwkj3NQp>KGs>!_wZ$>9prv4+iYj>-Ktk?AMLnwfGh;j7B%sj;)t8ry+6I z#QqCseWyxbTi)m2dKp`ED6!w%qqgYodfg~b($2*sdn_b-h^n%z<&XgVu!_1u$hGL- zgW>nbk9U~7K!DS%BMFZs%3TXeOx(gfDy*(6=L#ItGBHjPB2+}mx&#hJ!Y!<*V-%T( z{5Llu? z<*uuGcs4L_sb{RPhV%Uu3H8s|vfy$9-hGycq~e1lIs>13ctP{*Y_eT-FJOya*}x?V zhEUX)_5ISeolfRO<5C3ljkX{A?uea4w>9^7YJ&A0P)u(Bh?%J#Y$nQ$JU~wSVjeSX zASMBZXB0MzYwfF35xollkA~a7;t970K-^Uln6&0!*nR*!1GWxz`Apu}zT?JXoLaY0 zK4r~Cm(2+Q0fm7+#=~77mWhS8R%Jt6^lYx(K|P_`pBM{X9^suW*OC@yKFpB-1>+<) zIiDkp9t9@N>oRV|O@=W%wN`y`T+}CKPxh^p?lUaZV3g_?6AxogZ&L-qmaW$c^H8v0 zOD+3}CB-b!u*iOvWVvEv&I(m1_MeaVDxoGGRM`ffHKUw}plL`<+JFE~gzYMpLeFI| zZ7g!S`!#bG+O)x!$EQxjl_~2<8FbCfza<5NPbXN;Z^CZlQtt-eiBjBkOO*YDsc?&A@W63cT*`RGK?*1CrCBBH_Nnn67v2ieF{r5viQ%s<6tiT?x zQT-PR(+C*kgVKo6{#>zXNPnvI2JccNwGg8kDQ5leX`S7o4fDTmcrIYdH0#0KWay06 zMWGGaF(miV71mtcKO+)?XGgh~e9Bsh+OS-n)*og5_TXf(>4ik-9PBLC$u zEc&|I|`aO z%FqM##Io@ATf@GPfbR$}=LY^9ciATbvF1#!ZDAeV`aQ<@_Q$88>`RK33lZI3s8ZZu ze!bNGpmEWjk~4Du2$n%~1(E96##eXTS^sYhFIXcEt-<(%%r^l}-IJ_>sSD2QovP?_Qw`1d%f?Oqz z?d@j>ceB0T@CUO&t1kHwk1=*&2zxO7Nhvd!-tzmQk0tjKYao_jMP!vTA>=DsbTuvS z#D>>3DPe++1RYmH(kuU-;~zz{zF3owGbg$dmct4n*_Ri7Y;J{Je-IW ziQl&bGGJ$8amS|l05vn%cxkWi@<56y+QPIvbGe5C?G^pI9qh8vCRL*7DILda9QQ;My!7a|C&ho z8zc#HuGct?^=NTF29%!Eph{D5N8*jqirTye8X8=Rcm<<$V8ngo+vE^(ihnt}Km8)_ z!&YtChhmBPina*`@URI3XqS)<)K~0Hu+%;8zYkUh*U(ifj|DBJ%_9HcdrJq6ikr65 zDY#Z_801G(M&y+KO@GRs5e!6r(?1dlm^Jo$d2W&!kae({%LF;%P9ns}LtLmtWCUXf zDqPk0yhHu-4KC)A#_lzU8yxrSm6D}BH3&|&z{6dmp2C`pzHdH=RQ@=SZ@{Y_e~xa{^vFA&?MD9teoLc8qJYAg{_2JVu? zSKYGWU2s~l%6F?NKI#`;WlobGoZkv;m4IN+pZ;T6zwPn}Gq6e+wF{9T7E39D#%>2p z2s#i}L%y&t!``0$*Y(CTZVFXHoK*wf*7wp*eLs@=%|QoA*U!D|aVg0=xeUJTV17)} zC>g@<6Fbm-%t?9qzM>-3^kB zt&mQ};jgxIuk?ShJwg$tVhBpW^oly8gq}~Li|A})DvfHt8ld*hH<$3LVioxWmYF03 zFX>0V!#5-X?AfCrW*n4*eI`F{rK_5j_s^~y{u6A-o>Bprbn5z1=} zcG2r*ymEFNc1n*bW^(sx%NxwfuDN_#wdMvbD5<&hZ}0|ydZgz$r^uRma@#n|ieR;L zAmOzmU>fGzO6Mp!DBcY=YyDh`1QJCUHIPGwuoC`N@xix!Y!p~^(naA~vo;L-Bhjw! zRI(Q}Ow0T+$)i!LDaX#$^o7q!U5D}(G(}{Eucr2FU}4;p#b)BbV5$}*v!)les54r5e4+tB* zD)_{<`s|VlE;U@pU7ZcljaO{%4BMO!QJZFp=W{b5%J96duf_JnM@?*HX2LqrZ6Vku zxSnt|RuUFjh7j+t6)o{Nr$ee*c0R>lS#)UeTAK;%BmGTh4ene1&Q9JSDKa`|HzBhKbLK7CS2@k z^a!gIVV=QO=`Z@~2_R^J20I+AD&W08vQk-IZ1gDkAt=+Msu-)M#>%v@QRw5oad=@N zmnExnxcVFYWwVf~OWaC^8M_TiLXnA5TDv~5Bq|k(htsEB9G=vI2lslWgCP(bE#Flg zEHSEOL_y*12>Y?I;v6LJ3wCcLPl5}>L;A8>o=EV_DT0UU-h;!JdqME zVE-l@m51=a+jx}dQ1Ep_!wLX6kP7Q+=%xqeXOnkL^wPBDxNfRRdI2;LsoSWKBw^vH zRMQu=-K}RXjgZMR>U>R3Vol#TVy?;MzN-{LEbCcWg6I%*ncfh%Q4%hx&;!z@FU>4g z2KZbbPqMZ39}rHk5PsjS$p@xWvLd4iFT}@}BWi-YCS}xR1 zB~y@F#-u|OKTxCD-FYgBggR#BAw9F}T>n@si#bLB89?CH zxT`1$rr3u*kL9lmugbg-@9AY9&zuIlE-&iT+K<3z&F482^C+=FPD_+76SeE4sZ`n@ zseDFm6|nBAmu3V%44KC!mZKNT|6pAqz#aR$JDv}~iuiVPN57|nP$*Ijk9tDl@Fly; zX7%5!st#U{zy};aq_zCv$klIc|l+#QC^OhV%f%^^SrRgNUs{ds?_H|6(62EXD ztXuGFUhnp@6xcZnu-8)N6|rXCQi))u3Iif__|N{mQk`3WS$|hGum0L^Zaz>Q!FSLB zUc;cup9+#rjGOrg{ShEIG=OfiQLQ#)$%vXKzuljXUBIqQBdjGxGN68=fw&>_OY`gV zH-VFWYc1@?kA}zVz8x5hHErCAm(p>tf}28(CePk=?nnLe zsipMURt{!Fql%vGhvTJ$glqRnI;#02N`v#556)KT591XLXgi4JSApz(dI|1No%&-e z(ZSr1NgTGr(rEiresMxuMX~d-O<9q)$4ag_!mu_bS_j>kIt?2du?hZ+n8D*lLjA!2&zxbE`QozJFLXYJ2X63 z_x_e%!mbSUyiB~4HS@K*m?v+~+E#nN=mJO0g+W21x_fCl@)Pyp84+$uNO~83uPm2i zkStosTixuPJMJxKSzzXnPx|LO7|=#U_)S7iwUW?Kyq7B~2_HVtx786$pp@_HC~)b5 zLDf>~yDw7DV5bUx&Xqz0B{%dQ~Y2vFM~`4b+Gn@*3IG;U9c`Bj|?V&mMMGO%UV zSM#3AtAf>|`s7M!AF1l-Fc8C!y0Jh`Lf3K#YX9(&KKOMs%w)&<7w(cChy6G~t$^FH zWCcg|5(QduUP@|!)t{tmKd!eQIZixqq(fyKztkk!7+K=f_L}7Qr2@GJby*u%nZkww zv+&(-G*I)(PM%ylPORZjc}^Mv^lNf5OfXN<&~!dI2V^n$Mj?bx{P=ZZxy(9+QB&sk zvJiD7pWRE79?^hCc_D`dR3_m}F-;5yn8666KI0mf2HU3q~-c7a`xnDr^ zu@I%Doo&YC`Zo5L*=7vfIIzHJED?{Er~RM+^z(Zf zOs<^yd9=sw#|PyB^`jbV_RSOY_;Ep@$bPh6>anG+QP zgqV^&Gy1@mu*s3S7{s!G13S`Fa4nZ$1v>yJ9%W1INccpeViWE1H3JcTQ!Y+c_XhOBE#~GkhftaaL#7@7)w182n{8Vcx3hnW zwjI;rxj(}`L|H`DX%R<#R^&OrR24t)HxCv>6}@&}+>nQ+`~AX__NaP5Sj@Fq^8cX2-+GR0)Wvc^}q?1}wfJ z{tF2`hKcbYvl!k3z=Hwfd7Rof2GAwSViN-h_~W7$rE^0tWggVG>O`gf=4L&C(PqXx zZcLy=OS%w0^KF&IRHj88{=NUc#Jl$_^|oZfi*O_rbCzwOtY}*@EuN8SI{=y>#to!p zgJxwecZGF^rAY=ZgKhZ$>!=tHDj^)zW2-G@=EhC1Ep8bR@XLdeu$EkFYIxm}u#88M z8(Jg3b}WH(T4onO+Q9c1K%~AV04+9^+Xm<c(?PPeMk6kV4PVV8;#fM2}oHtHwd zmw>hzPi0WsZ%EgBn>d7N0z|PxCV%L*aW%}bRGD>y_Y1_~!0NtDpASRWnaHyfBkr*b zIi?Cbo_hvdC$8F(vMYCS|NIGsMH2m3gQLENvtRK#p*ZvheU$+5-_^QI6R%P52IhV* z_g;xP*>TM+|D5E?8waNlq|4cb2i<9lF?@fBky80yL63q1?#b*(09Sndu~%L>YEUb> zd+*@CWFQ-s2!o0`yD>qjMXdcF(Tx`B*k!x~uR`->o5`2OM&de_HS#a`erv#hXSm`@b=pcgf_2x0gh=*Iy~X_*KH& zV|9b92;^aAWH&kgi|yvyqPotT7Nr!3UG}ZVUtvyKX82&a$@W{fMJcnI!dYTroqKU( zVp>7WSvY`5f4y4aG_Z5x(|{k(H&<6DR-ZRYmk>n@yC<6JsiywDUblGfe{un~%(QUZ zmKCL+R9G?-3pS3AAll7sDB2Rv5<3D@EM(h5 zgjl0+dXTccgOHeO^p8B;g_NXf6H2Tm=DBiSgZz2iZ*^A}3vQ`Me?AL+qlzKIZ2!h$ zq2JbINsg9xsoO6;8LYO~^)H-H%h1fbxo{bd!9wT);tJtc?)8H=2#9g`cNS0RjaZg< zzrUNl>r83Pr$L&>I~Vq=x7`n(3(-C+)LLBPrKj2&A#g7hbL=k=$Cu4{(EBvcO3R$p z6}O%o)o>U=ZZJ=&)%%@WBfE+bW0EbU)w^NoddvF0lBk`|jUBwjcI&Vl%^H+DRiQTt zvQ6_yb{cMyE7*sIDe5*c=B*_zvXJ;IJbAWv#Cj41N0z~hADqQs4$7=J+mM#hWt7qN zzJnLiy1BabtbBV;&<{?bo8k3l(n%C}D-P^KeKA>Y#ozH)rbK}YD}nppax9pT8CR;w z?wePw{D5Yp3Xqjxa-AFn-pZ=A>)qei?-posp$%zh#80uM*vdYXwPLrQgm7QubDhst ziZZq;Le;l&3%aWe$pCAkHLe!^uioY${{gm!HMRq$1yY}^bFAL)t^d}VSYOWArWs3P z@T0~Hh2FvHCYTxpZ$6Psh&kwRRUTABQwejJQW$Vg@{68N$d&IByu1Eg=#K8%NsuV) z`^Q_#WX*fXrSe&npTCd7{nCv=#tCyJMHj2o$&Ew!0{TTg!CJ`P{BBiZlfGACx*b^g zTH~iSFQ*A$oN416g|uc|k$4A*Yt!xu>IY> z|2u(eGxHs}R{YzR}E%Sj$SIgxX2L zpkg`N5cBQTihE0BQ82ah)$6tIDT8R9tge*{n6@kz&Je&2`T2jNxZ)5WX`rFL)|EQF ziv7euJ{TD?De6q*)!FOy#k0lz=RR*$<4ngInf7)~&MrCe_ePCgz2?=fpKp~v05fJx zjiO~H@9pgN%wG|gWoW}hRti0|e6-|b@!iYK@iwmn$_l-Xi>}B$S{h zO0PX(kCW%@;L~R2)k_HoV5E8yHg2#K9bCopJ4ib}+djG@8$JCxNalZ#hF3##a<(_`n(8C%dh8~E_DuXQ&QaVZ^%Ql{@$ z?2Q!H{j1(-PadNuK;=Y62BgMcx7F61-(vp3H;~|>o_G$+{szt&Y|I9s#BAhzPPNF_ zFn;j)m4qg8-%|PcVvH9Ei|ApPj;TCNuoNH#~%-D%PRH)+ahx z|4;TXuW<7$2`qP`PS0KsMdZ)}z6LMBkaG0dzn0L%yn&fbeHG?^jtB4Fyfj0Eg~Tuq zx|#>9xwBg=G$GaIm4^kEf~wX4{-H7Biyy7B@C98f#^qVE>0|P?Wh=a#JAlYiQNZXG z>U62z4|V)o23Cq`uFCmIUSS-B=kfd}=lhqc4!_DAB6Lvz_b2(&0{1hM;U7SGCSI^)J~Yy1zC{=&IuoiGheFHpPu{L~U2`_A&${r(xx%prF$NP?Ue7}+sUfChusTJG8zIQ%e`_+2mwp$d7yruws( zpb>pbLLqz9q{`FvVdkp`Z8cV$OI-6-(-dF1cV40krD}QFG5*Uak!BE%(`XMzN;0gf0aNthA-o3sUh-0Vv~0G zfR0c+Rr0(t>u)V5(v2n3vPisKh^nA@g*J3FrTfy-(|-3y?3itV^WI#=&nMx(z5z40$egV}`AT6=|8y$mecU`bYz z;8>fq1Ksbb)c%exJDi`d+-&UX@aE++DUGIym`q{kqbn~pvp8yrhF9`ccx7ZU zB1HuEo2LkCatoGKCdgOs{cl{V9!g|D5%*lw%=AF8;OvX@LOFdh8~B3u%|3EX`i$!0 zx8j?XwB1J8fbIbv{|hW!yM2ni(l`$_uNO-K`C_SP+P~=4C}q*#rb6^a;L3C19O-B6 z9fSOhM3lKZ#r&@R00FikADHN}WI)A~*auj<{vATf13#9)jn3yJNJ0yMf^$NV(Ji(X z6LZpz%o(IC_Gg~8_z(OCo&8$VWD-t)6#RF^?Z`$CD2Z4~ zT|*1C$0=iK8M%YtZUDn)CV#+l(NDgE{pc$lP@J%~pPzpDTWOvoL5f2qXswUSZPs+Y zKzHImg^KN+GLQRQP7l0LY*${9MmV z1qt$xA^#_FP9Ubp@@}GgxzxDlr?5?X#E~ILKx*TiYxfd_S(@GWFd(piplQMWCeJOz zr+x~F6t|r70uq-tM()BAk^eT^?!&!h!Xw;y@0e&-Jh8+){OihFh3Q{g=R#UFbvaPs z1vdgax9{d)Z3*-S{2ySB?5pGEkUrdZ5%0(er@x$HI>K7Q@4gtz1QWt@yOaJ0chOA@ zYQ$%ywdd`kU|I56pvZzTUuf~{nnHTC;jkcYZ6UmPJmtAUEUPASx??W*b9o80PQ?3^ zv)Vh@9R3#)zG<-S7ScwN<;KliSV9?o^K$DS`c;f!91sM|s#rfMro8#~6pQS6)A1L} z5z^}lt0tK2F>X3z{rTB?yAbXb_GB%gGl=%GXkho*y*^?dWr3mypxZgjI#mVlAz$CH zEPC0kXM4d>2=4kKGPL>?S6$(CJ+bx`G@xc%*1}fr39?=U5N6XU_1513EqG3 z4E;#;%ITembK~UeJk|yFe%g^?Rs2DL9?tOmcs+18mxAOR_v3Wv)rZ$$WHs#GdUUMu zqdgP-J)or#7UVHP#@~rAF=!=GKz(Zm>l89;b*6!|`%_+xgLs0K2i&nag7EBZ0DOin zNt-cT`NJ=l_{F*rXQ5Fhk4c?Wv^b=Fr!$@cPz+M0gS}jS&US|4HwOb;R>3RqG38yd z=OIa&5B_<#g2;dq*16`k!_)hPKbeMd=WaQ{_fKLa>i(-IcJ|-=DT6R3;$A&H zRCEJl@iqKk{6B)OE}H;M&nad!i33EU=d0eHkD{$L`KQJHbHY(omofNPnDb>XVympxz##icEF^hXe*LZ8`KL-bL_@>~uBBH4wdg$shJzN3iOhQwat%g9)OrQ+7 z6t3#D_u^*yXF0FBQQ?1DeJS*#6jwi&u8`kKCoryk2!pET!ysRNn0{3DZ6&gGAKvLf zB7DV6*;_t{e6v2n&!*7)+HXAA>K)cunU_UB!$nef_!&?)3*?E@x~JbYzH~T^1)v6y zmuhL+1cZp5@n3-FZGxhw?GpKiK&u_x!fDGRg_+g+M37fZfpmwiz^}Bv;HB(umMd}} zi+7;2u61ds3sSB8q*lbvygZSrc}GvLg%sg0s`gbkF%E49iUrizVR%O0*(vBM zIX(!miA0Ibia3wFwsjP+3;tAX1IuK)qHG5n=HpXpA-Mk+jgu1DCOfZXO6U-mM&I+`YSM(MnyY>qQABGpEnBLQ*G z7H@8vT86$rT+%3cz26FA_al| zFTQFX?m6DxYI57h{rv@ zi-@89k6QO$vPc|xZzH-5|4YFxQu9_AO&umqaF93uy%C4_$_ah5oNba{+ZWp^z6_1A zOgN#f>F)vyc7r*Sbi~9Qh&|4F1m3|OceuT?}JX8O$=B4KJ8kl*Ks zZIHB}f3;FLK3-BZ6R;IInsXe}qik>@;}KTVIzoD&ki62r9I%9XH~To}&Kla8QA5KX z<;W%mPLYigGtD{D-bC?>TreT9^Cw!=mBt0 z%5A!p*^q(1?a1oo{G|wi*cRC@^GzU?WO12`#Ks+W+shpW<6>e|aiXExpIV(_UOo1; zGIT7S-vc&JLaQy?L7_!@OPF<{X1BA2A-hU~prIQ6DP zm)~ny&nsrd8b8H-SLa@B=Ng+wAFgp>P{8E^U5YC=FFv|zF2R)&{m);ay*W-;smcK0hX{r0@OtpStrig4r`^ImVy zZ!EM7vB`{oGn|U6eBydSU~F@qX|sM>v^y6P9eetpOpO!o&?t~ZJB5*Be(UeJi@r&g z1%~EVDkFp{7)+sez1i|bx1sbE2HX(^cEHiS1I6xREKz<3&KuigcblzLschDg;$M%h zdxR(pN8&JNmE3ipHjdfYa2SKjgAgUVnRuma!>KBvvDqJD%MrPdOGL2>ZXZMubaM4)whqPWdL&G-I6<=0JENdxeS zykqu-0U3T>vI|%=@=+4DoD(bdON%t(IJ0;6X7&E8VzqZsZYnP6zL=Tx&|bsHtvIYM zXsZ3pVJbN_7xrv!)`rsWqijf{wy{R$T!e6ewKTMSo+g|VY$CKi>9ZgP7F+<+y(8 zBsVJGfBL33Aoja1EY_sjQbqm~#?h3&clb9m29oa>Q0jqG?&z)n{Qu=62K<&q-$*P_Cj5(Z++nNC78{ zSGV=(vqBk^t{=UC!h|M9Q^jjaQx&zsSo{%h+f_Wq5z3nN=4IsS(DGC}$Q{@BhD_HA8g zPfvZ07h4gZA8$4a{BEtmu`@iWCEYVvFZ(QZ`DNIFse4=9gT;~-sPXC%+U9~`c~@iz zPJ$PD`fjbV7q`p+U&Nr8QP_?xv=-hQaaX=W)u1bWdeW!kowozLd~S<7Yfr^BGC|D4LA+cDJ&HT zvb&@%Aw$<>59og^GrN;6?XMN|8vC&k|Ba;(o{RM@Exji^G5@-K6&*VBYdEWn9N8di zRL(n}U5U*k%m67pr4MXoiX^9Tg95*C%o_T^rTs&Si>C|XaHC&+>k}Nn_}*P-PvBjlwSA z*z;zCP*u5kE3Volsx{lIJeeFajoi?S!g>L@alyaz)&-DL2wRLtnb>*~U!>JAaM-Sv zl968xk~~vTb{13b_m_$1Z8hSJMyj!~%@T2zjk3AR>p~*m5pGDA;j`G1y2&ZCA1E-Ri^*rn8i8(7N>!X#j3j9ItV7@#}V|{P+=T zBxu0ph3;f8CzByo{f*KF1*S)e(A!Osou>c1`#YWtgGuQD(W>CDL+V|$@5~Qafe?pV z?422$;t46sb^bE%SI)^gj0*_EB`0~&ql>dT64_8Y-Sirt-t*Xc0sDG2-Xlq9ndzL@ zXEs;z3y2vl$<6S{z-vtoUXjH#hFH86{=bq6&ClAydS-wS)L$~Erho!E62N$5H zgObMYD1a-$7~1Z6bb8wiaA-MenxBz1bh>IHZ&&Ylis%zvC0qxljU4~Gu|YF|rR>)2g0f(SH6ZK!H9GCR9E?+&#zpv8 z5U&(4_T>n#A2j2nOi{}wh>t1hz45dML9&jL3jV}Xze1}mMaZ-cqRX!^hvtf8frwKX z!&@!(In4aWD-BM3Kp+l183#Y%GF??9lZ~+_Ah}?VD|B$+HZCU~X!m{%* zSbe*^t-1nFrwnzRAn%>BMw6>8O zIVi%sXq_4ypnE6(#|{-mi^VxH$TJ~|k!&|#c5JhQkO&&Y=% z!b}}!HVh+g@jvO?dja_w9%>Dt{@c$g_~}<w$DeZllI`hd$G@a9#-RTgUg9r)_xY z?ZMDSnCS=A=pSC!nwx+1r+w%5|md|ULZfMml< zP|7c7%t|yuW`n_}+wF8JC!CYBpFqP~(F8ZHY|2CJS5B=4tj@KpEjv+tr1*E{Vr}ml zaV%l)&&-Xlq<3KfjaoffwXZ+Ue;ysH$dU*uAF}SMliu&A_cgm_FpvbHis1-Z-4Y~;6NCTPaWrC?9}czz)Wm!LkoNnTr(so3o0hi34b&?s+o(MK zMF|D_(*WX2%S2=NK)n$&Y0;ib+3Vtc!XI`%$7C9Jl!hBqfe5*oH|{PTewhRx@XI~? zVsuZVGvz8jdyR6KxAF^WZ!15h2{%6K^6tBqeyky53mpB9HDGIyT`T8G?CuSZmGkd`qfd9T5y$h)BhEl zA>ZI>ZP&i+!wVJwl+k0B1qiqo%SX}RsH!YwXXytB$^3}V;$VM3_(>*{;183?+V8Ok zna)ywvw*!nnKOU|!Sf{f$A{$NJdBr?wNInDrYx4VJb-;FxWz%Jx(~^yRkgVtC*|01 zaAiZPiYQiI(;)0SPfB63$q`810r%Cw+2ixWU|NRh123{8xo@xdE{99|>cBzWI&A}k zS4X$@qz#Oxo*2Ik&Gl%dF3h!1O_K1{r(v-(KT8&Y%F%y6hZEJfzif{OE7s z8DbJo>S|Jo`~7tXrlC-{2k={oC{Ds3?UM@`30LFJL877e6(Wute~BLyJy?dFyS?;0 z%hMI%d7E;!ViiqTD6W=ZA$L?C=KO=pr-ujpufWd4hC*~M!eyPo8CL+b*}LIop8~G0 zb6eoH3#{#a@{e{L0UG?dC8x4sKU6m%TU!~gz>fkxApAirYK_MKv~2K(!!0Xkv+8N@ zJE7Sdb}Df2xeY4Z*3Fn}HXbExJRNmYTR`93$Va|G6g?>?V&7QwJ-qeYz{(20#jNtT zg#jGd4sGbZ-)g9zmfsXn{3UXx2~7?AHT2i#P*0{@cPNlaTr@bp`z-U8b$vEK|<9E6R zRGk~2Ntff~Egv4DY2qRNQv?`cQxCkMMP!rj0BHEJz-MMvp;fN`kO-$Pqcr478l7F8 zm(aKgS0KWo744FJ^yCRpQZTS?r4(dstQguwrUZ@{GW+GzYqw?NFRHQ?-}fKvPrZHr z9X?vZxxU-6{bRD+Eb#@%Pu1_m@#pIahB3>hG^tD1d66;8-ombela$v!lwH#;*ETAV z`=5B>gpO?kpdKfkyz^lJIEM>)eaZ$pmpnPXCQ_;F{-0EGUqwzPE#5}emHAUI*Cw}M#cc!YcMYrmGo zNN)Gd_zg(#k_SiFlR+(?yDbjmR|%@F$l5}RS$tQD_qWGdK|9n|4mxfa^iuqS0*G`B>0NqIO}wwbcbdoP*?5LmCI(fC z-q}RNo4BgoU~LYy$$90M^y|E8RAx{~pGdj?f*62S3-7F4?@kil7WQ~u5_6P!{Dmxd zZ{V@`NQytt|7tS!7oFgBtl&!TO+t)pXu~nv%X^5A7ZMW$qSH9RTFQ^AV!X+EgTmRU zzr8Bpy?%3`S`6E8)9$E(`DSh2CkaBKrYXxK|Hdpj)VGXJu&By>|K1J+N?IQYf&1Gh z(N%W`IuG`Ph20-Xit`FQcLKKO2f>Gy#Z{=!1}ZWu-QC^YokMrm&@kkH1M}Yh`w2d<7Q^D)d(PSWx1WbtRH*xrfH+T^GxF3T-=!3v zs=_%Q+TB+||Hq6}6C|euM6QIz6LZQldC4Qk(Cb}(d&8qX;ksiyxwkprbZzT=`f>{< z-c9lY?@!EyDMj@Eew(2Tm@5`dcWoqL5R=fms0E&JH{gH@>U&lKV}0`Z9U2l10dHr5 zd94}rj?`(&uAE`-<3pbH-X1Dn;ub5!Su{^O*7N+-q5_E;W0q=rGT>k;a z_7Z2~9ZbeVTuf3yxk%z-QKQbImISdW}WjCxK*zn9wQ|^48%AGQ|yyyG8?GcAg=uaQ6Y${^} z%1dEK7S11y?AWZsC!!JE+JYAjR8#|*2+F3`D=>m`doi2tIg+X;*q8$$ub7{mUXy*l z7Si}#-=lG>F9TxUYIrU{V!^f%0Hg-jkGqmfeo>raxH$KlN)mYw7AYEg~k@qR|kT7m8A~F^aqSU z8G0Tm`pbnksR(%eiGtndeEqM0(ZEvF%;UynQ z_0R!?4I!%tL`1yw1#K?(+j2DtqC!upb~Bf4mkt!Q1cwvdJ>C0J+L#ZVLjkk}f2}Sc z{LxPJEcq3++xL(~r`Pi&Uv%BV-d>qhn^`a-o~cbLtPZNCq={m`T5z}UX6N^#osmrD zXU)Mb>O!w$1gjh-3Fq8W$S6zH?E$}<6EfIWGwze5OaPQ8)p4A=tS@A^;ZOtvV?Xz@ zr?=&wvuhC2zg)>6VlncDTrmzPL4k6YHHHQ)*CcFqT*pJ^jJ0B3;K|ez7{_J6TDJwS z`P-N^0-CIcq?H9jU;vEXSU7Tp^9k<&Na2D1dH67<7Xi7TGg_baO;a~&^$aWE_H{2R z;$BcR(tz5zg}$jFlwNP4oF~b?AXKHZaEq=?+wHlN10cuBChy$vzo|cwpR0W6M3ut&k0Tpx*RFAdLtHbgW9RVgF6LILu@mCKR}S+y2wrZjNE z6Lmw~GV#O3V-NhK4Dl1g+0f?W(RLPxM}(&4xaCpj=NzM@dJwloMwvP8bByE|v?TkZ zA!JQyR;FIf5;9E;n7l>G@(1Zp1-_pS6dJf4sMqlfxXVI|>)aA3$|f%mwU}utDXr3A z`J`*VyL~@`Ec=CyLZ)LO$od=0QmPVe(GFa~H+kftDQGI`O3^K~myCND4v{<|Dm4=D zq7T|LaO&DuB|95fB_HCs8&9k0MgpNY5w5pXEGs+VB8vD^7%rAKaD*oAP9+-)8 z(lR1-rRS|R2h>TBt2aP1@f;UOkzTHj3~}{WHLc0nEZnHEoW0Tj-$M0iwXi3LL7v?| zY`?S}RC-2ttX^d-v&h{qk$u8X%3@wOm_XK$hsM%B-KX}yog};9dBC}0_K`G#3j->Z zm}BBHfAJ8kPmaLW0KxMQj9!*UrA%C;40T|?0HG2SL|dXg zzR#G)(Yltv1Z!hX5+M$%v z5!nnSoeRHAJHC!iF>wHf!~64zHrpRF&A{7%rt0W@#38uju+qjP&Y7_!+=CFgN*J>8 z=jq;I!oXs_v8Hcp-}TeCjphL0nC%1AY;B$hp|}$C%kk;3X~*g>;$-wIG1Gc9uu_b& z$C43v@drTv{VAoSMG4eeuzKiC+G3ARk{_0kPYF(~N_ zEp(Pb&;~g#9UwNQdXOl_ZoyzUdPf7V|&tCqcfSMhj*S) zDCz5m_^2jMHVs`3aa)6S8DB5B-9^3N?y-<8GTipZf4MFcrnpLV_4J*bKfGZfytzIh zLGF2k@o}9d3!7&_JI^KUII;iEs{I@UTCwEK>>vFHTVHCpF^x3`Fj>gj+KRFGfAF*Y z?eo^ZmUM*+ZAehOFVKi1-8vTkFI@HW;YTw;ZzJ9cBFE-Z8feS6)J6p@!#mp(xzx)S zv!>rs{Wb10!R5}oXn=Z^Iwj2cYfc5*mKL_X6W`HxIdFZ&{sPPI3I?y~YVLWw*ZSAI z7UJjADJZLM~b`ZI439kv^uN^ucp zi&rQ07Uh~XKU$To+N8UFK4g5~PA+vy&QSQ|zQ^VqUtVfiz(xre>;#)GzaDKyXirW) z3#;zc=eQs;7-R=N;9zU@#Kb`BzqsH2OpcIrO!8qiI5c;bo&%HEqB8T{h;2C#5sT8~ zuDP(S>;gpv{B~}dClW-9vx(O>U5e`wyt8X9J~p6oxGPvGzyH8O$-;lKzX!*k8m#^4 zf($KuE1j9@?-myDNi^zc2Y{9LsjKNmK=ls{ZQA;9TvZ++_P?e)=B|4U9Cr1~!@yr} zGHv@rf(bB6P(EN+ce>3xu8sZ+LzTC6@gjIC`{5spLUP#@N2iVX)S|hBXx1RF#rhpq zy9+oOX+wKxJDZoiW#yMNo)o%YSwZ*d#B08YJni48uDK2lMZ8%xef1?Oga z7mn22)(+3S?!J@13th4|Y_tV>V=BUxqwDr} zLhZf^0JEW>Xk5;VkfCK$Os90H2qrl9EM&H4|J~*WosADNFM(U>WNE)Q<+n~OJDzp1 zW_DlZ0#A>~9fKhEyzT`=cI20*WAV>ulRA&P5EqOZ4}im_FH^29;Co+Al)}a_nR4ZK z@$dC7)o$_O4aSh_h6wyAO79BH_nic?(In}{RCs@gX}MQxOBXzdkKl$IzZI{Z6~rG8 z-vyUZ(CnoJK*A#9Jh?%o8wE}@FC>o!@ab=tB;fX z_+;Ff##Zo! z&?oC5iy1Mv{$kyC5j#%}7GsGxIHRyH%w|g0#?QJEfwfHLN`j z6pE+fY~%_~v7anbEGwLB;yozYFfH524dtXg|akFb1K)_W7pG^avn4E===6DO{|Vz8Rwplk)d!Z7lY4Z>|o1 zjICT|m5jOZoaI@=?dN5y^pV7?df$EOM+{_0#*n3(nO5s0-ni2T7|cO*3$I%|29GZ= zj3HrA5W|bm;Q8lazGc}lP@B$csnh!E&7YWX!G;B_OB(jbWCd+0&rXf!jesbql1<2j zR47i}<&qv-ZPu;vDP}nR%9-~~WR3Wp0*|26lpOq6BcePpw)Nq@SQngffc6CCXV_rd z)>G*zl<~|1+`Z7bw-f>%(h0-0C0;`NS+3ZJbQb^c;!}f4vk@*OD{y+@^r5L5r!nIY zVOwQc5G}KD9orMd?8Cl&^2wScNUiSXKw-R6KO;9LA-pDL6PF12r9_2}^fTHcp4H5Y z@FD{JQGEcpkuNF~&H#b7R!quoeXJV2lq>`6#U1r6NAJG*X8?EXOiwLap~d8cR%Q{K zUWe(~Kj`J-Df?_L`yK~qp$pPKI?+D~{K+`|21AhKCGN`YrKV)UE%rODIX&N(9J)}+ zYJ&+~v5RS6C+zcEkswln_R308cXiRw)PQV?J@J0y(_d2`$FkpGSu3{F;x8lyoT(-R zUx7>5!SA>Hm8!#&aPz#_WgS~Vm9sc`cIMyyqR!0}=F$oa*O$XXjz1J$<~l!5yu^Nj zM*0_;xo#|8QJ!bm5-AK!4{L@TOauDs&(AkB^`bjbEjs=pmt5N95ml3KPDIZe`VzR=s+e#ed>6D&@LiYM}OL#XCQzD1fN(4zK|5JSTB~eD2GG$zbeODG+z|h=8(**VM!|+rG26o9F{7QC`h#_XMGl(D{?xEz9`f#a>ljfmh-zX8U9;fo{x~Q*U{I`yA=qCd<5xXe;PTAHrhu3CK!W)j_2a ziLe6-W(<#uRzsJ%9`Em~4E^O%cIL+C2*n3#%LThbP*^7ZQ@m9dUEknkQrwk^QXRn2 zpLC605_fE=dP!bAj_H91r-#W}urqgcrpPOCCzs0#_t@R$|Iw5SKGXj1J-#iQI_@!e zq?aJaw0l1*^ac$&PH4&Yl=JHX8*wG)7qVpilum5mIqrZhdLf0$Lf&EJb48!hw+qey z@psyG&W8lerVo!TcM``#r>|sqO=Mwc$Tls$bu7e*6;s6FIMXx$rrFQDUWt+WijrM7 zraY>BL1R##N&T$GYc{RCJ!aLimEsY^FP>!3x|T9IxaG&(VocL9yMEBZRlUKgo zpc}a=BO)9>I>~kc`TX(<-^@e;rTpR#P@{7;@;37U;Cze$VyzD-))`ba-`X!wk!kbQ zvY$)){Dp8gESX%*hNYPsKK1){g^oTPFCMtmzU|6z#fCw=DPS#+3@wwCWN<+tPmLmb z?GRWT097@=g#?m`n27fQT`BX9_uzBzKw>9`6_OmPuLVavuROh;t1eCz#Fl=;Nwo!6z4jSC1 z912rEj*F0Qf$3$>Y6x@xWAK~3UQ2!F9!H}*{^*wAJK2{Ck3bRSqP^5(xN5FS%Zd+L z^)-9t$N8qm^g;MG^w?l`sn7TI3-<{9Ev05F2e;nNsg=AwZ{QC)wS9E$8P#L{0sw?8 zxMHkG8sU1p@>m8AHw&NMe?pN(PsMPP(u&$lK2Ynh@xh*AFRWEa8YPmH4keho*(I9p z9Vd{u(#}wH5X?4m&5Cm|-*7??p_B5>(4@VTdxms>Zs@hU8l`6jd5VuXOiwa8t%}YI zC(#d|^6J&wDzzvdC~~@O9Gr__4*T}%%>cg`#tNfI^9S?(l)&$^X5ULpAXS+=MT3&$ zOzDn?4c+)DCdCsw?{2rI^UZTy#s=LEf2c;scSatUop(3Q@n|1<61;1wjRrxlAagoR zudN;W9v7^;@M!j9L{qE(D3i4)t@UJz*_&j2Q?W(V4$k1?^kszgyLqneSmsRTWOswe zAPt5_57`8_23MGv$NEH0qk{CQyklEX>mnq@It}`+PsPAenXF;U`>zqB6$2BB!{gQl zy=Lflwn>eLSE@4vI8$#Nd*H_pZ{$T;H^KA2%?SLq{-SsmZ;n82+6Dh9va`71X-h?% zd$fGOjkn+*?>J?0NykpltcdPVCj8L$91g9ER370--$cQlcuc@kwQwOHRS{UV4?%~1 z1(Z-0Q4zvYY|?~?+UE3N;&CcjOXbh6OAJo3P_6f$>VJ}X&fghd8pVxqq&ucxo#&6{ z{BSB;6)dwJa1GtGkIq8wcg@5Q;L1h}`1OALSnA{I>I)rm)L zg&d$mO|$;uTpcmY_T}n_ggA%Pykb;%5iQk#iTNWl^?a!8Fi95$pa)8kR7c4Nu@YqnYPDn~V~v^Yy;?4oIZz+&U7W?xo&2|_~i zzEBNZhQvy4-6@KnB*sb-_f!T{o+@Lj%>h4#$@0BEfeT&bu?iyXND2wRO}~v7#z~v>@{3Hm=|cmqo){r4==KTEBy%=c&@29B0WJD8 z68pQOCr34o457DtaYz>!an`(ySM>8SP=vH4##&~hLac@O>c91ePMaSUcb zzfLvDZ-*V{eN%G$*Zb*1)5Jf(V}FqYm;+nNt$x`5RCB|4^B2|`+XJ2Uc-+dP^LjOZ zv;lWgd-jSqMNxmMi{T9w!XC+t2mi_81W|7HpAA~|I8B3b$Oy@8K?aQ9p^BCbzX{R+>2 zBAKmMQ{@Rdiuz2$##pdhCVC7L7(qy|^u*;yDgL7E)r&EkD%46tZxJ{5e(FK9PiMRDJo1*%K>ErZ?$=V>CV4_E){fO-$i%fHrj||yo8HH(}#Tm|EiJ* zXbp|;uE)i2V7~;}gm(!1P-y*Nc~TTJ5(9qBZHzShqd{NH7mZ9tsWUxsV#>ij^`^|X z_pd;-?fCLdI!LE&v`ofn(u`f|p4YoF-N!G}<4pInwq-8X-`@_Xy6wuC3( zD#0~Vk{1Sey9D-4kyjOt;pO&nf4-Ba6?!y;QgzSiCnlSlA13idu&k8q>15CgF) zVlH?A32UZTTO{!%CJzs%>US-O3$3s3C2|~NbUDw3GSsUPndB4{C z(}zw~!he~E)-g3yJTHoe9XZf$gWuyO#FB`AU)7E$Y$DW%j|sT@+TLZ4cFe;+N+4b+NhDu*x1j41$E8NAuP?urH%yvCs zs1bW5b3K6S%4j_xe0Db7qhhJsQzbFZ_3kP0F3SRfbSGf`N3#l}37;f>PKzy&O^sG! z5+X|bZthoFzvB6iMasoE!&5x)!Switc6HQ4rl4@c1^!nr4&WJhfXaXW-~l3 zb*txY;)5N=7oDcqk$fFbD~lAC>vQV|9!CQ-O{^n{rQK~0q8_SsytiE$=L1>Wi`?$a zPKV^h9}2psZ_J=q$VoRrL6f$CxQN^<(1yAoNBL>U00ZRdy6${Lkfd2t?}RgG>HFku za4*nCYh#X_3%`#M7kth4hzQx+*ksj4KXf#<`Txcl%b>{pY^W=UpEa$w%SN%G%0jZM zo@b`|8KRb4$u#ZbADW{;y)(5#)VEClhDvnFf;Pxa_u+xvO_1{{>*B(qxhj5xc z)GeyyzV|y(qi^FKm|@)}Z#NbkV#&WzXS2RV%rOm2r-wn2QJ=;J!d;QPq4ysF74kdU zNBqm-#vV4e`^=qEzY+EcB1~T|X5hj5CsP@T{+b1<53Xvi6}*zqKvQ93qqP$!G>T zKh|}~n+0agym#K0>^+%!U%-7geRps+jLM@Hy=jg`hHz=0(+tgG8tNaQ_(fezli*d* zA^tc(jfnLb_|z=?D7u?1EQCAXIK6XqnKslPP{)lC9*lrw@&h6GYiDi8EJFQ5=6K7Y zW2g44%n&1^bBPy7J4$bMr;l`m7m$aWN)dz3jC4Xj=hk28g)yVVXbW3fPk8(#ol8@= z%vPh1Wy)P4#j&IcTVg>caV%|U4^q7B7I63eLo z{7<$>iKUO;I_`M1H!vZ-QRNIDFRQS`-w|$8ETHzv@LFbFGyvz|V)(4iI)TVFtR%_D z@LxV)j~=eFf7to(J?g@xCzXlw``Nz>bWZg*732S49fSq?)nW<&L4`IC*42ep|ggS>;Tstzmr+W`LHHA3n#uK17W?L5>P8VL2dNh?&-?M^=HP1{dUqR z4e9Iei{a3kCik5JDp_exBf8)>kt1U!Y5O^Xy-j2P95L=}(<*t%mXPjxnj`ovw)jsYPYQc~S;}LRw zPUg8o?X1MrOrh%oF#VYp^6?(D*7YkThrDVmj-Xc2f4&Bw2x&#a&Q!aJj-WxutB26q z1V@h9$!I7k+rko}Tg^k$hPTn6?q$jbD~*+vwaiTd;|cU&)`zRHS;&Xr4{`ZRDuY4% zpIEWp7I$LG22f{XBG6TnVKpY z*aiwzaHphQ#-?<_8!Vbo`>>sx4uCRR+D)z*k;tjz=9|b}a6tiWhcEMO8%2K-3q!_` zll%^4glm~Bg)`XH%~$(&b?e@~0uv%9NazuqF7u!z)Wi%k#+2<&=&db)9c* z7}`Q1kD>GLtGZ74JJ9K^Z4ZpHJ;D`Sy5$Q61DXP4*nz4*+vVO@=rr7PdGMR@jv(zV z@ycfeF1I28NkE&5(;js1n(@$Z#AA7Zbna2$)4O;M!(gWzT+m>@ugWvXBl#SC{LKsy zdd$i5k_?xQPQnhg*Gmj7@jRa`q{M$Z!{51>d7{KfYM$Gq=%?M9~ zoq|M11Jyzxd%}!w-k~5xb)f1C&9)$#Hm4w;0lwMHHILDam>O#Ba=~nc?;4y`fAyd* z>8b&VrHZ1p zA{d^J8lq}+_944!7HUm5L>jLNnC(ue6kch+B;{TqWe9mLI*pPlPin^TB?{85sp3KAhpc(Rkm5~Nij%hw+Ftm=6)(?0gc0zWZ*A61snuzhqiEk=M1 zh&*8`uK6^Y&j{6eE@hUwv34g9ec_Gn2P1j)!F#}9G-XOiLUm|yGt&ZQJg)Wd9*(Yn zfq*nNl1(PFAq-=1qa!A_Wcnq~45fWz`aXJ^?P7_>PFK+lGhlc48Ci5>KTr0L6T!G- ze7wB%5`9lkIUZ+UKM%ljY4?Ar$6S~5DA1~Dq?`!sP_+6!WVM(y<2 zf{6ob=y@8wwqG7O#4ym$J9JD*UEyPZz3H=2z=0)r@Yw@Vt^@Zktu39?B)^C#57eM| zGn!?{Y8?5OT!#iC+802-tR2RIlztg;0ot)f#ZQdpG8nA;X1d2`WbyEV!(MiVd}(n$ z_1#`CKU0~6*@KmPL@pFuC z$@hyXL4Gm#NCj|)LBa7J%?U=WTr!LF|I&q8Hx4O;{Ap?d$spEk9y8!>G4a;xm@D0$`b1NB+w$Z1_9w4?wg?P0(rVpK>v(6iObK&11JC zm!s2BYJ)V>=yd)kpB^?9M6H~dRn~`p9|!uWXIpJ>@-w=o`uzwth zB2iB4OviNNAA)DpYQ)VJ!d?jhP4hE$zt*fhmdCg#HC3YI9aR`)Yq@XZvcEn&%WjoW z*(z%%FgHev`r00NOd-T_^Vbwt<=^}paRVX_|1Hlqz~&THd^#6(?sFR2PmDuF%uaxT z1cE?LE%j3w-Py`P!OQ$+O`GEoi&XJsppM>Ix>o^o;%O0kZ&R1tXbrBa+a_G^-+7}0?zxattD~?(7;Af} z{hyGdhNNY){LZUy;*9z&uJNPtYwQu#D$ zVzi7sn*nC8(9pjDZ@)}M)n|Q?;({s33v6-fNBgbv>BIvm$s~VbfMlPDy#BR{C#qa# z)S%7ntq!`tI?#i_e{Sd)kJPoBM1hl2u~RMXP$?4T3={aph|_fL>E_2cETSS@nnhTb zGU6!3j!UoqSgO4SP(Pqdirb)%gyQzk4qC3bVP_G*o$x2y_p4&Tj}nA&1c%E0)=CkD zBzZHG=0a_k2cpNjeRZ2j3*Gs{Avzx7jGarr-9{1ov+_m#R% zdhvO_dr4^cf2I8K{15L!yU%DK$XSt&FRy-yCOZTv)bfDI7b{DvDUXj=*6=3U-JX01 z#B<-COQcC$fXE!;aCZhm?2FJ?I^MlauI+b7V={4`hc?w%#9M$DP|)xqVMOO|tkq?i z-w28&56D^J5;_1TC@X~Z+nehQTig4N4$^-Z)LLlBE042dmaY{n)P6?h=oXyYU|ysz zR(H^6FM2RRT9%LoS;W-U^p}p012_sASZrVCOxxIec7BSo-hA-*62iWpZ?R(;Y|`ns zABBs0Sq8N1$Pperu3bVeE3F+?EA%jfcT@y|I#z8c?M6mTIOin{@unbuD}+{Lefi%e zqh;nVm@vbch3C|Wj=cP54L3*a+N`|IQp6Jb9VQpxZN37lTQ6+0c(z%?$=~TNQOoxv z5@H2Ee}Xbn?+viYdUJ@t5gi>*sve&91M05_xjRB54mX;BbWCWQRpi{R)UV`7-U|Sz z(?dn+^CC?N5cCyazk^5TSY>0MiPQf2#{QwGG7Ov$t7eyvXW~}>qgcja5rS9f08%9= zZuOHBmNny&Z89kMZ`K29BsOE`b{y+NQ-R^&A1{Uss(coR3w!F(p1g3HTyYMl^xdVR zlw_iy|651t=J?Vj{4^$Ay|&^XQELVR_CJcHE_5a_NsyR|`k-a#8zOrcv>~ z1L+-EXGIHlH@e3e=s|!C2d0>0x&dWupNqJ$EKtlsVSjDYp~;}(i|HEtIr_(s7p;ZE zmyF4hqSqy#xVYVvh%O*@qzlO}Y)B0H_+yxduI6RVcRe=O{K>pi=pZw8#wue6IfInS zqUEeg74m!%Y}8Bkv-nDzU@cv@?);Q8gV5JaKlNL`9aL*@i5*kdI*;9m6?HFf_9qKh zI-Jf~%z-07bMBkiYCnqFxWRR ze0y?p_KJlJH5)={y!DO_qUfI1QNawMgF##*b8mu|V!MzAJzcf!R)XFaO7`w`v?EP< z%^jFGT{ID2HeK760X@Mi@l%pGH7*&8yk{=eB3WB1?XjrlYy$LGr(52@N^Nf@(=w@+ zgd_@^CMWM@ufBekrS|6WU-hv;Si3SMr>CweGD-u=bdqS<~|0i>J3G`FLMsx z;I81iYK8qmFEg2N{L21=NCb%d%pp)_mW&|7Uy0Ir-~ZjrEM&E~sS<9xfWEj(@Y?Cm z(D%%Z554Ql;<<2_X{mK2Nya#(d*Q zy+5xdz2>*2rpqgc`VD8wM*l@NTM>d84xQ#tz)8A1i7NK~+(@VbB6~v+mbA+cR%uU| zg+GoGizn|Qdo8%S{nC$dJ1R4IJP3^dnYXssbD1IuF0Sm5$2PW(iE)kRw^BH71&T5k z=GTYRTD#}_xJo6rjOLJKDNuJ&EBK?g|4{V~g#qCDm^uLkq7BzAKWK?LM%VZWn-=eZ znO6b1pj~_mU4wRbdEdZRjl0U$xID=lnJS=a{99&>U={QLRM zBp0fyvY#6hm3Q^|dKoAkC+EKw@uQkpsq^xjgx9;E1{!a1hpCj)qYGR%YJsXU*$PTA zLr?qN`xb!+UMonE4exWG1WD`f0msy*9+?I$q8Y|j$9NQ|V%g=ys_ zh5?2S;xy>UF)VL=2PO+(xf4j&>N>cEs=M8P8(Dl5)pJ;eJV)f%6;!~pfQrlS z-E}ESn`IdAvYmMCXF$r-oo{(e4b~_9)>`=6gIG#)RCB9U#3u%7#ssMb%+xQK%78@P z2!u>b8}wMx6T!ib zb@CygLEB29Sb}w)G?ekl9ESU)U}~~i`b5_Wn4QuYJuVl+#GD2 z+KUISPS;HVj-_3xrqjY#&6sc0fi?Bv>&Y+f)w9>y2B^# z>EiL9sYS%me)}x{^SJ&kODj05LqQ`};c5F?`_P6V+Lt_^`k`5s&77P8!}mwNSYxl_ zcv7~U+tm5PS(%yug3z(q3j9b}8Rx_Y57&E3DaVL7k2h~j$G`RN8x%5vni|>h*-kz7 zJ0PMh?C<0=j_aMUR9yE9+7J+k+lWKZ7CEdtZ?&l6K@bgD#vGVh@8&;>PW>~EO?{nn zp~gNu59g`5>0M@wEz#1Np<3|k#(2w_lZB&yyl|+?K4>(Sd(cI{VVhbn*O$NLPq2*1~#~=h7lgz#Lz+4f3(p4kp zex5?oxBu?+amcT zwwAEnCL8#$H?N@q`OG>=jBRU@fA) zS3FdEYLQER-9>ty5XwYE_*8nyW4)O(td*|)$edFPAW*8kTYV33n>!XE<1NIdKg)0U zVfH92Bc^n1%v`fJ0m%V8ycEx#-Uv&PAj3mv4F>I9exEkmiteqTStT18U1B$Ocq2}53x5KXrKRIzSxmk#ziA-$H!5qFYf(EhNJ5(HUC>TTf zGu&N`7HB<~$Ie^8*N8Ma3K6Nr>4f5C2#7RsS2f6NZUbu;P`h&cr2C6jsPGE=Sb}FQ zhY8}ZB?j=U@&?m}(rm=XTK{Q1dOaH@4lvxn=IJR|t;+<%N~R#-sPzE!Qf5hg^}VSi zU=l~ESYky-^063^Mw9C+c(QgeJUc^8mP*#wIEUA*TZMfY+x)_7DfgLui(SXu6+K8V zqHkd3e6H!st4}S%i7OfQ)c9*#fii1@#$)Hb+9CZo2Q*6%1K!AVo~(b$mt%^4qJmUP z-nPVr`l0#oCy^l^JOr5$@lev}Heovdg*Nhornn{N2*nZ~0`kD|@HZ2smPL6;dC885 zh046hj4=-QGXp7P^6C6S;(zTr`%->^lM8=o2qZ1LChjN^J zd4gsS#uLl+IB2bVWRkUF@27^na_J)7{oq3xJWr~=6DU?npP%C6ad^#UD6v9DAXAD)xGWdlw)Ko^8Bnm+LKz@`gGtQWN((8@%5l>ZH~mNXE?mx3*r5Mh zHru`(kWnspTtf^?Q-(AZ^HO&xXvbF{@PrisTcX2E0 zJK(c&Nf|yFWlzSQ=2=gt-U#Te6J~RL0fJ{9FHA>hhNx=&wV31#pyud()?LU!eIdWp z4vS0F$mlJByouDkYIP1!c_-?peJ?V}0c6F!epF@XbWUJ~ywtpM?O$8QTF96&_K!^% zDO<9P!%G|&PQ_g@$Df7x6T4Hc{qYuf>4?rQ_-COmGaBc?V`sxc>B86cr^p>j41~en z(hGl3RHU)pO!k-5FS|BRbE<|lpOJw_GjdGnSDzg3BN{t+B@DHTzDvE-B;4QqZr{;B zvsix*qztz+6Ya^dDS+WV2@v-vIMB!+HEC0A?>-Gv;h>-=R>TX8 zYi84R`Dr4q!2S&{4lMdXu6g3C=11azlr@cRPYwwm_9)=c$t3f3{@@TDAm8VZax+hU z3QT3)73exd_`Q7l&nS|TYioiBkd+w5lV{JJ=tgxQVwx2?qAjpNPHl<>b{NRor|QNQ z8qH|w)E}(`d=efD>lyLqqt0VTm8e*Y77*9NWW8CV0*hY#!btXMlPz42`pg@f<^cYI z;L{K@`cl{1fGM-J#PqBtaOCLpK-D`dN82?Iav!8yg8#{izR_|lcpHfvo6%A*U1buLANK0Pm( zXCbZDS4U79|Fs$)|yg-KaMZe$mHhGQ;>JJS})cw+G_x!8a^o^&?I|Kb@hlT9&w zAjOwlixs0?nsV+7(6N{sJW*!j;n+=Wn+&`*1wYREfsQ=M+y0u{#{z)h&$JMHAL3MB z&cToSo<4GYjV$k+puN>lkA7w~(Fa29=goL)L=5vL@X55?#T znb>EiYzw!n*&*(yd(34*ESwMEEi>BzgOHa#;mt?H|GhE*@AD|pk3-+eR9R(9e2eXO z>xeT5PDc$^t%VIp`w?~|ZYar>e!0*uJU>OGHoV(;k-U%rzDhPD7t%_;ImnGcSC7*R z4Q&c|ps_6#qii{6E@KQ?=`$>~0@Bq=K{`~kOYSpXi+W!bU=wR0huOj(jP3|iEnnU&Zb09>&c?2v$U~L{N{b~E7)0^u1}td(Xe_f0otthdR(W{ ziEOIxjLP#fTd$(OFQL;Pv%WoAl{`n{-ueRE!U-`SH>kBv+uKn62Zv|UAcu>E{Fb$V z)t}MwL++3Ar-uua@`bpFTCOL-etDn{wPwX`yvhF# zgyltf!kA`KzoNMEW8534Jy~SwK6udyn8R%`kptg*V|Ueea9&(X06PY%cs=uJ8vS43 zuGyeJBeOwOUB{WPMS_1);ZbhhC|Hknz-i9p-RR~+=E(aH`h&a=bUbsWdc^8I=GRgA zXgkpMuD||O14jcfUWwsNZ35>`%U`r~+8p<0f-Cj;lGoRDQXt?RY$U9nv|vweN=4L} z4J0dy3G-%~cF%>XxMtmm zIUm$V`Cw$T)oR&QPex28QEMH_#loBZH`Ty~T$#x7d}oH4l13;XWcwI9?^;oy%t%=b zr5F`?1*Xdas-_)280a5uVx!DF0#F=M48yjaaZ5l{gI-FvE^SJ;*S`^K?srNT4!;Wo%^VOebunGY)!T0fmzvnk ze#r97dhA5uPN$OU>Et;b@YP>k`t=#D^^I;@${GOv%{C<-GrP-Hl_|!4VEWgLI zU`w3o-o6c&x@%sc=zKJKh|l& zZjJrJz#Z20qifa(3Q|=ohgDKY<;0ATaFaYAr13#e%e1gWm6tWgwy{D9IEMThX5%k~ z|Gek$zRxU$*i@|6+J15H>P3!~iA!bej3_FQq-|z`C|H!V!^(dC4AO-`VApyb=u5HR z$DEXG!|PUoR)Qua=x%Gt?r+&$kBNr+dS~Tb-<;(sbnoPsngeiwf5OYQ>XDAkw);z9 zcyeE6t{h7svNBNDVZTV(VRK?<7S}$s39fj>Kv~(qL)dxLN;M+uBD+O`@rW$G2{=R;$cY2Ge(58u~jSqtM+NR~BC`p^`_R?r6 zkCiQzwXNVrI>e5Le1C!<3ff9a-Q~%?Ngm0wr){ORlx#h7 z!K|lwY(u#xC~U%{mMA3qNm%=F98cm|9)7)6y?mB# z(0<-Kj`06+bkgHI=|6bY3x{hRrQ_h7{@hB*yLtw;yjX zqqoQVLy}>0PgR94-K~(pZ4fiw!FNK<);LxNck`$x>5CK{vRv6bErL*oQB) z-x4x`VwSpJ(27Qw;0>$C#1icu$;|uaOl3=TKtjIgkuA-2LeQ|eH(t3vDW_xqk&@v> zp~h=&x-~E%(R`!+obx4fqSCQ0%{`q_x&SToRKttynrv7iN@6=*R}85Do#vTfmY8ZN z*z+jE^?lRjrauC$0mf2I)Hd(Yg9-BO4tMlS2&-IPg&X7YaCO(DYH^0!A$UFhZ81sZ4(`;cnfS8)5C!$YoL`Fv=(c)qMqhD;TH z%1oJc7zA{vJ!288%!CvWzz98#DH^~+?8hkqJ<#VLm*LiPUK=lezLsY+yH0m_Yh-*x zyac7cbD@=s7I@~5Iu5QZgIQ2Ga_{uKf4>m>%r@h_zX$HZEbrrSN0iIuI_lS2Ttu2~ zwgbbK-7e6UMoc&`q&pJhA(}jBwP#4|LplqlAGB#Yf3-@Xeu_aI`>?^w3AtxA5m3|^ z8OB|D_)}G^Ol^xQnZ{2^}#Z2NJ>&$CbM?5DGjiMD0F^%Wt$^Q|(%JLK-j5jD4`<=g8m2;}>*&IYYdmaJ)Y$IVWS&Q$kxzi#JZ7X=MqF#oyRiqdvkq^=DI_Yak z*A(@DI;y^6mM3lh`t{gR@m7k;SjJl=42Ynxu#ge22QHe-IZjKh($wr-_&KBFA<(tB zW-jRW2xO#e>lqNdk{Uf`+6^i(@6DtSp>?Mv!5sdI&n%@N6T%iysVn9h8ZsPL+i~Et z?W!U5<`XZY)F4~Qiy432R?XmDGdRVqG=?cULeIuQQk6tOiFQ#}WDh1Q)L3KUKoVN? z&d}|WRP$)_cFM!)ke?<$bkcmivW6E!>*pw!E8OkYbCDQ$EI))hTC9LYuXN>Nucux` za{1RBR<+l=^dlzz9BxFg%{aMV?W&uP5g|Atl}`& za(+5fGy4xYn{ZbLB(lF8%|u!MWZNG*8{Rpe9K5G#cXK3mPq)IU9}+j{~w_3g@0uL@K-rSPcsABBcvR`6zOA zBi$Fz_2o%ofVepDoAS!nTZi7%2WaCN`9I7>6vQG%q%~e){hWlD489tI<`dR(Rtg#t{}Q z>6AQ=aqDul25!bBcku7M;?-ZQxk{@VZ-1%ll#;cg8#B|VnQrO&G=ys{Q9wM3iIx7k zbYQ;&5bt;{q$~LJMU88v6;VJLTF1=y*6&Hs5u&z+w(X>ogSe#(&HZs33c~ui&_(Asd6?O{30?_$KFTSDM zsk2*b__wi2w=yCodlesGw)++p9Yra%NBTNLlYW>T+wUo*qZb=2xl16-hPYqi#{ccX zWGVewlbLFI#d#zSL;uFDkDVpaY|UuQn8)4hcKDppVdcu+o0rVaT3$U0um}4$Iataz z6ABywHdb2e=W+ja4E#QH4Wkpr{DxV8%FYOBt2S8*KY;Oo#Q469B`OU?o?ap1`9=9h zLblQ71Z0}C?^4ac`k@e@EI9XZ3=6k!Z^QP9x~wgvxr9F9TCohGx47Mfp7(QST@ctO z8`qvz-;?ktUw}OP5h^(>MERQmp>~-F1 zH5PkCa2CIBY4`HFCC4hLe9c|hD8`a?_+X0Y$#;S7q+@f7SIj40FXn+v0{{m+YZteW zHvEqLWF_7^5OHH~%ck+|T<_ zU2y`D3KL^@ZH9@PjL<6~2H02Uf|NIxGPc4O&@W*Pf`8koi1s^!BpIP!sNvs6td@u4>f<_dP&t9>5FQQ-Ku%~kzjE!kOo%EV6#lyWP`7BJG3woaU*~AC+{eO zK&wx_tL~ltENgm*G|hX_c^_WqL%>(^T5Z*Y?qEBuEaB6(1I`Dd^Z`o$N&Iui-Sy5x zDNdvU1gcP|izQ7w#xN7{xpI+vHtYy6J0s1NccyM(F-$fuF(dA^FUWa)cK$lkEehNx zgi0ys{uC^x2@FvUUy8uJOusHpY00{9`19bht+CgInTAw=3s5c1$bKU#Z;xfl0~A_O zsvSi9Pb6>h?2D#iSHiv_4ceM2*50KoH_-^R^8}5H)BQRTb)-4&ts+o*8*H;|8?}cFy7=%X%%eV`T zRFW}IT%v&Man+N(EXp|M z+cMK}S&dhgg}%+MV`8>0NAi+8=d0hRpdPh@n{yJ}^*=iS_TERJPZ`KzaEo{ru%Tw4 z{db1EDHsrYab~jn7NU?HeJ>S*|X>p!ngBM!ofqb`y02yOH&%7oLC!=4iOKD&t9Qr%4Begd`U) zeTqj56e~^4Lfygx>`lb-+M^r7j*dh95uf#kX8Q-HSI!&9 z=2rJ&dq`3rx@bkNu^72RzQFq_^V-p4>gXrDVtK7+Uqo7#!wCNoVq%w3#^{*M7Rv87 z&(nJ9pW?j?T{A(nCcgPqCFxfK{1v7Khc(6%i>lUq;V|{neM8z3YDinlx-81J`FpqN z`&*#s#MoI=fnQstMvG39?@>j3`ogHpLl}3o>Cot$8?3`9Pk>j|7!DZP4z>*6pW5UYZBrTpjQZDt3qp0^u)+ z>kO_);S(bGwS)e1@_+6?lY$tnIj4FF`r7SLu(SdFx%1nN0G5TzcU+ZN>AwJUvZ$cs zE%~s>9+t5O`Li?Oir6w#pqB=BG5kS4RhJUs@Iqi~m6r1=n)q9J=VA`aZM*hz9Msy^c-^0T+%g~iB6z~*Be&tbfjqBlQ7VpJge-(uq z3r_DC00{^fU%0~yM@?}U%>LDBUML^x=Yn`di7 z$d#hhn(Ah&CiW(~R@a!_3>1u|)j6RvGD`CrAr-ZqCJf>q6wZYX)kLzKnba|LFg+W* ze?(YD=|tyUHH%5yY$T1Vb?wP9lOBA+*6LxtWqXIV*>mX?;C=v^*q^Ce>mkfr*#ZbL zJw8-Z?RqPEzpzTQF2r(oL`8-gwBVVSk$pS)<#prJ2eSEm8177HYzL$lkN(5F?D{xp zvJFnM*ns@|#tBXSAm1PTd)yEA`=|r=TKii$NMmg3g7Dh9dy^XFGGUUm7esu=C zlcqtJ;(A1OP_KFb+k%c4uor%EAEsn*G3a|;zI$KF;{k-aNzkiv_2;gS6x`uJ5WfCA zX@0L7*VNyXKJ6R65nEd4lj#CoL*BD%STs{ono01ru1NtF}hl8f4tbaM!MoH|;D((bviXXQ}P32rP=ui95k8^Ez zW?LN(2YI~Nyv+RRh4dg(=RZO&7SFE5yIi0Do=vch&q=pF@v?DP2wBD>c)R6NJ|D6L z>A8;mRdL?RWXne1=FtGKIJdy-(Wqpl$7j77LHR!ZafHrVm3EQtM z+V2??1Is#NBkuo+@x16?`sBDe!Au`xvKzbxjO?{I>t%KlFb@}i88v!zLG1^iOH}`b z^!zNc#KDx9=OpesJknd5FgAxOh&N%E?rhN|!9uEE*(|;HN*qP!v3Z%kN<4OLeUNK) zo@LDt%zGVUpg6Xc!`Nj!FeXwyB!pSLQ<$aXL6}myCDhsUM+Q{2@%TmISP38dpgb$1 z(=^k==111uDi=URc~m1SFto}b!VoEjfUn4Vr7lVs#BOCjH<|M3=uhGNcuq_eqUgQ_ z$;ckP6MoR+^?s3$Wa}!F1fy6Jn@$J>6j`AP!st06qcyis+MHYu&BgtxE`KA1H`1dJ zXJS)q^b-qW)s2gdDSRMbHI>?-dQQiwV{i;*jKO_ap={f|1z78xOb*LCxZ8RuX}Err zPzXvLkT|tAX#e>fgIU@CE!vKM;@@(d*jt|on91X9Fc(G1^tQZ1++gQ(?marS)Fn>3A6Qj`N5)7mUKn+&?xj1*dP~|zGZR+n((V2SayHYt6BBrY! zJx*!}(kX!Gx+2Fbb58fSZ1BKX;Jrgq^_!_qe~zkpGEjWH#w2@bl6RHZ&eI19AXRTi z4g9f?|8PtcE9y#IEe~a(VU|)J`V!Ak9uA5P|Iwu!^Z1w$RDxML(rTrC;W zzz_Xmm;TNO!(uR-5jytT>P$X}6D_r+ET2DI=lFP4IUwr_)bV-zU@@ZfR^${%_ypHC z+BfvCQ|}QQMAXOrx}uhJbtAcqY#xw$gM92+KP6JZEXEPdrsTEJ>1vp`i2b#1am3KS zr;MYE(+IPngWBxI@d1%vj@sL8?};S%E&V}>m3X%0IIlAdoPQiZ>VXp z(shpzUa#BW5Gv253S6MeGuO|o1aEIPrOQI)^|p8$ljODJuP&Zu4@n_0;`k;>A7)xe ztN!uVn6T3D7^kvekuRP=~ z?>@D!EFbLpyQs-IKvMyd*sn_Ecn)iBvUPSqg!zN@Pd79@3&V80l9P(=no-F~=RGxG zhqU+?n%%46dUG9RRsGk(LS@({X(m&`D!P^Tg*l}A_{)f-j5JtJIPSo6Ml=_bfS z3l-Yd-U(poy;C;VS%COb!D0+Ax*(kXrPuWOpGRLxO$l!#;N@{1%tt<|CHNjGNWjpR z0{4v-e(#&}f9tfAmH4LUEd|zSvG+)YyzF++9jLS9F`(!L+30R^>4@u-Q8!Js$dMr_ zz2r#So>bvbUwyyr0DF`l5k1lp1u#4yM_@cs7$U4fa(RaL!CbpQTr-A0S9-Kv817~m zQYe-sA`|0rj6W^$-sYLXJ?|gMN2x1-V}%0__#%_-u_14>VqH643;Ac)I!<)#OV6X` zvYrbeF24?PBhua1dd@sg?c22bH}lw#3yNs!*Mdne*h&1LP~OxgaW;Hryn*%%UW2R2 z?-V3qvsEU#2ori~9i7OMiPewWH!9Kp;o)oMfv{;XfYi0YBvZ}ZAD^=DFYd4}anNy2 zE|IpYv{aXx8bbPh(JR(jDZtqNY>a)8*IVkPM6bRMei7QQ`DQvq^_*qa;r9i@V8b(V zHI$)+E}>q$+X9|Hsa95XG1;sZ3FXv+-j4}OTGHc47pz;u;##wn=L^tJCPf+`K2uy* zl;{SA&L}LAG{@FGVe%RrdY`rBW7waJEBG#V(TmzP@q38XEIq?-5Ba!_bN~wh5d)T| zy0pgCT1dsF^=Ggm6Z6-wTTp=bYOV8b3QR#sh6V3c%?axTtt6McCS|dZ`*+O;%~ihH zlVoI*_^cfFpiCjzZAiej5b68lAg$yP)A)d%m(PvJ%dyk!Q#4Ow;xt!%$+#3QgMGzk zpReNQ;t6W30bBg7mLJaj^T4JPUXGI=n zsc@gi&Ms~WhuV%wtnQCMdH6<|^j(q(H-v?Hd57j&^}D{xeR>|i^R3M!Xf%Ko>B9W& z$sJr}(s4m=`@5Wy(;Kadh2d`5t;^ImVPD~oWho%KOXj~-9p`!Fs-Y@OLk5kTxczqi zQ%oi{4W4&b(j{!`Hr*}KB=$(1x>Nhbk-p(^c}2Vgxt8fhiuC1e zN${ib)Z}kGvh*{7e->w>xppBWSH+*d{_BHrGlD>ZDZWP_Z593$$s)FSoF{uiGgJFh z_WhfQ90Q8-yX)d{GYx|8Th5KbHamZVle0J>Yw!Mr-lwVMgxfO%8x+vv*duA1CaB(^!M5rTZsZWOrXe(?3 z2X`A=B_7+Qog(y%NGM4zq2x`mb0&X?_O3b=e?4zhbC@Nutg}WgRByvtvRA0Pi`;8E7XtIC4k5k&h%msA~^Mq9zUE6#csx5mztg|WJhka6OXO(Kg zNHq+8y}c{$axu%N@}&$#o`O{-3+S#C$@Uf3Nt`d*aJ|=~n<#~Vm!PVjMdo+|OPu2^ zx`rjg_+Wn`eZEf63OS8`;2A6McsE`&z4^ow?vM%Ix_@L12}4`!{Q!44^SWxSBheC< zL^O%2JfF?tS>X7MXk3Eroc^0-c{^ii?GlW<_khYV%Bt)F2XK~`p(+|l;o--?X54UG zP&r&t0&Os4fE|x-o(f;mZGYqvvwYe(|9UZc8VWiHp3ZzMdGoTnQXKcoSAjvq%4IO~ zHWWnLWi}2J8AmLmzaB%Is-}9v!O2z9NU98Xxf|f<(h0&pLi9`)SOwWf?}z(-oF6YP z#2nuUhbaI*VSamY0vqj+QwvNK1w2wd2A@U!MHja2JLJ_oQP~lC*0dm=?C@6v-gudS z8l{l>PWyE@&Gyuyw=PiFQj!F#>?=xWAkn6lq91mahzAX%D>{CPT2weytYjJn{K)uu z@}~A5QwM2zeUV6T1&^C?N~P825Gz@SDIbeM7A^)B`GbY?z03=q&?K*(V9R3+M3a!F z#iBrWow``Q#x*Oz?n*P%@I)`whR)3N9F0BLcMuqf0xF()3J=4A@l%yK2EiufLhU+i zw$YK=wAl+(_c3XybwMWp`)jbu{4QJGv{@3{LIySvo-EI8vjXx^&-k%XFxxn zg07n8znK9=!En|TL+wF#S1bgn|AM9z1qgEZlGJSf_pX0lL{J59N4QNb=#HU@K>5#-J^e}pq*Y4;`%t=9hZf?61Fv0tGNSYKT> zR~I5k64i&9rJ9QS*bW*{zBB%W=y>uz-`=?bYqqw2onb{k$qkXN;95Ge+6f#N4TVm$ zMQ}u9=Dxbf%!Sm6S=^2lmAtpa81J3G-Am6gr%FrsxHYu*fDd;MO$9 z(oZ}?<{USI|GRsY94~Ai=>n$RZm=nn_xYCTYHyDIiiv=u(Cl07ZDy%Up(;Spk)`M9 zs$Vv)*66`aQ$=gAQK)56drydHD#Lpo($%GJO#b{)IjLFxwkDedJw0@l^z9K=TlE5h zy@5moM#S(g!}tQ4LenoFH545t(3rE1LAanjq{#c*F-vLRM!8vLxx^WJ67(8Fi+@#g z`j&)_5+Q6s_1OjvUPDp4HX!dH&2(D*?u}|I4z#u^J|%hYY$PVA;u^06+)6OPIbg?` zwAK=;-~9FkNdoQ?PIcng>agq=$S=jR_bPvuD9v9)-GNJh#RIhdMXeHjDzG+|3dd!f z-1B$cd3ec>*zUIJYf!+476H6!G~J^dr?{+FVn%j; z!wm*cgOoD}Fat%?G%XwM=RJ^Fg1Cl^wR)iBxbkUCjZod;OIhBSQ~dVvghzD6fM>{) zUx-@Ea6vXVF z^jBu=7GD60Ldbps$ia~=bzCn99`9KdqnR3&pSp$}Gku)fTn=mLQzo%1jAq%E@%L7n zz(Bng;#d5SvBpP{CA$}7!Ew@GGoSu`ocd~%%1c)FvDJ|Y<3=t`C(){WsE^fIW5iqq z$eHgQalp(H>m0PoewszCn~<>UctZb+YEr&Xx`XU^FVo0Fp82YoEFEbmv5N;9Tl zo+f-e;p(?HBQ%ok1$jW}c|}#*P?2kO zDr2npzw3Y1Q=v2>+CD@`kaj0u_Qwo1LOQ89@&F5S{d-6UuRbX)s{6+-V(b1JLd9Xb zz;%dh^%N-?{Q9Q98Ld4#OgME7ESPV1v4X0j4ope%TI4L@gPzhLOMbg2JY4kV)e{S#kzX#D=k6}xc~ zp)yVdT0jJ(F#9i4aVTuRz$rEJFVg~Z&)PyqqtZr7ugUIuacTj4+wR4Q(DzQIM3{vF zLumhWYxyygCEm1SCoTxg3=~-|?!g$We?_$gRroLRYK2|fj34-v_5$`sR=|Zdi5%Ix ziF!T_x>x?1ovcr!2Q$y-dgu{D&p9tOsRV%1Iys_Ht9Gu(`Ono*=DM{fkMKT_gkkx6 z>cB#$xN|8aSebnSy7~??Tc*+_NWuf3-17FSGk7G|xVW=GoKdl0$isuwH?ShR?`n5W zCT6z9<$_d7a%7?ZgHv;#(1UidT2E*aAq>14{z1;Jd#EdVzJ#2YoR)Goti(JCd9Rd< zR)ngMlSmD=&qdP#d;9}ZPZ*MUMm>xJN*K%sw;nV=p0Nt?SVSrS5H+Vu6|f7c#!JgM z{zTpvF_NNrbN$Cj^_+hIfU5q0A-{-m*4qJltL<(*_!Yl^^V?c_p_t040_A%dSVTY} zifE2jMdTL#9%vBDiC^a)Y?6lK0%D$R z4@JIt(m3l|VTsh^zlXH!8p-wKI!nCY5;i#&f9Lzlku*2=1!sEW$;fzB;`kijNSCHsaTPV>9@pcWb$~9(0 zRg3KtbVlt$7NE3zk2p5RuAoLReM7&3i{Vi8atu{1l`_9KUXQ8ycO_fg62e->C3xS> zLcTaJBke4ah)lzCs=-T886WC8DJmIL=Aaq(x(lD*MfHsij>6rp$6pqq^}wAseYM2P zf$&4+yy<-imfHDY zRT@(d;#76}IcIX-lEY(^l5=y~mzo@XLpKfEnR+T}*QX)leDO(&8b{+*Nk@f@u1HL% zDi)8>xH~KHVCc#s!)wjtUZ_uKFQKUwBd>nOxn($BI@3IY z4OdyX6qNgZe>=PD&aU;u8S2d}muSg;mF_E=?Lc!MT$85IOelZZLaRjQCM}xl&%5a6 zW^sYQigz>LfQ;}rv!W?PgrOWJP4CU$U%43V4~XPeXDxI*PSQdOd%4>_SdybuEv*H# zW;dMPi~k`>gYAzTMh(;DP5)}7X+yAATp0UyUFpMKf>ybPFHKe`9OBQ_RFD>JjprXC+yX)vhGX9fmV;>E% zqitA_*OM)JdO49OJ}ijE+hh7ydI%M;{o%?q^t_&9B7?@N{&HVsEWZ_B47x`RcT0}Z z&^m9{%i}`95x9qJR>Xj_I0{HdmAn*AiH>9Q=|-(kld>_9E92F#hvc42fTgbiZ$cOA z?Y61kn0B`8HPb@`Wk`U6uPj33cVo#XOCDy0eM%J|#Cu7$^P^gG!8PrAc>S}P3M_sc zKzs{Xe&IA=$-sh#wB2^whO2#)lt8WH)l!%B{X6Wk^HABQoa+H-@8@_*z?+d16j_p> zj(0Z7b}^y-yq;EwYOQE73j^t>F=CB@I&3PcQb4S@C)j}ftH`J1_RnHk{~5}8X6R;> zKv+&>@ps8Tu2C@#zGZ^%3R!qu_D?}7;+42vppL?{FLhYd&I`rq8;}mKUs|8<&AX!7 z>Gw<}NB{lc`*j89=m%bdbk$33JDWi?v~l498Law{mXUbmvGFtaj}(oj@T~9JXXp;UH*+9gF6B4$Fvg* zKN;4V#y8$aYCATLw_Y5E16nE~)S<^1v1$K2l2^b9gN-9Q>vSLAUUneIx`AQnvX!rW zQlPl;3B`Kvl;_@_CAywv{S>DEVeyLy;ZBR8PN$H6Sga555VNi<^gg;9<#4p!yTw$} zv@9u#fHV4-scCUl=d#i8vCp&U1k~Ry{st>~z&AVRSalHlaOP|bEfgT98-2v)>th^< zZKe1Vp6vy;fP49_g5l0xH}wq0D&jg$kl~?pQ`sTm?sizE@IbA-doN2{V0rE0hFM`xUQ3pG6OURqx-@K z^S4LIjOWXVs9R&e3xZdDV-C*9qidyEb%*oj^fLGMpE&Ibv%3l5hILZ(ci$#64bC%?3Wia^A zsOT?hi6&xy@55=tru;b!vOKo&aPHgnl{?4%?aO$4TKVT!<#dLv-Xox?7Uima2qC_GRMJ zp}Xwbfn)N9l`$9DERqn9fZZQ<$~+$lrBbx(H-Dgr&C}vfHOk6Jp=35x=2$t zOP6qNVx~|?NdDaf_C`_~%p&a23!C{m90*~7R!2uatC@{^#v^-lqd=+HK1=()enPIB z7Ep~T2qma|#{8QvXF;B!8d0(rYo#`HPCKKM_Na|2AZ&8lz0pTi9`O-N?P_4(`%Io? zFB9#=b4Vk%D+&lb(x&2yN##_E{F-7w02vL_qnVQf#ZP)Ov`?BW%W9isV08vM)nJdjOB@EBsd*JzR z{D=Dt4^ArFFHQ4PWRoTC0+ePM)J74sX$=-WQVu3EM?hOEPVvlJwpK4&ftRl-4px|v=?vgz|K^c}CEvHoM)Ncc$gpt=`@cY~Q)xN<?}PH6KDccRNCjVdjKB5HWklhbRBiFkzY@~jW26x} zn%xU-Kl*RKB@bs{Cj4V9tsxL~mNMd?huyp0N4Ne3pUP zg~8gBf=9%=)v`iST7hEB`kME`9 z>?mR)O?so4nt?Ss{E-2Jmi*%$kX}bso+&U7)VP&hAN6Fq96pQ^KWyPKbOv!4K07j% zEsHn-*j^2R$fgbehp(SR;7$VDSMY+izhgM8K?AnS2uC#sbZPsVZc$<1y)#6<$z-L{ zV3Dg9m(I6sG4UsO>6fB*m39+h$W$>8o`#rzX%$;ZNw?eG!(tgv$~#-NCU&HeMajGT zHARXJQ;ZLK`D!v!>T&?6_yE&7xj?o&2X@sbTz`Op_j~1Aq&$8rwXrm;>;n@w>Q>$l;Las05hoFKV<4K%=bPT{A9@2SU-vqN zrliO9Ks5{X1Dn2qUaA%MZCMfo^%J&|Kuni{4@o>H(9^b5#s9GhpaDUa`4V=5F2Rge ztgT4iDPlF_n&kaC)cm%f1)VgXJ1jb0L_1JpKpu&xFrySUM*XD&Osu$p#vYbIh40@v z;yc>!^BhFM04gQvA(<+vIYB8^7KXF%>ls6z(UuA+yheR1Rg!(QYx2bF5~}f;6f3;6 zKMtkwowI=p8WLO)T$KZSkpX|SyruDB&W80JtFNAeQ-ApGb&&j2T%rI9;g_%K^7&Kj zO_BCKrGzh(3Ao?5T!G9CXG1KjuP7n5r!hXSQ?h@W8o0_JlluCPVN9V-@qHX4d#aH{ z<8FyNm;xSZi`Wk5urI5Lr+RY7{b)d-32(0-I!u1V8KFy(*yoS=Or)K;`=7F=F zp!Ai;Flximde9N4zNSL~nBLC`l0?TAB}UlC{B4)xS6Eq^k9YPb2JL&uNad>Vp2T98 zb7Dnx=ov6PKMBj~zg~srEYaZx*8Lb7A&YL!~NE$VxQ%cD=x7;iob;F?Z`%mdxi*?e)q;kzbw1AAHH@^r=&h7 zmvi;g6BN0P%pmn3hK@6S0iq_YLolQ(QR9^kVL7%YsUa^I#TV zky0sYj}7@Ixi2Pv3L`d#$wq%-9BoO$QB@O}n_>B5YwYO7+gyIDeXUMO~qoXh#1s#GEY^U7TihW7xRiSJ!=Ra9sLv zQWP1O5E3mxx@=HxEy7Ma4`t<$CyLY?rbhf(tu?>ddW5=zZwoTP`pryt^|W%RyCME} z6&UNMbHBJ}C@-M{Ri}k9zv&M5bVVu3d-PFnb(_h2_cS%>$WQ78sPf=YWe|sdPY(y{ zJm2_6Q+ky!KPmlz2zKu|_zo7RL0ft)*A*1}nb$%@0N>sDj|Hzw*6bP;W$VP3v5(cl+PFEB zAs3X7AE!M{l9XGbwp@WyF&5>BZ|#xTjy264Y7LstSv$%~m;dzbI|*=FNE}pZT_6_t z4(O@ouh|RkvA8mKOzI%1#r2jFC#4vkPNOrx5ok?fJ=m;CIhkU-2+Y9;pTp_*;CjDMB|oNh(~P#)jf7}_KSziwrO%RkBd zRQNpkn}>tP2wN3_Sv`LEmw_ekQ}?A0onVkF3)DZE7v}Z48B$?6b&I~zcCbllHh&Ot z^r`X)M^py?X9md)u@S zx!G)iqY}(ZI>z7-C$M~5Sf|8%K@&~j+Y>OB89L^%u9^)`%>Rn!R9+dmZ!9IeeYdrf z)k$bnSqS-VRgQjtF=RDrPqRGtNj6E8E~G3~m5)I?id1IC=5|`dd)nj-wzMKR2k_UG zabsL>uUBt-it&0jdO9X1G89(Nrd4}>Y*=PY0nK+8J6O@ndskVa`P=S~NB9)~b_(mC0PzohAwU=eFwkO%>d@3BF5tHTV{r^sQ)D?32y! zFA4wTPvL-RrP69F-ZQ88U_x01)P+G;|#?M%@H{WWYGwv4;7lTU|}78)BQ^lG}p3(Y`MCy7Sgry{-*`QzM3jo_j%7+^&xd%ldPX1 z5fU!yaVv-lh=qC_W}1jqvQfF)o+IIqIe`hqRA9qy&NqM7LmhpAt#q9yA^I^0V=+9t zqp~^wmHEOfyvsy?eYH9N_k#57kvtl-FS|`ByViyGfv&}pI7<>3kZYxD?{goR@RjcHk*WYA5{TFJJ$7p`(^{v+2Ob`)t+2-xK7; zU-PU}4QRM%DKV|lTT%N$=NA^BhHrR62&+hM!O;nnk6(Q$;}eYXDXbnTZBn@%fg}L? z6e0$V<(n;hZ7=N?GKVD?G(p?O7mBqB{aA4`TDbVayRckf=AXb5jsWkD5FJT|Pjls- z+lgmmE&OP4h>!GfH}VQ1A{nO$7G^h1 zPWr=)Xht=6R3!Yderq*Gihdr7g|R`<^c+cmLfcj+h!^DJ_CbM&!e@ILG!tqWk3UzaSU6Wjo3^d>!qXrBt!T zBeE#UYWt7i=>$>T*O=|g|LB42Zk)5Sl#-v+rK9nQcy>*XfpoFk-m*HOHu#~%Ta$|p z@0xA5qQ^xKkw3zH5^+Z;dQS@Ac#eVZSOZx>@FA*cU2ZvFw9})~kyWS<+ zQx&CoP(c0Ifne zo&331mmmuD775vVM;D5gII?)^!@>>=$uKe2lbGW!B{Dd)!;n~kN5=+4%ky$kGrMVZ zkq8lfSA0o`vRSA7v~oFjB(s-@?6x2(4%GO8fQo;AX@+ieQ|7^0&z_=k2_3p1bA>-Q zA_LMs4y~s407DQ`Voc2QYI$|-%dXevD5aeLpO&%N&pqxyo${K6?}yMl3z%5NOsmDd zq)<=w*7+jT?JR;t7+c~q@ZbWVUfY?(p#6mmfgU}e(ff@r@b=z1D`DAgH*J@XAzpMv zTc4+WvXV#uXBo0XU25X6(?r`B?Fo#BrVO9<*cU9<7s)={MPHhb^)?>wI0 zRvierH%^sqXS{TiRH|N5^p%O3mv5wLx8asKBB(j(jPj1U{Lz6wgzW5EtO%7Van{=2 zDyjq=xaD(=_Q|5k;ZIkpa~~`F`7QGF*5gLg)=Tqpgo%c)h1-~%W5st(kY_yIRo>{4 zmw+1eO+#L?*k_@6-JlH!r8?bD2H&}NysWPI*FVpF2Z?D@;L8^~(*-Y!`PL^2<@ZXcDDXvc5s2*lh6|NHBsNT;R z$=P_aD_Vozt7{&zt9~(7?)}-B^;f2~n3(WzsD#TO7(iA9wvwFn)KVoF4dh(SY_zGC zuZOr{A+NF3$G`25M*rG^T*?tdO3ac{W167x0MRPsD>P@^Q=Ltc;M!4W$4!Pw^kpXE z4;ULFfi%TV^A%0*u-6SZWy~kBs0zTFbTl|mR9yppKZ*b&7teFjLNVUEtMuGW*UG7x zWUDokE3R5?5_})8+3?z3imNf@^fn#w=i-g^Pia|- zg|4GLadsPwsQw7R>RDv*GDtejm*1FRUh88$-~Om4-EZ6eu0tKk>b`(sk3G0P)3H*3mHiXn~8b@oqYk8>hj< z7h;wClJh;r5Pj(;VjzifAGRfTOs0A*{sn5VI7eKcBtiZ^imp1WsVNSRLV+%PH!ipnJ&7C+ zkH?N8zHRZV+r6U|_tQ0KMY6N0?A;(&>sePj;!Sgcg7R08Cd9_b89Y(15*kx1$To__ z$pEfMQAu;9aTQ3Vg)Xop3=1U|ph}h$a2knRjlAc49Vc5D z;u+0XlPfAzSoU3*wfeWPvIoMC?!%fMi~JIWSi_YnK7IBS#3n$c^kzF!AR#-heW}N= ziIsz3;viUh;>1g1-|$BGV?4u_36ICz96`s#a?O^`YsfSYe97TEX0SZx>uvkw(1 zSwLVo$f&O#&VTZKSZiYb{X^!Q*XEbLB#i+B!NgJ=Lt@7vCG%!$B(m{z2A59=GKz_) zZVAJB8lnSs27Y@HG1hq*8a7(r!<0WGU097S1~>f^hm&^%Ci*HGv3a6+`Z-P1tMJTA z-!H4)((&0{eQ>Pb4l{+rbp>@yVzyn>2I5LsE-WlBO{ZN=x=x zw9`y9v0R>{E8|AF@zvprTc@xEyJ=pDQf>qEpLZiRF_)zS>-l{I#CmRKpv|vZQ@CRC zSQ`AxJd2`M2ZF#FTd%7aafn#5SF*`7q!5=0WEX!z9Tvt%6ABlOtHfW)fXY-Pg;z@? zTv>iv-fShUj*KKjp>H=q{jD1D#G5o9f;O^CrlRv0cQaZ7ifS}_^&RwJNg7}pbYxV* zr^jh7-G^x_-GL^=Rxc}uu@0J?w8h6?Cs(OkD(5yPx|}*1heRdv5&9rWvnS)XztdH7 zKEOSf`kpw;X_Ua!nuyZP8#9MNhUPDQ8!c07ZlSbZh}h{SMDwb16SIqt7jdHz;=4%i zOo4`wzJfnyi;k=u8azOhuWLI;!Dx*bG4;}Sx{I3O*gWl6D<-F)My_mT=9&A+dS-^Q z3|R(Y`W|%C5bQK2mkRiq(XsMSH71#h|DjvbVvPS?bWf1L;JGRESp9k0T@nHRsju14 zfsSTFhdyFx%kN6NFtwPZbuzc@P*q>~32oOTVw!Spv$&eGg$e~?JZ(u049=OrZ$5V! z#5bfUzDBqiie+%n&O*>F@lip0b-CgyNAa0miMO(UcybvzeqO0>$#Zj$!ZtbinHfCg z`RW=ja1zODh``X)PNbM<96`8-$MDl^@O+70@DG|I%AJDj;h_GGDmJm2BRzwME`!^v z6apOPhy$X0*_x&a>b2Kdwie^99VGaH7m-4RlIhs#zAG;c?42R0EOXztIl$#L5Aon~ zakB`B9PDOmrs}Da%fdH(oSz5gE_Q3(PK$}qO@D^N=RQ+u$#_KlMuzDOqD{1w`aw5r zs3Pg{(+1v~weuWaaY-rS%&)$ZDBooyV5I~>pseEW18Xnq?ur<1KTdz#{VHR60FfIQ z>?go8z&b7DiORIQJYYa2XycLgFypn%9 zjorJ;{en0lsVletuymQU2k?kHDor@tT`mq6Bg2M{p!rjhF!nUZ!-+Of3tBSml{?A? zayVy*hkt=v!iZ{Uvq}%5v3fW{F`WbKX0PP|OBea>Ny8K=hL)Bsee|~^TjY8nF(ZTv z^_R4-_%+uj90$U>PS2t_k{0$^b|KoGosz$w6;n52$O?@Q8g$@bz73K&u-)B|U zpAoN;WBb_bRB_;$5F;rY`A%LM;+=~U^w+p;Q!F=D>&o8-!%B&#Ju+Bz4n&p-S=>g{6?s$Y6#BF#TjP0&+|*+i4QW_{M*05IG8NF>B^WkRxYpTaAsH1=Vsa6E zc0oJIBbmCAt#L&o0>odY)rGhoNTwmD`QKQ%beQ?ii4o<|+2#Db0b^l6@lZqJ!0*7u z1N4uJKLlC2Ns~sm$5Lm~oP|$=hL#xrNs(vy%&G~UOrqw`@vAeI8J+eO-Q#vo?Clbg zwc#}L{kl;p-v)J-_=lamip#F1>LBFwHiY5?v_Hb76G3uYc_h+5sNpmSRn1qS9C~+k zETVR9?kt`->odQVL)??Gwz$@0R72kXScAz^MQ^lG+Eo7ejujvJpxSq2@`fS$s16bq z5HDNfESCZO-9g*0j}-HEf`4uCMve%b^Hu6jgJE{%8lI2L8)G@-pY0Z^R8D4s#J%2| z2_3Rfj#1Q1jXf&yl%m%W=aUo@Q(?cb^7-I70{O$LL{UFg83jIZo+MDFH>l>z+`oKv zNF>)W(+0M;6WXFp#Egy0q>3)oUQjlPjJO1;IG3B==)*>91$2D_nGHNG;JT&6+d;$)dz=On}DFS9>0 zaQ{R>hvH-$1!)(5;p)^rDA$g5kAL_R;<-@*+O_N7jHf8X;6LRCT`!laki0gTB9I*> z!|iQNg-g0mI*^}mK*=X8N06*F5U2M;EfM1^zM%Z3M92xY2J-QB(Z;fO*X&Z?q;R{p zR`lDOcXAl8Q00YR!@$u-qLh2t5mN!h)d^zhV*!ZVt-OmITyl-h?rD-*l=F7ofO^osq+6!hA<4b!a_zD$|I@2HQt-&4l<m_jC2x(O#$oF6e>Se@x?+iU9A+1NLsJWLMj|t- z46!*a>^AdVL6dCBDDXnNH<9-6P`ARjn>EA=r}GWUNvfyaz&{hz025qqLyie2@IrJ^ z;$|D33qyrkKW|H5NPCI!`^bNIe-+d-Y!31 zX>icQReH7Md$&__vFZ!*RV>^3|GR6iX2MqD`O9_X?*oiVam>y@eIx?bNm4Jvs0XgC4dzdDS1^ z%0cfp!}`;>E(2mM=3%FV@uc;Z@N0?S@YpfdkOJ$6{MWoblv##PpTP87*&i?x(ikK@ z$RS%HeK$H%p1>`bz&*a@wMHm@TUS>Fe{AW@4Dlmvmj>-6Y;Z@rolku%= zRCgZVlBPko3))q`i0i*9sz6VMWevat)LvI98!5^R$|N&l={TgmEna@K;P@u@)|~eg zLh&LZA+`DUW(1tjaXp$O-m>VNm+0VZWI1D@?Z3P6XEL9r!Vn}846&~{gnd1F$!K@ zU+nf8zU&mis{!c#y4%!qrCAa4evooO6oEedwpo&|VjBDa_sXc<4AQNcj9(uvr$G~r z0QpoC-peX=?O?X#kKF&=IV7#F_Drs%Zb(9kO!*stkNBfkYw`RV#ZMpe&wNW5s`2u0OQDPF0wPQPK$_9w!#NH@c{Lc z_ubm-(G8P1r5(x6tb+R!<1EruiNv8)Usdz~3CUK;==9y!E6`^j@@k9-6z_>ZRH2@|y z*>3cfpFF{Qdf`<&MZWz&bD>MTh804x?D{bwu65 z+1oi=as#H;8G?u@AI*KKT1L(a+L&Ki(ph`_ke^v}+qFG|Cm-M7I)8e!&p}d zB30sK8}oIXLIk3Ml`Qz?m^a`Ue{cX)UF`;J0FIBQn#sUjUKz7U6BiNfl_y0!z6ISo-5JYGsQ z6c9G>tp`rTiO_sRoYA4|9A-0bCxPm}M|B~hvP^PGW(&lbqwx1g*7$xDr(h%P%R`P@ z1ea5pM)vH$urtLEYkCFp${ z(&TRxZCcHTx~-1Jq;13iuF@rcz(`-y(S!Wv0h2gZhN1YHC{JN@B)SGk>RY0CI=Z6v zeZ01={{sftk<~v%EOH$eioGSa!~r=s?VEM_;5#`zO-gM*3Ek%nMR?ro`AGw&GzLvz zfn7>DGF348cM+r)u9LP8&&N9NrKgL(56ihK zR*5lQJ_O|Fy6fvyr%Z`+U_LL~F?)QgX~|$y#F$a^4U+#AY>#t?L|ApU9xU@jx=!sd zh8B?TpQ@su8miyP28Fm57)~U)d|x;SofiSVop;{o-JXrC3BU2E4=*@KB4YaKKI!ZA zPDJYd_vcrSH>y-9RXdCp-uj4Y~X@0X{m8%qz4Uc*~5Ld zCxpjO1xHh)B=E-A6Vt5fT(x3{+e@m0(QEVe7v_i|#MghFTz~RxGypRITk3lTTFW2x z2@mN9+V-e4+KB{EJN&Yk|2Nxm37SO`4u z0u5REsQc;_Rs7zHoo%>d|5N=mguU>gX~@1f z?fgE@z(y=R3}7)fMGN|*M4iEDSdf~#h63od>O11kI7T>o=*Gl5q&DEJEY$#RaBNqo=-B(hXn9E0|NCO+zhp{EFeLNqj$y{63#)HQHD13p280E*fD5M|z zpfK-k5jEs2!=)x9*u>l8_6G%3$0RGL=1#}e(Mjih(jeQ<9Z&^%PT%=`zDmV4^}SWY zW8k1*Q+pt0Cf#W;gkt;$NY1u^i?WIlzz;94P@&;#*P`$-6k7gDT6{>>5YmC}y)Wo7 z?(Y=r+rV$!e=oM#6pqDoEe5cFa)4&Awt!5Xtth`GAZ+y&1dBS6lsI@jHg2Iq{j!p7 z1e;YISKfeS9_)vy8Ho|*wS-wRv5#M3K8vPb3b4qLE9?084_l_=!`iNY<$a>9&Rc)Y zF5gPWf>Ik6@25A^*}l-%D=Kvzzyf$M-9Dxuc%<2f)>nf^sMGSiB}KX)dNI_C-%UVKL3@kyv$2la(oQjYX|G(Ca;UhRIBMfMpvEdI?zZo8Bi8h(D*Qj!11R6N+&p+`pTod5<7gU4CM(Z`knR?babBOSavdS07m z-=$)l&x`~j>wQfRKt!gXyuVY=n7aXz(YV~k76BU)t|=wlm+{<%weV~2bS7JYM?aci zN&Px3Ou#2Jup%Xn@XgzMW)sHSrD{TnNS5>AM5s)uX56mntvLQ z>R%DFRzcS+8EkOlsa5y2Wq0Up@#-AFQ32>$s~<{}uRqEjwuy%0!uwX^BBs`Rapc@0 zx{Wx%I|udsXR1&U8Z+_B5R?~(9S`n*pXKDlaC%QR#t?dSCEO5;9$5!3zN?|7%_f_F zj|@*yS8lf3!$CL^mcGF=ziqF3+>Wsld`fZuZ zB_`(_@8xwVTJpIP(%7N~LF2_HX^<@ubS5rcdTw zx@KBeH}K<$!(T&y3&de+p zYZRef8J8So{2x6O0{Q8JQ8%?rO#dl*`Z_RW=THdE83K9BNQhq2{n(__`zA8_vqg*) zUdiyyCTLpbXw-2!b6=T)1l&^vqdQ6!>UlTI{xT-wH_*dg680Y8J~ZKD zj>30Q07A-|_O72zk31y!nO99*ON>h~?{hFJE znuWUycZAQE;jJt9y%ZtAER^gC!B?676g|i0{43R}XtjpDIH2t_$ zz3G+)< z*?La(CY7SP7pZ1;QSi^xCF8t4`k-lUtF`#82CMtkbOG=tbmrWUjz*?k4W^+FR3U_kf43Y!q0k`>rlA#1pWMwu>qqF6Ck8X`*f&QEvas(q z3F@iMxgjvtR=@#pZ;BWJxiVw91EP;;xrnH#k+-ifNqQ+zo<+;Iu1s=*Nh0>7>n4G} z63;2Pc7W_k(n3_Pm*jIDpcm<4x{zMj&k2Rx6>YbA&gaz2pneEG4;etf|CXq~g~m`T zCUuLp!6%YqE3U3xVyWFhvHb?d4rtSrig+kYw3&A-0_@P#7-B9HBHEWV%bSfObKaBM zoJ)tu5{iL~27}JS;btC%Lv{^8!J2QnZ6##-G~@m*s8Ta!l`Vn~oKEWnG}4e7^L04Z zPJ~iHj}9eGfK1=wME0q|x!n9yv;+RjT9?WXtDQXcyO4vSevc8r$!ZVYcf@5k8SWA( z>W3i(pkq#0xIg6Y2!A+v?qEbXZhr%{_4tOM(ZK7_%akAJEDJE`L>$x#atULOKUfGg zJ9SgN2HLVGGJx<&y7U|yikC}n&?&vjLDhK6@?UusxvnLQ`DT%dAzci7amA`t%BRle ziq#wm!?X*@LItvF%U&uewif|4R~y0UC-Z5h_#x*?x^z~Y;tk^GvcUSge(kp01@9ym z(XpLe*2+I9w_ow$Hw}cnENZYZ?vuQQp)#$f8q>c=Q*FKrH+&yH`H2D;<-p=z;$6*e zO-%;qtE#lj(u6p}^;r@e?IV}C9fYc*^i&>sB@>foEsxQ)B&seSy_EK z>WOBn3=s;Eq;r+d##a5Ee`Ot0x>mDCvY!SBM**&Hm@Ys*-(4gOsZ#-TQ@-mdFG_Zx z?8v1hbIn&fZjP_5#F3Gy>UHC2GS?}vObatQw*!x`;Q*g@hn|tXC8R`O*_GQ3&nwH+fin+nIla7`w;N7Y(Id(0bfahhtSyqkL_qO zT8CGJMv4}o)P1yLHi3ux&Ez{1e~Kk?hRr~iKDl@fjYI#YW#<>%7$~GYoZiCF(|zF# zQ6_BIQ-r05o%{BC>e~d%;%qoLT#<%jRQ#akK`+M+m}iiv{~D3VCjFnMtCeMS)tHI? zJ5P!ORl`|`+Aw(XT!9G4Iuu*sM)sYiQa8 zCJ~8v6?f=TfqH{z1tQ_rC7_Pks@bUk?}<~d3IVrECNQ!Cg9Ti4fvvr)qB=U??KZK# zeGVH;__7vuxyBAQ!jUL^BA2?irvT({PF_ss1<3&YS!RvTW$~Uw}`8S5`I;I*(6;;b^ zWRdlu-bOiqEs$C~r_%o2xL)YBRK-$xv4@L}F3P+$^3^_XubK=mE6dyu8WqRn}Kb&2x<4^!dOfG8v3A)6F-( z?n%StpemqX3z5^cPgasPH83e@dg+}1bF&|x^Pi>JuUzh+ZiY`XT4!NWhXuENc37{O zpw|6%CsTPf9<&XVx^zjUU%_|Yllo@~LCZJ(4CXFp!qe>j2d>EVIf5vU2LHxCSQG2u zW!|7m*?!&UvN|uk-v42LU!V{ia#W!WZ*_EQleDgwa;$KO)G7VkVr6Li z&X^y;a)W;k~Wz1s<(Lvgh2W=QG6 zsV|B4AQl==r|1b#Q4o}Zcj*{1$4t_XT}&pqJS02`?juZIZ=+lYdOq;(cbTv3e}Ov< zU=AI^`*?zcdwohYuNE#HUPdd+sdtxr-TY_&JkiAlD+(@=ZD>%+!=kj$HlAzqWefFT<&2#=Hcr z=);u{=?3$|(uokHkRaOQM2asVnOM@7I=3N1eK#a?mTf!)0~Ew?0Yj2tzu~wlN~q;; z;R3S1>TH;(^WT{T>gf4sqYXf*cY_WSw?x~)aee6Bh4ghBl0iD=M+ zScUSF!38SJHO6jNdVP}sWOLe8@I<_QLs`Vks9HMC3K)!fi+hbSj-eE1Gsmil+H}bl zfiqlsB{pEP5f*ve|G^YbQXdMsVlE&L5WHyqEh(xM$_8P$nUAqb~ zQ_sBDj#zc(vIoo#A>Sg-$WJK|XJEjw8jv@9SH)wuNbB&y;E7t-pXTO*Y8)#61h1yD z*bK;(+yMZWi?Vu(vmp}luHnLTfPW}CnY`kFak!I0KuVbE0 zFjkB2L_9t83i2V3>64J!E`P;}L!7;d)HW*6XAnBf{cO1A1Pf35pw<;MJysaC_v;lr zaqLBW%*em{^V_~;pu2XFhAE`UJMNRM9u-tBx79A=l24FEQDK0WOTk3GN2OiZ6o>#5 zPn=y_j(A&%d7SF%_ek@Ns2_!`L(}#j-8-PiO@*I#rkv781#)q+h|o)932#^mvwV>Hlfu29K&+hOh#Jr{@#S1cy{4XiU}v(2phU`jVJI zi>4;`)Q8xjeJ!uSmbp#A{31|ZM7I(K2}aX#WPWL+a*)@~r(~nJl)_Uz`LcWs!}0JT zc`>qkp2s;5uE`s+tKh@=1Qcg*E|`&d12jB#(20sK^PJ{z8n7Ss+al7sFSWEE0;4Z1 zSBFu`E8r<$OFmW?orrT5Hn?;&`u4RLhrF<~mjQxn7JG_JT_2wJ1i5>{KUuWE{&aG) zbQb2=s7|l??;al)ZckT2AxV;*a!u|g50+z%#vJF&!RY$8!02vLXwm_FUpIRA1K_>) zQQIa3^96g2CL-AOQfacYlb*BlFgEzWh(?RbLZB(-JLM)Xnc8DmliPGqp``l99YOLYe5Jnvtz01qC|3SVBJP z8eD?yGb{p&uMjPHT@H3N$I~i!Me2(svw7H_%_!H>q>RMHeIvW3yHuR+vIhtI({wKb zaa83X{5f7bo|jv1D7>hzyTC5CNH0bNrw*7$lmr^dI=?}qmizBMH;Uekv#M`&uDQ~w zwc^d*0NnNXY7<@9u$>8^W6})mkg!hDW~B`4@PIt0x3Pcqm6e~+4aOZRypdllCkoFG zr$YaazK061j5FNLh74JFcSkj^d+VAvuN)0G)nNhr60p15GRaEuhA>~WZ$9$c{9D0^E=fD_8?l!$>4>Rb>jzMU+<)67urQi6 z^35rJqo9}=)TexOQmFMGwu}5U!WhboR-~7VKT6k0RjM;K-x*p(gwU z>xVe7=Iam9Je=39{BTPU073#r2-WYwiDGnSs5O(Le`8u^Utq%H`v42R zVOxSJ3zUQnrM-l-_V3rBxd2txLV9^l2uu%s03Nr847a<_d%&DH3~G&Qw-SG7rAnO# zH?#V)7EPwMyDuPo=K61iph8dUtl`=rD^_Z>SyM&B8KK5;-w zfKiA-I5sCXx$Vj_FiyOtbfOOJf>iK~Mtwi+0XP7f>`3B(*j;zRs}sH0q+p4k0kvk! zAkI}K$d<{iy}JFUxY}i%ex~T&k^)5d{!*Vhy64)z=+F8iGbE>q4Q zZb~GznY^EPyCf)gYm3fhtkWHK7*@{JUb(D^k-8AcSZ9t#_s{!MHeUZ`-P|6nV~)c( z3A^(UJa^m&lnPT5qU*&>LP#QKl?xP&Z|?cuz5i=OSQK)Y1PlpUtWsyGE#L27R2TJA z0z-jg`PO}^>_MhyUj??2PyO1s2$K}gg(W%xlx52p!W=}yc@rF+;rlI=66G-mGvgGj zmcKDm^AJGzWDp!+l_Ip@ zhW_?8qu``}rdTdp+-;hb!MV_z+o&ArTC0gOz|uGf3wGL+BsPtZx*q)|u={hvS-;Qf ze{=H{Z2Lx7$%p7gORRci))!nl^IUzoSqM5Gq6Km@h<7v0ko)4QVq3AVF% zSq%tq1h{AgRM^1x88<&$=|Ntu`+^~4pXu?ti*V3UaCM%<-AEcHcWrc02cwuCK*m9r zgA{BRuVI&ofVNM&mvA(Fggq}BiE#8?L<&CAA|FDak%r$?Mv={u-+{+jCU zD&5-3wK1ne%p*MOQ(Z^+wrfa%MZZ1$yhhE1IYp%!m&WPz0q(E~cT!2_U-bk$@?8x> zU)p{p+)$;`j8i`i`WOrN{F)v|@|U{=<1(LhxY)o5{})~NM8DIVR-A-u^ig!;Un;O- z{Q=WznAL4!{K>oe0egr^)oXk=JVDv!QAgXnEb2tc6iNn7(K*cfu0lMnC zNUZwg25#%MmCF1elPnufMso(k{qjbV0)nq{L7UgDgmYEvKg4tW^ zzvMO7Ycq!o64>t%_aN*IK~rJMI9EzdC!GvD&^zwAs|K3TG>qtf73>MqPz?RJv?~Vp?te? zJH<(<@5Y(Bk+oYSg86hWFLtwm0qe$`0(+AKb)+%ObCZ?j9nKsci`f?f*g!db&;cHru8kiK zkeRFSc!huAEP~UgG=t$Y=y=~TF!%qpTAOu?c}$4bo_jnNEL0K zADI_{d(lZOR3@lf^;mf0b$hp|YOw%XYdt^B=1fXQB*m3d($q-z-kld^e$Y)*=G%ERwp-GZixokwKV1V00FkOAsp->l% z8ve$#&bE0cz~Fpq>#@S;wHEsq`r`h*Qq`(N6L^%n&n$2iikI+s#yy!5pJS^hrp~g& zm;6jT7BB_9>C$Y(D%g?342oF%j`CuJq5gEuu%u)=6>$Gn7h2lvN8=i6XNv*}fHn%R zl2u<>AGRX~pt@fSLRBNxC)Zg|zFiqtjz`ZJC%_ndGkeK8*S26^xC9olk;;oavpyfM zjKmhmw9?w51Tp!su0y^~@2~=5>PM2ti{0>e%y@;mHwiIPNehHM^^ox1iAR)LGn5Y{ zN5WU|O-5=*BE&oCb@xkRBhJ^w=eGMC>%!v&1b}dA&U!=d$TueXY{hR7Ym~@v*_Ecw z@amsAeJpONbI{NCbXD{6aCfrMu}xh`if8(*MFSQN?8PLOFqu(%*&7_^dxi2+Zt`D* z3zTi^%^)kG`5&Ba-`1Esrl^>1Z=`qeIJSQc|KK)u4gc%8+&DZ`laBNE#fT?QIn7XA z@`NveAWb=g@a&cAasHj3{q2s;H;xzgw(nQ`?zM_70c?LV)PBG&>T~7Za(&W1fSH@z zzPb)D8j9T(Y|3LIOfRsUd7mKcJUx`}%VyPG*r^rXYKzV)sefF%(Z`Lh-9zvPL@BPR zif*`{s3)VjQVkvtwN#;S$%0z$b*Q8%do#fE-8b?{pJJRxn$XVaAAbw!=K8xu&6PFY zSe6&sG@SzCP}T|d_ym8v>Bqu!>b5|uW=dzcKjqC)azt_F!6mJ3R{5_xHQy+TQ!La5 z?{rYAdmpYa3WUD+IuOh&MAEVF$$QK|6=^AL-NRFemC|70-3Nsk?Kpr^vo#@4fPfKV zj4BcIgqp}C_en&=dLH~{KD_79x-M$pBEX&aIr8YYs;cDvQ`Fg0RBU)lk|-VvR&lj< zrW3?-O`rdtTOp_Fv$ez^8=o&_%?cT?`4C^?`*N1#ljYGn5a+)o#LqpIj+N`B|UWei{OST zv-E7+7*`?iB@550aW{~b~f zera6rKPY+6Q)dU@I7WNptX?k8V|X!|jI%OrgOm#3Y94L^#{@c@mL|*#KLR$;5-R?6 zsu{ekE%>IaZg7I_h3GleQ9oNvI)RV=^LR9P-T-ST=-D?l(O*mEmr5{_bQbAE#awg2 zb<(WCda!Z|f`4{MaFDN&qeeuqwVAns1lLK3oov4tw)na|6L@)}VcXUfeoG#5fc~rx zfkmC4Tznx#l*`ZoTL;x^L$DWEIZZrpROx5#q%B5dfgWPs;8;M8L+XBs^KZW=BX%K^ z%NHV#Xns>em-jqQEi!@s6U;{iKn_<*&eezaXvu7R-Wpf%eXM>GCnIhevDJ5R>LJAl53s-g%^ z6(5)|Px^bGYAg98)g_#3lTG_rrx3y9!|E4@(%&;*KHnC7*N|a)wKkqyR9YS&r;stb z1Qc2t_50Hj6dbw_pfoR5CkUksmNLLthxix8?q|zd19BI7&p3^g-x8*Ihgv@s1kYa< zV{kiC);}8e=N7pM*Q!?uby5g*vfBB)#*`5-Vc?$CYQEB8Y1YRx86JBHSWtW~xAjdz zR>1ydZ@g~=ui3GgyoZRFsBl;L63m5W+E~B-l?2ZM$bEvkXAaQqMWvR!$RV4o0#N0r z6Xh!tDy5(qr<-+7&{6==52e&CpxfhDz*U5a%@RG*%Zl8!V<+J; z3a%SNydvwokj2MOm8U4DgA zOp5h_FVO0j!zDDrlX0Qp1M{vVq>qmyWm@8z>8<&%d`;rLQ93-9xz>pSFoVtsU(jzf z#p38rf4!vJ54k0s;GusP^&6C`h<-4QkdWI2L6hO~pd1fI&@bs-@Dvn}|N0@D_O<#O zKSERV{o*&c8*gI_IwC~VUY5y30JF!HV(V~-vsCGb9l!v-g8#Ilev0lpN>|HOKhnk= zG4rTb0Xq8ij-2QSejlxC)u;K9euQlE6*%h}pu`IUIOf+Z_wq5_X8tz+5MIV9hqcz2 z!mXP;bB>zs!cAp98bQ9ZO}4#MRu!d+QUwKN5?fmpX(Th7+@}yrp{am+L-t-haaA2Z zDhn(X<7Va$dA)nKUikU*Z19GAh7-X+a2OCS*T>^FjuJ0%`<4+0ewW_PuFdazTBB&= z1M@WlP&20CpU21U)@2@s;yqcO^?$vCSm(D8R=Nq%gB$OR4H-py8?>x~cn|-Xyls$% zlO3;Unshmgh;4G{eUA^2j0fz&#rvVTYte;%WKMDWkA6@;?)vdJ+m=YrfYO|iX8Q{u z+ZZXlcaO;>IaimtcJ5Ga-jLboDdXkj?HWGq+HB&;;VHN)0DXwUJiCL%sp;f4s2-&fV0WE z=H^`T8Ndiece7$2$ummcwT@c2PO3_9CC%DxGF*+uEVgmXx4aEZpL=yhH8^^MHSfKs zxQAsDM9EpcokzJtZU`3$qU=1pMZ1p){tk_099%9tQG7e1@2C_cGC11~sZK zOHJtq5JX7_(fOQSD~fPY{uy#EF=B^~mS6V-DXT&>D_;i!9{yKu1fx)*Z#v?ad zG|oaqKcHAZDb^$7AwN|nVP2KmH`K7)p6T1L3HL9ERR)PyIsO}@V-~~tYPw_lv}lja z*FAuhu&DED;yAi)u`cbR1p!ufA7wTo4{uZ{lceDIc`@zj0TDEMGONo!=VVR11&Q#I zKlGjEE2>SiNJ6JSdHT;e$lV-;NF6U?b*B*^h`%TDb4nRG1Z>xgB>2y&JOZ!+x24 zU`YRH`^W4UVwxfi)iEo5WVuatpVTkvuAd@x9V z=NFa;tqcB|u$3-QZu*=qqoAB%AFQV)x3B+BE7)Gq*mPD0ev!opR|=CoUG^WwxqRGyoUNjR4YIG-2I6?*L-(f;U~j>Q$A z?{v>^)QuOKx8`|*b>fXw)w4s9y}X&$PPm8dY&GM@#nK z7ymWKt=Y%U9_TguzPpQ!CLx2Nqz1^8F7lexOR617Sb;UKJ%DgoYu}O1_8R!9@YlU+ z;!L3UXPw2v43(eH40nJgxkTUIH}Gc_G(Wl6c}kX}7#~6RT&jwn53HsEzYIU*IRWbF z?UG}I+^^f6KLXU;0voqi=uX1N=43Gkm=ir)a@T-q`6c+uPn>QWm3UcCI5%DyP)hMl zLGy6NcDOoCp8_VUi!I)BEhm)~x#0@)flS?I##Au+kG)d5imJz0nR~L+Q|W~u0E4suNIjNiIMoxYUDEIl|z*yHH^Kllv zFtSNKv0k(z`Csm{K_Ou{wFS=&#eEAq6V#^PyX{m%h`ad2pCm%c_M4|7^2NJW5cr#R z=#BFirM&qMqUV%Sd~asI=jN)~q9HxkKzaNI0DEsPLP0aigKC&n+bQL}#t=%MjFd&sf7XwUKn2Y5~D*h7(wcTqs8hFj@INr+Su7PnA$x&d?C)SK{X(_lLbRG1xlJtle9Yj^C{u>#-~ zj+f;dbYYADH;-qOqp2nx?5X$IZ28`8vmiPhj7;bDUf}RQUm}t<(u6SW-2~NO$qH3p zjnIP&J9X~|+AuiD-z%O&J<3(LLK|90P|h4GE?Nkg={iwq?^q(#mZ%S%KQetVkaih| zrb^GaTt~cQK8G&j)7$S^cv(OiCRDNm_;WsYtm|EP$5NQf-RdM!V>`7~eqMIM^WZsX z!d?JWmP)*}J7rRo$-Kbda%gpLi<+ptw#eI8E#6gd$-s{+_Ze$sS)Q-v^mvCbPNjQj z<=@%!A&jaKQ=bXo(y(A0$n(LWAYb7Eb&6xSyC#j`;&V*dKC1OKHnX>qIz303p4+`* z_v*?aDW;)+-1;M`&a<*a|Jiq+@inK5occfaJ~b|C}t&0*HzcAjbdOLw3& z>FC>ICD`?%kx!{RHY0Q+s#ORS`*vMO2m~vDy(($kl;fnqe763D%>oT^zlbs($UrIV zJNyQnm*E_=MHRf|%@wHio?uWANOGFEpQ3$4Q96hAT~yiQ`ejBY-tc_57kGwfcIhNu zQ^bgTv^t-!wO;-0^NG%ZnRcC=RyXI3sbTT2%zm*+O8_;?$udLUnE1RR^jo*E*&RcM z){>lWXG1enS+U#|`{D<&tUImu)D}<8ub+nSZ~%9^5_@(q6&^%81tJ?V`4MRCC11z& zo?!ojYKN?PCP47>aS?{`l(^|-;t~A#&i!yb0d%1jh%*mm=?1al`%A0V zGeBQpCjJzscv>WWpTkbd;M&RkFCdSHCwp(tZmGCWZ32g@$FL8y8p+frqAgb=Bd_3RqT6Kl%c)c{x+-f5E^6w$N)m+ND z7%qC%wkT|B0ESSaV%D|%97UM?A4f)q|)SJ`&5s`CL};*z=7X7LC8#0 zD?Z~Uwx6jiH^a-v+`XKajlL%|S>+;Ou~18F>Ft`X8eT4e{w9PyV`vzoSWX#;+D>hK zPijuk{p(c||GJ=69)6X_^x$jgQ>RyHVIu2VZ5D)RvHF98>+cd45<5yb>te2 zNq(-}Md)O5Z5pGwtmXP+6Vi#HLCK3bH}0>{==F>9BcmFo%d5XgI7!rWH*V8rA`u97 z4xahGo$ZkwjD2QX?VHQ6Z(L=4tyq6g-TjeC?gDyGVh3MoUdKUKbp5fFXb5hYS>0}r z+D)||?`B<7cjtL~n?3f6n}c%2?nB}5KvWAAhK#sejze=@i@J%k7nRYKb&gou!fU0V zKIhVP2)nl&*u_RMG+ulYQZH~pJF=Z`o!&Lm49rULvM4Ov&rtjub_tpl(?6mMEbInr*CC}BG0tK?6!ODs?y!4HYx4Tcbe;D#G~e2u=!KRUR07%1p?-+ z3C=$0W+J&mYv<7~nDyi4d{c}7*OnFtL=tf^R|4k&4kRBNmPXxPy(NL!A#eWpuJ`B7 z=jYRl0f&KF--TxJu<6DH4USQAPxW^~8k$T(s|IE&u{P}1LxR(3PqLWHYhu8KbPbA# zfd;?$pZRa%Igqtfq5sAM!MG&mA2OfWJFP%-=37=ci&5M54;v+QLbZ~=bldF>y&5SE z>vMQDk+Q!B%NW>hidTJg<_eg@SHZCk67H>rAOj(&fQs?D{b8&E_T?l{jxF~zNi-Gc zz>A;RgpxP8EyWmM|3c-T&tFe=D@*)#Yk;aF*W?pWKHDAayJ?ZU_sO-WyRNkYU8{#( zn`FNr*5|&TwaT@!J^=c=v?M^3QLMkVaRgjstEvv_qFW*!N$f2B+U5N+g!rM`1h!yC zJ~-{%1P{IYJVfQ{`WlO_MM`QCckxI$X3kNlfk;YOAosctLa zOu6p^Y_6m?wY88f_i_?)N`8ZT$lqmZIM;zL*4AkX{^uQ4IyG#(7kvAU*7&m%ad#{~ zK5RLi?WEgoz*hKusm$KTxK(Hp*Nj(k?9#VZXj-H@iH*Xo8in5nbHDAw5Xob!0|Y|KmbDd(_KXSpW5Ul}4Ne@sYR`4ZIeKD0J^Vl!CmInFtAE+P^$9qgp`igBg(R?|r|i78V&tRqK7OjTKHGYL41B>x~5rp@;T2ZCEO?;IfGF=($bV%%;m0-#I4M%2wvN)C6Ke^2DUU`@OAddO4lnHi-rG zX^6Kx+Ki2w)b$io_UQR@+u;cIaYY+F_j$K8NWDOw?dzd4+B1O)hMYnRGujsAS!RK?{ssUE%Pu|BEkpk#R{S99*OfXBmPNihdx)XStKA*{2 zy?-%GQ4(hJ*qentCLWkxs~a!1g2(-d?ABBuPEn+>pGxyvuhJ$*j3QNBm9XC%j>HZ`8bYl%J_Gj0>5!-ts4h#^I zP#%1~@AXBgw^-`Km$Synsm*pv)4S;@61ZttrmgnE$Ot^N_CIfPl6Np~R^UZ8P4#~X z)$e}8T84KK8GU;wbT^g-{UzQ4yjJf?CFjbx*D>e%+bo_I?=o!z>MQg>aV4^%pCk!b zJ;v78EWFZ^O=_=NH&83KtAG);t$#W=5AxUc{3Eux3Be_q5LjQ5g7T{i<{J4_ce#gq z!d&_k%9_3+Sjdk5y~ZDpaYiUf26EsFpWg8^tbd3cuC41Mu4xWFMk$e1qZ`lAH|A?nSH589kWe|xySh4l*| zlNv%T<+xG8e=gVx?!B}d>sF?4S(+pi>2RXDEo?(SS6|RxzhjI7mo3CpY@BOQ|U?EeT)e@3M$(5`6|(OB&t%Vi7C14V8V7-_l>rV>oZns}vD4+UR6E~npArG)0U*Q8*i@-b6Q6J_YD3!X6 z5%o5pbt+0re3NUpPWI1MI<|js9^k7+c}Z6_1ZW_Vud>Vjl-{=)fm+)S4~4?o=RKnw zC*JZtuyr8(6Sg-O|J9cc{c-(h|iFdw(qWG_* z!oT}zQ$H)LQ6UN{61d>gpQE7Dxb)`XDwbxrb}wC{E2 zXgUuaa5J2ve8Vuh#1)rX;7RuY&=%G|8y)BBcg$oFWrbfyC;%6oIMI6F%L$Fz8%sMA z>e4_Q-vaKixQjkokDdtc=&zi6(ZMd9dU;xY;{U>dlfm;td)Z-ijwHFZuGezDfWt4{*fX4LD<5AE z7(Q5?+hda!L^vN{A?!eD7(Dp1zf8PH;ex<8piftGQ>+OI8PrJ|n!%JHx~Gv)rj&#v`c`rktNu)ucKO?s+L zi2!k;%orWd*>kiTOdXic+WB5FKmSX%>wzzjQ;WtC}p^qo413%p~)By9R_i=Pha_6s?Zj#f%bf|L1Y%XK( z?8?{Q1o<2l#FgwMyP-I3vcT-dE;N~bL3Q;+#C6_VHrZ0|XRz{lKL#Dvf=7c_n=J^4wF2Jcl+j0iSpJ&gv;MQs!WaZQ z6m$J4qBh^mK1cLgZuLY$EE9c+gIeaRBEvb94Ph3P>T=38N>`x|Ti!hqL5OP4195YW zAGtLJ^mOHkJTSW=`AIFk9YMUF7q{Y>wRUVsG(9DCfl<0{(Ahtw*wr8koZA@K-j@%> zS7MYGwr`Q;_ucd__-`3JRo#g#lK;(j99wE{MNCH8;r3BC>NJ0bYjt)$Pdw|viX z|Dtk$y)oJUJWjzgzdRu$WG2Fb?{YIrLD@$d^W!*{-&6S4z@-EJTrvI-taZQuIZiPx5B~d2A)d# zmrwXHUWQN3Va2Dk6y)tJqIs+0{4mJfE{$@0U1>*MnWS8fHfj5l!C z?GP5WXd8jAKtD!|5h>{3k(4<@Qj(vP#)}hNP*hi39&WL%5O1Fa>};1zzS~;1#lq~Q z3?~&DT(ab6_BWp+N4inL9Bl1yX?MPJYE(bhq3L*$NDW)}v-iP6%J=JLzPZk92t$YT zjs)*%a_3_^u52`xruVGHd6)1%*2OEDtJT%Sk7Zq*zpMta;8%Y+#15HtJY0Z9T7P5V zvt?zehGM%e9*Rd1bsid}ucrIB`n31hE5)i3Zt$5??aL9)nscH1?NJ~c?sksiRK;cw zsP$UMtc$u-5$gYoJ9>RZHB^OrjeEky^twRIMt*uCBp=ncf3%A2F+q#Aoc#o*@O8B( z6t!f2{I!c14%)C|an%>ayewxgHqkDBj#il2f70+&Q75Oes>ArBlx4^y<03sUy1Hd| zz?!s9FQ~iqbe(nLmE6O#r3w}~>NU6hgad|UwICl+o*!W~C$s)#%_$fy%A7yZ84~6r zL&n-!1%7{DC7^~uIG+bMYJK@1pQ3-VFVyl?h7*S(vAH{LTSB6K<7HT?>!{Bi_4=ip zMdZq<7{2+_o8YvK@}=EYD?wU1L8{QkG7Z_yDS5%2GyC5iz}8+{G@)Xl*5d$?NMBb_ zwG;!-t!-H(FO>Dxe{volI*B6DcdreuE-j=qU;IjyqdR?vB*tr6+>STw>p_Lu^$!{1 z3p+6&{JQzInjELjQOSVGwiLOV7g(;@D{(0zwQ7BRJ>yJ9W#;!w{g<|J;>kutuWi#{ zVP%viTIf3^_S_GW6n1?0nUqp`Qm%#m<9e}y0@t-v>S3PLPA5E8`_=d0wwpHl8@#e* zr}_Y%(%Bz^M1Wq$EaqF;C%C0B2_S5?6h_nkwXvu1dnD0)`Dy?&MGXIC-1OEjjoUPkcuyn314>m=4gXOCZ!eYPbcIb~%TO$az z%c`E{@I%~H!dBMW`EmEm2l$o19~D`Rg{;7C-uoASx7*!Y6EyA@#+=tJn(xd!wTMph z=g|EU<1=x7Z6*x-if83dT;1#_Nf=me-e>(JZboL(xO5RUE7H}WL@xRb4s|_`soCMxqyZ{2wLj^?q6H9fk&vX`EN zSJqG6jXkrqo_Vx#?r><}qd#}qRG*g|10wy+==@Z^atB64NKWHN(N1~hxDDP8vgJa) zn{zna-(Nm*AmaP&0Pi-PmZqiF)3RL>iwt?+KiQyCyHX2~d9ip2T=7FvMDvD~b2^Sf z5Tg&x?g7zZl%0DHGPk423zrQR_wd$NWW>q*FsnjmFFJ5IjQse$IqmTYfrj%y6A3&i z7iKs8z*|T&M8gZ%Ay1yIhYYZry^sDwGd-b;iy}Zih>Z3^4-oY|C;7e7tLo?aAzauk zd3EqzT7^{OlQahj+20?qz2%S^0BMY8+m=*eu;y)p2yox^^qmzocHvweR>XTY=VY zni&kde2AENvXcU zkKCZxGo6Y00;3Iv(4Q9uTV%dI5kBuC8{q^@N$P0&^2e!YpA z^Zq66VO-JlWwye{xFY{?;5orG6L!RJg(@7(p)$1$)})ABJ&E$|wQ;Hpm%QKxUf)l` z2*7aE9|6SbjO$g~SWlDW7!<3I^!Dxed`RDj5zTs-uu)G#KjP_fMpLeS6w^brRBM5@ zhGIw02rMnC7pViT$vpWFV#>OSf16x_SkFPMCn&k*=5CyA3@}KLSDI&`1*!^7LqZP- z!55M%DpH|wUyf3L)X}v%KL~Xb%`^4s>*y&$nN0|LTuQ*TVI%1H^GoLDiCrh92{My+5H7Lmo9#i%lc@yR) z%HQbR3G_a;cw}?o1fGK6#F(7jISSl!=HDQL&}Z6W#v;qFA!rCa=9-q;csrmZXYP;A ze+6{at#?w*d4ps&4VZO80fzTb{r88w>69)1*Bik99(Y1IP;2PdJQ0|jNoSum$1C(7 zdk-w7T8vr8QdC1^qgO8Z@n?VXz-M%%6yNId6S3S&fVA)pBqQG{E~Q7(f{hTznDtq* zy2}XTXfr%)^_G-MdS#x&2SA79^a4~=G!c5wL-maUY!+9Um`yMEI}$_ZZwVOZ2OhQ{pN zdDaSw3}te!LQLN|r#7c{^KSL|j!p>)I8%^yJ}Hq||fy53890R-0GYH$??*`FsRxIhuoZ&cz7TTZBqY(Ip4E0nm zAXlC7m?AdVYzVtEL3ir#>0t9MiThZAT4U)RdE6*5b1_W!7E1o zH{oBOd}M4E3!r3PE35yA)WtPsgN&M2)Ig(^E3#I`Q7hd$k1-vowoufkz&B)Ktzb*z z$^p~>^oqG*0=_nKnKy^{cBn`x?o48%xlHfsJ0=2-OOW7-*?qvZ`gf}f%L4}v)IzPj#9otsl_Kc=;BEvMDD1Lq#U{QuGTZ`oI~G_&TDLdqW&RMJDgzE@z2 zap?x73YI8vs|sN^Jl7w`{-0=tOQ1YT!tn=>XH;&;ZYx&p+>6sl^*!BhcLP5WSektt z8Seu+EQXTt2adjfL^8vvc96iicd^>{Kxv<-s%mod=SM#aja}@J8eI442e9sUjdp+kRd!aG=)QC= zeko24Ja85%ZW}1uCranUprYE00UBs*Zt3|ZE|y{SjS9**)4(+RW0d-~F0gqhqmRn# zz0JFc6V5D0kiMSyRz-|3U68wQQYT@a71jVp@(_z;MibT0$fp>KQ`e&YwEKhm4zJh} znJTaY|9iw;^W+APZXT;oF+~KvM0PcB6pSQD)9q?>Cef3NU4OiZGTz$@#4D4r0z9`l zsjG8W)UtdeTBKE1V)nlUP2PN8-rf)%fq6!|40s|N-WrXr_XWR+ zp^sfGjOPgM{Ze?~pq}|wmQokc=-~XELnQiXX~A!|Pez+H0SC7fz5cZFcWgRP2Ay;P zAB?XDDr>`DF}S+ydfn&|-&Yr1MhhS+llSy=#O)ry&*0QPsm~bgEMX`H60dfuNQvJ( zg)4O=V#aVUzu4catkdj5LFlK|qbAot-q#doHGjvu4aayXlaU=(`E18~Lrb?RTU@ft zGSe;Gslk6sB|syb00@;FmbFkhYzxiOQyqv`MntlWt$#zT5H>8fFnpy5Mc!}u8&sG^ z5dPel4D^ApMNm?2;_~cj57rfg>yTU<5!ihiQwpIPYen(kHQ8S45^BjI-jL`5mF-=P zk}}b~b4dT=wI;=AOUDZ)f12?c6IqcX+v?- z=tbwd6&g9CHsa3!!cm1I#GfM6@E+Hl4?ATmc1%Z(+l&Dzh|0m4`w&H|8fdyI0sfaf zP}%qTsL%c71r-08_#j@4i)~?O$SqrnlDwN!%;-3L;qQ^uk8iUS7u1v&5_6msb-!+? zU0r?p=brsgko_1a01l>3-r^dc#0;;h{@Ar-^+%@!+!5bUyeH zi2Zlc4nJ&gl@E*t{&--u$|!~s@h1R)$heY4BQ$Z|H{T|5GJOloWw->}?k4wJ!b3lJ zy1Pre&QqsrMJ)e8cdg8-U8Hu4v2v3bsb3*j(^vRv@YHSP-5VUPy@h@hT?qE%{l7qB zk*!ZXjN7wv{R@=&rqv9VC3v+WRziMyJWVCt z0U!LAeyasT4sa2IX$EfJCkdj6*S`}l+j76^}lJQa~uFO9J z|1FILD8z!X{6(b+!6rodsm^WT(-r0dy-2z@k4=osZe({fh_$?tRm78cTr56LvwRs7 zEm?a){tqAM-+-)$3|IfEaOmNB3C$QXZ%s8&;KF-tU-VmMHdp~9YBWU#K1&W^22#X^ zCsyel*z=Ze?di9XjP81b!H>mW&&9&d%$um{MAsc~0|kEGby2J7QzNy@oD+g zqy@6qRr^heDt0G(ji0}l=O}MIjYapDr!ysSLfrRl&i0G6f@EVK7bIIsO=8k- zud2{h{Bk-s63R1wq*Q%UY#X~TugH`De3k8%ozoiQiU2UDQPn^}&r_HSIbiqnRYY9D zm5Bs-98JQHkeO(Y_z4=J$17UNuhctTK&QUcx`#=TN&eJbk*Z-jw=m*TZz_WaG>&vw%7qs*4mS3WQxMk zeTBSgY<=Wm!lOEDQq8t19ITn^*_h-Gxx{AlUJt>VaUXwqZN*00Tcz3l<47^v)+BNb zB|#R3`dd)mLqRAcuDQL#E-XGR6PjPKZoD`y&XT9b_t>jBgd%8-msy&+&P% zI{!$ynIA_LPH#pX|2A#EkibILwv0QqBll^^MQ@lUzq{nff4S9{ztPb?EIHDHfl+^p zyq&>PhQKjSIV%T!SW6a3e>Yf@yqKvOd+x=lc@Hs1Ti>cIO_=Ll6So`m6stv@q|4U&J@XS15M&zKVlw*MC=5pCey8b(- zqdQu@TuII$(;H=ukNiIJT|hfeUl=u0U$XP`EC!<|k2DaOvaST7Q!Fu^ zLlHln&-(icC6VXW5+98pdJ~Cc?tzbf0G01_X%vnnWDsrK&n#`O?-f{RE4=nq1oe60 z>&{x0Yi#su&%1sYQ2zT?v?jmywJTH?ptj^>!M1mZG|cX|Z-_KxVB04|8aemd=h)9_ z#hP|oL!9rv2k;#Sx3*qrV#%Q$YP0m=atU?%Dw1$gxD$l~NVi34{mZM@ydSQN-bV<$ zBDMMe$gQPWdSiE=@r=}ba@Qsbm{IS%JcJIJeQXy(KWtq|#6O@t|3zW4eV=W$>Wrs_ zklqZRLAm~!NH|#)(&5Xyk+8=nHK%7yX@!Ak{%~eazpdMnxCKlU6ZVM0%f>&P%S9=k zV0%GGP4|Y?ZpYGdim0AcI*z0IClhANMO`MEGMqM-{2?^Q5A{KxW)n7Ix zu=y?s8sF84ew=|8OEWeuz2X3_IF0Y`K3OpKSTI%B-ET<;uHjdL7$|?xoH>U_DVm4@ z{V!%*M$2C7e3FkGQ?m2LKHB~xF2jE#PxRn|Yz8q2`K(_nB&xydA+Duwy|WF+mEwY{ z0tFUpmDz^TA2yO}s!p;#4_}Q1yHMq1-wl1WQxf8eGifn$n^~|8Mi<19gyB|Rdare$ za${~0hMYgVR%VEe0;cfh%4w#cj?nw0C!r&!u8$p#5gK}r3;LxU>6uRCk zJlChGlViznJEGa%ho+KKd&5Z*@YWxRe8ZO1UWa9uej2`|i+Q941{xP_+%Nus7Gh>X zJ-=0K>vyPr6Km`(sMx?^Cg5qRW_93>?pF1mSp5JO#JXcJ4a?h1yrMTd-^@A#&3jwy z{IGjkylFMXPBWLH?x+gZ7fvH)g>@Xyy$ot%Uht+4G?kL3d&XDd?=y=GwiSzZS25VxFlOdz6u9eqHgr^?AE`Pl= zdpiX1n-G6u{64WW`<(OMfYUR>9=eTEGR=;T6gJ(3Ri7-<$I5x@s{4Q9yo_}GmBNrK zSReZGo%LY_PQOKj5=WtQz&oswSifhlL;3T9tNpZ|&Vy2QUhLu{>|ARpdj4b+#?NSe zRE20{g$rc!Yy9NPpG%pA@D|bAerC_3590BxO)Xa7qY+yP3(4tQr1}fpGz^l>NM#q9 zVx#|^t1T?}BZYZa?m=r&Q&Bn%!~s zH~@f1A*ihTy=EmE_gGoP&`A9y1*s72eLSWsE1Tz2o& zQ6HaeLkwIg){Da-&;FT>-tR}pJAQ2p8HWm7;G|AS;H71OE8BYZwQX_P&rk-_q`k_Y zh7kSLzZdI?Q}ijWJCmj%A20>Y`H-??K9dlx(QX1T+q`b7G5ef8*Su|oS&#Z0 zfvC=Za?a*IPooa0ZWYJZvpY}!Tchok`NackO>L3QJER8ksr-`ucn|lj`{#kXK~5}W zfAH>~7RlS%XIvxAP5#sH?U0W4sU~qZ;Mqp411)G$pxeQV-d4ik0&4j$s52k|h9x}N z?p*}*tY_bK%GtRGIE9`{u7+%I<~{|2s~B$i9NX$CmYEUFp>4|ITP4^carmbzA|3qG zELn?CuyFh{yK^jvYGPU$riKUqMR>a<=T%7Df9%G?eRZ2jW+={h-Dv zlt}$v?`((p%f07AeL*F+1NQ^&+MyC|ZnVT+D}=yUgOKMlwk64#(RhQkwe$e0q%X5T z8eRv=DUuNGd4c=NBvSU&J2s&k@FyeO_?er*jZN2 zTYkIe>aHRQ4=tmKs4FV=Yg-adS@7LQ?q^6lE3eoShkm8&~V)38O#E`{eAi3oN+ z14l^}i}ox&5nqBIailsSSiJ^+3$<{b(>lQoHSP#Kx^s(-hq~1XWBqgQZ%^=kTr+yq z#68B52i__Ui`%*mhl=Cv5N5@HGqiSJjYy!!rV&f` zBN3cH|3VE~wdX~_z1p+_l#V#_kDL`=45iWn0mk|w@JncZ3IB_5<;hfRZDj(ca0+07Gx7RyWo8q-U2>PE0&p_L&^u1sV*$`JlHQ#$drh8Jh=_yYFCf zoX!)4$(;TX@)rTW-er=B{3{SW(frWE$N0G$G?z0+&ksJ4Ny%_pVokO?@oVRK%y+50 zTR|+tw%J5}5-z?^vEw0cL2R!ls_1X0hXi89w6p#i2?PX~IyI7>p@ymIhp)f=28oM# zj49;YeXR;;lw3I34bA?!<|?lWS0fg;OSYS}@y`oE@O)Ux%={U%%PW~OBHW#si%W6= z2RFYwR{Kziw_V}5#z(kV=i0M|66gWcHlF(uyhSW_9u>7S=&-Gvs5c|mcHP!sAG2& z@30eiTOCFBP><34z8+#801BrOi!}U!mouHc{Y!vmHIYi|navaHGs-$Vvf_l5#QLH4 zm4VR@jAj{vj}D7fK{9mnl2k(RsdcrQZ8HUK6hu=SyAB~uON6-~Gmm3jDu8eZLa{5i1 zg|%&%(?o%%SSc||9K&$Gpx-~2Ofg`+RPP4=(2VWIV=APv%Wz~R-5KXa475D>=kJZC z;hfukax*tY3U!BHCie0{O<`yMOgaVKOs?nC!;{Mru<)Gm%1i}T57MWa+_n6R&{N|@ zj~!29X1&(e4rr@>ke_4{*1c>R^XLxFAl#_-T+2-WX4PNrCcpGBF!*!7<-&cY(&!hs zvaD+ro%IFjC*#ku_$qtescI(37-10<+GzK`))lb%NFOiVVjqdEn_VhW( z+XdZZXGUqP#&G0%PCc+k4>?Cr!bdgoelC1i%dXJ!6WOcF6#O(6^Axz*l1rD+(8Y>* zAYiuC>RJC%wv|KDnGcvq)(CIsZ;%-4u-{J92Q@wB>+Av{2Jqu$bQw21WzRJ0CUNTg z5?*d{X>q)j909tjb9;Q46KFVw%#R2s*zKV`hte4c@U9pw zSg@pNrFbHL?W4Ie%jxr*m6fAV@Imju+GY8-IZ;`VHBG_s_q?=^pNO zx}&=`!*myD%`pGR{L7V$I0j{h2{z)>zO?%0ErFpj#!I#+YOTiJ;8QHw5?#L*p8-fF zL*$)9Gq^J3?(j)gB4Hi2ayRAcvbL;!7_$Pj4stSx-o?lL-?*1F`&1*ty;7JR*et!4 zOo#?n2k5N3fbu3fos-gMtCgcP_mlpgG3?{L%1$-N%hyZ5TMnXG9w^3q`B5LSH_+`; zNYuRbWYJ*^U2irx_@(i$4Cu`+VZfA;L(xIc5DQWZL&9;?P+*eSNjrVVU~uwRgSex-J)(td&dTb!H(|DtDWr7~L|=8&as=^CPy#hg+5Dyg0Vv`xp<}&YRc5IY@F?Z?5DkRy6e{v@=mlT_~H}eL@Mdwer zClu?2)aW}>mw871bny0048VKa)^+21gnk1I$^aUgaz*5OfV+DP$OjEKN#X<7Y4N6L z<-hkUN~^fV)G)gW&H$F*XbKdsWs+dqQ#g|_tsd4gB{q2RE_OPJ1GXOQUbh1+BP5H<^W11nCTv%vPhW5(+{FkTb#)d`ODCW-UW<4i*#1MQupPpmQBFFgx&hoZx)X8MFO zw~)9~#c8=Tt%<410`w3Zar!&%e}S;7GaxlA^nOJZs1ZG92&oSe zI7>XN5^kjljP=dgca8ZZAP zcy?HTQfmz*@#|BV4X*FX4tz`?_6jLWK@QU8bORb2bG6FreV8(oi}F6aV?@zM!J%jW zysM~lI~-@x?|=-I8G8MDyY0kZwY*F~Ij;E1!p)>>j$n3~5ndjQu8s?XJW^5_wWn*y zV5iO+`qQHcu2#bKybVvEDpVX)N(nm{jx0ky+40u|2?t_2RXLzpMU%rkO#cZBbE=p> zuOApE`v{GpjleTcI7Z)2S0}iDM(9S)_NFF=%?xV$@Qu*{)~V;-P`60XueGMgd5ygK)X5IY zJ}N4^f**Bwjw$(^$95OGUy3)zOPqrsa*IV(A|$=x3wzq9?Wr25Q(HVhPwI<^|EKkn zg&}0QPI-)rJQx?YXL=5WqUTjMyhgvz)T<{fcV50JPX<32nJ)n6KGExtn49E)S@H*- z697gKck|5y@sxwK2;zSXS@JKNdoc2wv)3ST7Cnc?@L#@P%dZx~UmbC=aW3TeojIm=#Q%Rn!JX9Xgc?%LNbl5nc}wyq0H1w3(%CK#yn>;_!Am z=NamaH~zX{)rwUMOJ7X)61^%;t{u@jBqWmlI~inMsU99UC9A1E`8 z={u)3;k#0U5MX>$7OaEVGiSk|5RS{+_;-@ha=Pq#c_m4>^IpQ7k9{uw|G*P3xDmnJ z7$h%^`J0-sP5C756pQTV;X#R^)W-TlNteC(i~A%i`JiE_k%K&MT*6a@NyT-(UH-a3 zfeu~RE7;x-%1Wvbnu>CURMzl2S2DVjtvLE;yOWq9 zYRVItCFoao>0n{w#{4?(m#Aqe-OU{2pk}e zO#{0Um4s;9es6=TW3rmM`Ap*8U4b91pC|0fy|)^4V59$4{IK==e2A?D)P-CoT0fV= z6IHkb&+MLQMD&0b5a0?{q{)}f0`sieK8QK4%HKI{W9XZl;-$0%d95p-uz?TfWq#3% zG#lR*XS+R|EVXT^tEl;CN&nOwC;bIVv(_-jnxft>tl-**G?%tmMF?ZMzU*dVDkAYH z;-6%fhWPGGRjqtUTKkrQm%DHuJ^Z8c1*72qu;zcHQ+&bg^(-9>huE#dJK|kd6Raqc z^uqvoo^p7nCxXWWn&}nu_cOF_F6a%$iwdp~?B;G+fO5-LXTQ@zRr+Whr?=WX=IEx= z=K07tv;qn2mTEfKEnEX*b_@ro3>zQJ%s7{AyeK6Zk z)d8I}dJ&t8r&fq4nRrh1*Y~U#O2-C0ajdf>u49Hf;`l!MTnj}p#-A%|cLb4K)vIBQ z>7d9E0Ni0LgExho|Dxuw103YlD?BlDu=#t?{sjJE4jo^i%A zP#JLPz^nN?tbPJ2us=aWmd`f#Y2g1V&gaA5Bz&n!cL5HS)6hdim8T|;OOwrJq9%yV z(=20rDe~borcCycvLw&*Wqae94IfDA)4B9~i4hIg_bnz83a9cfaDZ=}k<3GbGWpv| z`z#@w?03TE94!wW401CvV{&1&z|ouh`kOP z{fQmN`C!sXQ?KhO5}#-KOGSa^Y?Z$3MavfP9xBO}-7~+s4&-F90({(BLp=7S#ohT} z9dEg%PE0;|XJ;bVPczofLV=CB&d!s9#+*ZL@VUL&$bo|yX&=aV0X9DM9c&Eu)X-pF zac_g!eLW2Dm)O8GhkIsq96Ah$ngPLYt~!4z>1ILzEij2FDn`u`14KNXFCyoY z^dMPl>DckQ)y*N`Ci8*ZJ&xGV|7yi;$+UcB1Y{;>D}M{@YR{T{?!NM2ULkBBa1j} zk~?Q+89jx!(U{p;^*ONWBvKlRs@wG#gEsPz?ugs2P zzkF{QkhM!@clmiQ!)aPil-#s_2iCv|t?Pec8$UKTV|%w-GPlE_!d)^!woHG#l$fDW znOJB&qLAgmt6BV%H9<%ltUHgAtJBiCWRsB^6VtU2Vesy^;dmIa3cA zsTufqAFF=Iham!yM@FoB7QitBhvG{lAe)zn;;gUmYiVYJUvA3n&`_;!PFOEBv2#G3 z8mWF??~(vvwMf{211*2zyZFv4N6C2&Qb`{p2P+oKyvWttAvc!pAW~oT7i%kF@0V23 zrX*N5p_G42cOoo2fm?A|?zD>)P-y&bGKOK^|t;a*LU0k`Uf_6S#2*1+kUA%4jvH=5(y z<=Bmdt8?D@0m#l7H3VJ^6THTPL6%q_VV>JU88Bd3=eJH*l?wR_Nv0zIHuKl-(SdIm z&@w;Acb6W&{eVpneJQjuDk~R+f;5>DQeYWseQuKVab7tIW4UBg-gT{(uhe7WY(|()*1Pt}XGD7>hP@L4h|F(~mVl z;fMVH&*g24ik!nZt`0JYevLF!{iRR3kD1D@lPNU0&L8n%yNVuf634QebY=ih6suJWL2!^T9yMLy0{ zD%13JqBr=PBtzDcq{;VvwaDeCPHFJ{^m1hQBqyVCOBLM!?$(Zzg6m$RiwPsYEw!%e zok9S*f?I$U{^42t9uV#^!MmlV_^D#~o3Uy5KZ?#Ws*Np*!nk{JiWMtPaVtRzg;Kn@ zySuvtic5k0B_!}WUZ`~%w*=yz4x5G_xG9^GiX|6-mF53^?aP* zi;tRe1~;_gJR5KwpW#NV!W z0yzoLl7K{`NEC`v+&mV*LhoCfaguVwWI}7}f0x>_B^4vNvv|DGB*a7hdI>^pGIKy@ zh5^adtRsKLQSS4GWoG{Xy{PEb_FTQ}A7GXB@#t0T-^qHD5I{{M2i_G6Ro$Y~g~`Z+ zZ))Abd1ytkiO*bo?4tr5I6Qc;TZ-vYac;ov3#&A1yR7Ehhn!?*E-m}kl0mQ9uU0f< zB^{$GU?;N-YTkqxVXY+5y)k;Ycy-L-gsuXk&Hs<}SpySAsd%J=9U!y}D@*c-d7pw> z0<;tb_;)>Evc<=vYjEFM1TI$*JNcJ%eOcKo(;r_I{GjKbZ- z2@Lh5zuHZXF%b0yLCR}9a+QQNMWlfpvQ$C@(pTmNV(3>V`qkb@U;O3!V06BS|Kii?j0i{T9XG6Z&GsRW*q;%{ zj0~mgLBiieGeb4uPZa@gya7o(Gm2~}qae4Y)CEPl1lKshDZ7G*t9Z>(ec96a?WI(3 z1FnAV*S*Yv0o%H1nP+(UJ%G2+MgO^O?YEs^Y>TPgl_ynHG?=7~nW?LXVs(fkYvwS! zBFY)*t^FiMf!7ssSIz^m-}!Odv8_Y1=_fdWa#x{21g$i=GyhPDWA;=1*!wGT6^){ zG%_S@ph{1-TF(}MvuA3ahF+%nux^-5?8QmV$|v#z;a% zd4`dheuBYnkJ4hhNUwD+8o!t3lKv~E%uJy@2!U6Ao$re-oU!pc>__tn`R?A~ZjP6_D+EZIIMCyL9Bpx96L# zfZ@BrOB&dCwA}gruyP{#SuLQ2inp=nRgY*3J*>I==2y`&36k8+OnzWRQLsG`xt+=- z$grI^TF5$p1e0JF0xiCXrSEx-BDZNKPRI}x=)cl*leVX}v?jCw;(d=+By>wP;TM%* zuI2-3Vr0G3nNfylHPDB{2ZSf@>qKg&Ie8hNTm%W-Y#y9#1f##zSg0CimN&!@K6Read<-S@D8Fla5yNpC@RRUfB5Ee zS=#{}yynR@&zm?-I;P+kntvLtn}NUrPS3I-=VL53&m*s=N(n3-xDRF z?l2b(=9jc7c?DfQSo3!RO$=8r>wzh|ySDL8A!7D405@`j8QI4|PjKB?z$T|}9#qdEBjoeV;7e<3X zyh6a`@=7C1hkWn?rm6J$bKCk7Pm>3KS_Xr>;?s-UE7>DAvA5vU4@l!C>I>g3;`nUm zJ1_-jf4nolkBOdZjOfJPLVvM*rbBoAn)!|0Z3XOG-I?+64P7a^7w#zwq+x13XvO&t zxa`4m<0v6xACs{8R0)W*jUwSxHZl-SzVuq;9BrGzAS`{IpnSWmjbn0DS(#_TwTH+bLUu2nYnXWQI#l(}(Bp(`p zf5B!?oMJP$V5vXYKgQPV0jVuzSL5>cf0+lP7nt&M{=x`6eGoqIB)KG?$b z0iXVOhxMB>AZm1x(@$cjO_#0DVs(0~sP3WXgP)tG+O%e8F0k4LqHtqCs&~Uw8U*({ zD4a_HvOf)TIfUZZy{1&}xMd6m`#^0>ak*moV_X1uwTJU&ARffw19nZZGtqTlrP3nQ z&IIBZ)aUoQS=2tpbi2OfJ;*sJl#7F7imqL*Ic@9%Ym9TcLAKv4msCTD-OKBYvid&; zEMGFn_^${|t^tDSj>Z_rUnc@z^(@aF>*+n=7BjUy@Gif?0Ik|UE}X!~_tHWrx=3eZ ztnz_%`1zaHI%K-W^`;)uOQ^^&*p~NB9?^yZ! z5QS$W5iN>TaZq{WHG_r$MXFKOn|q7^ehzr8M?zTLf!T*eB%ZLGTF#A}R9zj?Pko(V zzRqPPkqxrsQ8g~RZwpCGTY>-Pbp9(jZWKe79`dBe=ac?$wM>NNA$EJUP)LD&O zwffnDExj~-BPYHULx;z{Q_dh0UAYGos2kQ=04RdU-yeRR+jSg#RKrUP7%$?L#=?rfJCs4cfs=w*SGil1S1HbhL)=a4hi+0#7-cV$Lb zgRzo@=9hZ*@>vLKYSk2EnDs`QEI9X}n)7iHotTf{KIfq@jbzdR@znib5@c?hJtU$h zCugjz&zN(mGBCu1h~NVdvxRa6cU6S*xyh6rS@qs%&VY)1D@eoO0H16vd7&wdk|)2& z?Twbou&m2Y;9yjfdgF7@Qu?&9?(E1Qj>YJm`t01_U%^{l#F;&I7ZmL4n(mCW?qrXP zJ>z1n1lx+k3LWbH?>Z%(2u##ms@E@cKR1`IZD7vb*Ae)zusl8MU$o%8v_A#fNfhg> z!s#>JL%n{2isJ<=Cz(Y=rw7B~UVG(+hqYSbHU0j=&xn4h1)12>Is;s4y&vWYXd>^b z%$ZDS+X`sPp1<-~+6b?foA-(^uy(yq`zR(1#w;aCMquJGrmjI@r3+PCivR_7lUJBa z8BqXYu^JTHMJ{O+~>?+_y7E1 zpXu1jJ8A#|*wV?5TRpA7Bw81mc^i;(NuG? z{8gEI_G_Ksh;Md095+Tlw#{+u|?p`d9gLQp7@{VgkOZ`YSU&WJh@)!=?-!|=f&JvCyWB<+T|D_4)OQ2V(j{oR31T-r=Rcz2AQ_S%o> z00ROrUH!h@))S)&Q`Z$jIxQqdho4l_JV3N%VkADvlP%fHcCg#8385Be;^BJvBTdy0 zI|l?TO(4RNQDBqB2<-~9ImlwvQtUTx7YXhvgCe3Icd5oK3t||0D)#gM(gu&xl|4u9 zBQ}|T9Cbg#g~(T_!XBDot;$0U~BLGwXz6iID-aEvwAsXoft*>BG$ z<`9#o-QB6?5X#)b)TPCu5b83q!!uu9NiEs^l`LN6B@^)JEmW`4pnTroD3ac$u$sNN zlqy9JKW3J6ioAy|WBi;_zBIF$l78;-A{q@7(J)7_OuW6iBzeKkK1GI6fH3d6v9pOc zq?cVdiD5R*Z%+YuUxsONg&xyz@0^E)b#O-y)p+7M;j?nGa6?YXjQncf$i?!=caz?* z;}yH7=;Tx*mW>{3%ID&WHGDPgJYs#Kt`7?lxqcBW5>AEyho~=ytW9BDU?^OL28c(W z3$&AiJzzV%&a`?cd5T%gOd$x3*Z=NNc^GZ7KuRYPmg3D;8M>W4e7SgD=(>NfFaQgw8Uauw zS*J57?fb~;ToObvu*vgV#4jVSV=|wO*Oh5PGQ7{>b&4v6i%~Q1!TGg4~fsXueMykQC>b!m6W_1A= zu%hN1iMnJd)lE45=;tU;q*^b@%!~#nYD2$y&DHl##ybAA{?J)F8<1X%(qGaGfHSmKYoNe1JK}1pFLE3-ta49pS1zi#R zlG_leql+#Y%#7sthL!|Li?Av__UQN|HsiTaU%-k`yAaNMjsrp@ptEGqWl13I1T0qu zs&wTI&&sP%el{{+KYBKe_-#%Xt&iwoNS7Xk4CMIF%Idxk5gsQr@XKP}E?o^-r}!98<9rVpvjWRTwW){&f8Q0E~wJ#&3k~>=|0f;?l_jerJpe~-^ZFxI(FXL zBZ*VzN9hI|q8W!YP?myytg-^~DQz9=3q6VU!g+uuV?r2y%$xQNA@)gQh8~da=}z`w zWLzmTg5mr~DC(|6c4Xjfg-bbi+O*ZCJy9eyoI%antXA&J@i56ZUqntVO><-OR3GtX zHIvI_e=UV;wnDw@NY}>aHo3nRsF+R&B^mdYs&5yk?Hf_6?sB(suD)_GEs_0m|H+;A z`Am2z-ti*Abk3~CM>EigDuYSscDVGf;tsI0N@rp%$IlV%-E+(qrE71{-CVbCclc=o zVuD=KZX5x@@;MSQvi-$mLk@_TBG*@OOyT5OT!YcYOKW{c7M4i)`9k7{9=)lo`%wcL zs>F1%s|HuA8vY#;_-Vxd>sek=C5=MA08Nr1chYb5AX2S`16*O9~gH7CzwWwTTT>XFKnbF=#f8{881;Hy^$0i0N9j|{|Zen zMM!-`v``@+j|302Nw(pQob{V3EKOOKxt>XgPVEhY-w@LN<|Q*4wa%HA1}f^U)#d8X z=3J(Aw`>K}%T+$-skZ&8ecB(d56jY=Q;~hv-D~^bS-hrr<~_Ot6no5yS}^dfqBFpN z_gG6!t&)R+ODZft*sgsdp}NIIMI0IUSJv(4QdZ_*%%l%v*1rM<4Ru`*713Y*HKtr+ z*DODty2VY5+_)%^+k6*R8s%K__+7mBStwAIDk1f`mAz-ofxOQVhQ%yJmsNhp*y=EY z&Hj70=Q?kLzoFGJ$XgC}^^DmJ@)v5>h$P{2fAv#<2tb>(!p;gnMAOWw z`92|`V0;aK$t~t>N((z`-=B){nezh7X6at5#tQZ19|tgjlFK7=TXx4XzCpphSkdBd zgnHF?Ek?sRNe>?)(uqq_KMSMne=3huW&vVluBhA4l^-<#w8#@ujsPkuXaV1ME{J|d zNV@vSDw=AN`p?9-7N9EZyH<8jtZSvF{ob|3L|b-l%Xu)fzbub|?lD@45s_2Z?O#`K z)tgP(vw30P0#)`cH`W)SC^`)y6M$df_h817p0RuwB#U@TXTOlvVu@nQ zYCOZv5w_P69RC5pxhmK&qeo2@{|$8MjqwCFw>TV7zj1?TkAv0HF`(2gafUKYHuPn@ z*PuoK>MA5e|taXTJKtk+4bsoZ9cF(?$2Ow%v>J38s5$ z*UIA2EH7lSu~^>)7ZFDVU)_H(1&Gva+$(GZ?rppT7qMc)T!A9Q!o3ascQ%f5x|T+` z6E`c6VZ++Uexrx*K664<8wj}hYmN$2Ul;2?d7Bz*+jy0k0Z9ZBND2+nys83K3?Ikek!KBXYLb2C2&aw@w4{vvqL?NRE^_Z-1Onoqe&EV}$2Z77 z_a*?0jZ|v=k(R#Y-V9i~T?BY8^(dwRET3LGWW2;qh1qehcz{MJy&wP%qAENUMAH+H`@X9ya)pd~UO3MEz$H8IVyI zpIxbRL{hsVzr{@du^K7yW{$v#edcr?Z`I~o&=>Iu1K4J_LhX%4>HFVcZ(8%t+!;vn z^@ODZUSdl`pqS55c_E0drKh?Fa4-5TL~=&FFoO;-lul{RW&eL2LAhi$ks*)1n0%8@ zqt++Dv6V9$=exL?<{|j6chIOo;NPC#_*X|Em#o2I`?I9XG&x@OIY43n$xU%0b2um^ z0@iq25UfFNykT5)UP7GPx&MO z;DLBZpG(v`B)$!a6p483$)ipfL!d*~vrLBKf4bi;q$VeuOr!UVXHpAdr0}80cv+3G zGo*$=b}i-iLoQ=&(__4~HS;cxC6YbRU%c;Ckug?@J<0p^ok*ig*DIv`iH&ikaJ_3)QRtLxywKeXQq{&gkr zLlp+@ap7~^4Ru%L$ndP-_=aP-i!(VoOVg4JC3SQw4#06aNWK7-*V?#IfuEi$`3IiV zKQYUyu7A|CEW7dYHoqNaFm-B(d|S&k%>^HPZAlbLHU!}WE=H4&t!=Z=$TzTiHWN?t zQohw}PgbT7z$8O?Te3)1qJtDG8!a%ZNJ_dUxsR^j+_2=|?P7T60$U zQDNhAtHn7{M03YAKU=msBIf2|Gz@aNqtzzWo?X(83Dw)1%d-@=^X8D0ng@c)zCgZN zAKN#Fp=wB07Cvro2v^qW-KUu&rwaOI+7?L%2xW&}c|sGr&K(7_#mTF#c5y3mMMe|D z4z!?Raeh6=H!>%BS@muTFF5<7eCsm&!u|&(mpDN=9~Qn*{A}_+*e#@SbZ75&1lUlH z{s)e4%cBD0j406$%qCkJO3ek38wgsM$VKov?8$Wjp12tp8)cu< zFQ?b~)se@7S>U=Am{CVFzsG_C+Zy;gX(A9D3$q#D>dBy(qoRtXJuk6QX$p5+*9nmM zog@FC-r4Y(S;C!>(OICL6FYFXsd;%@vBRbwm%(C3v~a0%(-^Ux%|U7d2~+QfaK0Q48_#g5|I71gVc$=h!GWJ&%@J!?)t z)dtIl${_T4>i4^A#d{@1Q~tk(Zkd)1?7N~6^uIP0IysVKyV)O`WqQMhdJW2NP?s_M zO=u?*PIa0rYC78FI=n8Bd(XKeI}}1aEc32x-oUP$2)wtuvcU(qKmf;qHGy4f#APgg zNWG4)=~%5i9G@%sM)i{s=bvy|*Q~@2URSf&Uv0d>hwXC)uom_mk>*u`>ZfA^sMx1K zJQ&2VZJv1pLx*s~%5Zj`_%iR;t||ZmA4f%i<{k~oB(;(%y) z+DLMe#x(M&#^PgX9VfcE((6BMF9`ai_%fF!!@qH~_DPt?!42j*c+2$$_YsE2=W)^+>P43<`*Vd zx3d0D;0rTMR0A+b%ImPco0Wi;Vj#V)Oi@%B3;lNI0LuE@uHJuYMfOZQb6E}n-g3#& z2VLQcuo*aNI&x2D{TbBGI542yVQV)Y#LFZ4?dovuu7;b{u&Idt(Qh?6M6G*vf)dG~ z-de0Oz3cM#rW@+NUJsyo5nHJz+;@~|J>W>%s1EKBT+Qp5cSmG;BC z!3OS`SC`?|W{N@N;lru;dOXUpr*&uF3zZ%!}HZvq3; z8&+806d@hH{#b^$RwY-P25m-JOMYhJ_Hav~Q)54$8MqxBRTR(<(bKy%wg z#%TRbIz-!1^%@{dYu{p8JzNe&fc5oPW4=|!*Fci`!?Wo&O za1k3BnwYwk!@z+EiBg zO$2{c-4cY4e*_yl%U=l43ea2vpoe1V?Z@S9sQf!x-H{fp5erh{o@X=r)N$pvJGv7XQdv8Mlc^E$U z7tWrPq9UD}VpA|WQ@KmeD{Rh(_XhkM!-xR<+Ok$LoPGHv20~fbanb*CaYX&IdBD%W zZT=9`>p>Q0h6%Fgw*GeC+xwO^lktYxLX`X`4;9sL zL)W%MWeh>TG1Qx*G!&A_#1EO50pNG%r|pnGkJFdTwafu*`RZvTWA?1l3ALvM%2$Dwf&QIbq~2j zkb#!EQk_8pwYO@fVuHtubE8E*r;llljU_I5D`%Z4e-Klwe&g)d_u}b`KFIsp+^;s1 z2R1v}DPxKSpY(z!TC0HIVPiNJ4k}c&VYO_&zW~c~w*PyM3!m3il{|KSko-fAYiD$z zeV4)Bi=U|wQ~OfYefSAV_N!|39;kv7uFrsEn<6gzfW1gH|DD(a@4J!5-;IS)WJoF= zStFl9Ku8atO1t}CzpmD{j-`4O+>BH1{;AdKDv?RpKHRm za^#5N1JF|FuuUX7{~A8z1jl zxwskR;*-{~_Lm^f#Kz@Z1ewL=!TEMJ<9A3w(k2*YhAqOi;3jA_rmeN%z47{H;rrJs z@;MPL5=h-K7XcdVYC7Zsk33!Jh+`GofUvmFgT*wK`y=;~>)oSgytjcp+g+&LiVeut zQ~WA_y5z^{n_lgvLny(Udofb3Ws$|2BffTvQ6f1sJc-t$k zVc4`p!9UKW?Otr8hJyln4XTN1-yc**Rd<3?b86Ys>%F-<$zG957Nris%?Qu_T7MQ4 zqeaD*-NpOn{AFYNJf&tcrYD8-?#7t)n>ZnT6~E9s6tS|`1(YRxq2Zmt+sK#!7E%Nh z+rR~$@xvnXWtP@IaaY4Ekofw$i8b;@mlXsk&_5|S*s^KCmRQa}jdk?f$1*;4-Di@bt^q4;U(3pes_s2XGr93+3;@37k8CG?;Sd7svlrCl$Nnp?c_HHT@S zsLPEZMfE`-G~1i&MAgtF|DwT3(IIN!=uq9``Y^ty>j$67lokiI`?c4lEI@fD>EQa1 zck-vu2CV_ne_Xe#ZegwbfiC6;N(x20(L};(?DU;!GSqdkwVa`PHBKa8=+{~sCRb+L6zgC4KSf>vox7?@wF#BH z9Hs?`eqOc91OP5+lHq*n?Y7RPn#+p0<;or5#C&-ukg{|o75|!4vcWzO{{ryQohSI# z*-uqwXR634;F3kHpN$wsH{!CXuTV6z*$l>0hr_2X_t0cq}e^lN}YM6KoLTNQ3JA8(}gvb zVo{W?RZ?Dt!+22sZ--VR0Xnc2q3;X+18@}A2(VOKn!RYzLSSrL5MX;Z>ie-?97AX~ zZ8__vF=~#}ySQ%opdxd?9@>tgvIX-Apc7Q7voT3XNM`~bxLU2|*GghL!<=$W6O>B; z1xYVg1Y^nZW0#TD`czL{mR_tjl1WCHOpEK5TIkGvkj#S^pltXOyyY9h z)Ie}M=x)q&4e3qQc9G_~0>cDJVQhWjI_LY=xIv%@C^PS_pO7qHa?#rSJneoScO@Bk zPBO@e%`)4yRTNp3aZj5O3g5|5eT_=(u8fBPB&J&oabfQUiaBdKDh%_Z7{0B5xw|eW z5W%B#Y}ROD;nq1|7|e3H;ey(b_eS!~dOm(TFYD_SR{&FW{#CO=SA23!Wqy*NV+=@O$2Oas zYQ(SZ#mIMxXY=bka0fLGH`x@XRhHXn2s>^(x!@-nXLx(t*bw~&5PwI=h0f3B<}-}v zlIO!JRXt0Yane@km_Pwk^`zg_*<+-VE9CAL-<}k)5 zS~{OF`Z&jibDfM~iylxNK^K*>7N;MNfFOsO^i(* zwb2G*X#U0PTm_oh^YavN|J&0VbS3I# zsE&gwVS01jad;G#Z%T#Cmbx=eR2iMU#HI`{p{lLf9uj&#MBrwyW9ul@qKv zvAEZ!UDw98oriJhj6M*O+-(GG!U9zLtvKxj`7ZcF`T`3zMT1zrr(iwgtmf{T7tixD z{I4}qu`=JGM!v`(J`vLND>n1f+70B87;}zET5loJ9s}Ce)X4!<($Nn27`MAZ4p(?* zg&m++VLIZJ`{29Drz_-hG5B*H+z^^Znw4lC!rFF7YePZFn*@`2WfWKA~ z5=g~gB)6rS%-OUII2qb?gT2KFmvAHDyL(a~ddfSFf4oVH5Mx>#^;NhlfcghD86 z4(LW$Tg-;uyOOui$ujJlbw!c`4b%ZMC${oF4DL?nzZiJp6=nWNeo@Is4cgk+Kp03RlLLhvYCIPEbt> zb~TCiylL?3sNyA;JdS#~-Amm`$4{TqPX!veX&~ja6Nn<)T7BhFC8M^!I_v#)KgSS= zdE<0{aUaoTrk($tK-QpWMPv4CM2}`xlatdfRN%ue4XCqP z(re3GA^rAmb{~jdFz4H9z2`=qO@c_5!yx4)7R3Uk`+r zC=TwyRRyt03upJKRR!LFDkiQfqq3@8#Olbn>!39aTsP%T=ceD5=w72mM-%hZDpZ3} ze|R)Ht*(Hq@5vmv>POPh&(u`j%N4zqV+cCW4+))OKa*^WyN7-fG-uWZPqAO>FPVSn z4#4M(YHfU^Wpx*~+&$VQ$@(p{I6;Z`>}QYna>~C=NgCS~vPk&2coKe?i45ubwKSa_ z5_-=1qKz?9ILF27QD4D4V>v&CU#QvAo3RZHLD>7yDaN*iew=>{4Zt-6Xrb$P+ zUzYN)(C{l|YbQot*|d;ct@&5#ko4p#W}3aI$RdyEHVe%LQ=fd&t4OS}>HzbI*xF6+ zuBQbR>kCDmL7xJr=%#N zr0--RAg*&8uh`xBAQN;yz_(H_&ZqZrG{X`i+zP`RA02s(5sK3Y4A)<1;Og1tUej-c@i5ny`shQ>hr-@B4l2>{gz_WtO|FEX%aM_NV2 z_`8kD3+V3y$H4IQX=>wbqrEoJQh!>F@y7IX(fSA3JzySKmt?BAGb*Qaz~Kln{asbZ zV7B4*OTRV4r~K6Iu-Hm0?2qzq&Jnlll6Z4rX{acO76v?Ph+)p-Gnu3AncG>0>F({h z(`g_j(Kz|PECg!FEe2}XGCeoV;Vh6R)AWzk+%*PUst{TFXeA3VY4xc*F@HqLpk!a5 z?`1ymN!I1_j8hJBA^hiKDx2qxB0s$7iaSxq`TBSXL(i3!&rI{UY2X=0~mET>YSR9J|%eQZ>P_ zcfS=WAO3hcsf*m{Mb32}^v{?Grwzl;dB4@ysH?Fwg!tevPeZ3$K_r!jR38@nE&g0u{ z!bi#)sCjvShra9E9!01Tl3cJZ!8geKxQS(@H#_%b2>!&jpPg;e@CtASS11xXw6cjr zg+U5rB%HFYQtcJZWH<(Z#?wmPEq<9A37sT?g}UxrEt6~n(aJ`kVw!yMQAedmN3cZ; zUt3uJYvURnwBot4k!X2Y|1A0lP}p+3G~LMDzB0x>j{cm|cEotK+I?8|0S=rFvU($9 zI_Fz)dHgTc(2-`uL4i-z-@nR}?Fc*Z9$1019-sL1Qnv%EV2meX-y`g$HD4D$Zo@eW zKjfyl6yCpURRXxj^>Z`N{vBm5z*;o41NcdBKQ#cK(Lc*NdMolf=tvsJaep7$>^+i~N2{k@YP{XLX6&tEu zPq(^G7STnIgdJw;0bsVLcd4cgXH^{wvVLg$tEXhos3d51lEz;t`7fOBbVZev`16)T8+U!T)=M~UyX>q&dF6%1mC7hQjvt0h*Op3K*m-EQb-u3VCIMQRL`tLlp1tMmxD2S+#l+xbe6|nRfp~AR|cu zN*dgZ>|oF3D?N=c3<9f^3>XB=k&MI5&AlJlvvFSQc8QJ9Qy61bCBrL!hlQ@+0iWDv zrBm={w1vU6!eWni68HVfbiS?6meK68pvTF zy77CyEzZZtY5cS;giTRxyUbNH2&cf;1G++A_rVOBen7EIWYjeqba_c~{JPx_GECG? zc6Cz?Pt3o!q;p>++!)hcivAq`{sN$xx?GHb9JIt^PG^@OCyTZx&>N*&9w?0I3Fr)+ zK3m!YMFT8ymigDyFP{% z)#e0$Zk-1$LhxSx|1O;4rKX%2lX(h4B!LfR3Brf*$JeL}8fW$}u(zD4u5!@&_^3RN z#6}`C&U-OmB$%W_U`H)LrgTylx|S4wf%2Mkf0l-yc$V*c{M)bPE zE9Jn-%|8L?!x|!rz}fmh`0%l0K~U+!jzT{;Rw!ALsVkw8;grH85JQ*}yxIVFkPZ z_Y2uaFiEb(l|3&3T&;lQ^)P(fxWM~wLFKeJHOH3fy36X%v_g3qGfvM->9_Snx>yW| zFP2?y7vD0!c8s===jW)ENs+vJ_aM~yN%}G&n$s)o#DOQ?G@Vx%qM-65gc)EOOE;xG zB}PW%D)5jajq+P|jy|~kUUoAcF}Wp#iqA7pW!#STJq^Z zlQ)~Z>{rJ{shc-p(_{=MV5qYmeuH|~-9tnOH%Y9 z2qXk(K{d{!NswM1@=P2*+Ea(vvDFLYrYe*{Dpgf%?SmLP317c{39l+U=EDAdO43Ug zdw5uuN03u-iN*2@`o~FEpmv(Y@8V5hC6lb)2ODy`M zX1?)Wel7turXA;odH#zp-AXOzA|dCn^x6S$DUea1s$ANCg=hkQqEC#$IXMtd;C45V(8+0mMmUv?Q{w&})MjtY;H2M4k2AD1fNV$#ciCk}3)FQ!+kWBhIcBe z+I(vL6(i5~I)mf_!XJyCj_wL&VfT}mfy}B1I($7+tC{>8bvWV9SqN39if8 z-a=UVor7OBsMs!6w-keaeHHxXi%;uBou=b377RlDPrtBaW8+@_Q*9kthRHqjYD8;& zp3*EXV02Zuyei-ael}r0h*Kbcj3oxkX*Qt@s|WuT);gg_WaL{_34MBOWWlPTczFQ* zh3I8$cG~gL=V(z}`5_vX3rPI-j%iouS7YFp zsuFzlu_u@Go`BSCq2{=9e+yTc4Tl|NW;IZ)ykAltin9j+*z&5pX3s##q!S{&@WB;`mSY zdtl1YH#GJRC)5>^*hKCRmiJIyr=jvpe)u85Ww2+-ZDvr!HB4L}?7V>LU zRKV(CUO(9%Mk4APOsh0)4^_X~tnd^loH&Othh_|!KPCt}+#S5qxVNK1xW23&?VSsY z1+Nd`db$nn?f>Nd2e@EjXZX_391{P9Y<=_++oGT*=_m#}S4@0gAEI-@V~^2Hb{e`` z+@kot-Sl%#gubK}A><+`kiS&$2GukMyJXb*`W{++guPhv*vk1?S0!9q|QEkKCo&)D6G zF2V5^$=Uhn#8v41KL|}4+Ombg54}QN7tvy8PRbhw>G1kY=_2f2OQoB$3j@N254cLj zPt~=t`wDz@Nct0*HN|ijTY(C`skE|V4V(r znSP9qNd4-;93GgxKQ6_5=DIu&BO|2{6HJlY>)++`BRr@0vv{k@uUpO2zt+mexOP`= zSakbqOjzIHLpG|UJ+xvYOelomXUtICb6KwsEzEEEj&3`lB!o+odPRdx@)$pd?#GRdw@a%Ax1gM8T}=P! z-!t<@u)9YW0@djX$q7wV;xt-b;4sQ1ZlVgJ8^@$a7WE(|89nTU!FM#2T}xFbvYW@Z zjZ2$Wb^pN(F@b+dZ>^D{G*piA9}~9D{I=J@mTsaHI9KA~V;cs$pUW9dKmZ!i!b;D! zw0|uwj~W&UYP6_l!^djQ2)CKSpnVd_`J#0>tv^oRs6wmMcjz?w$(uK^SZLB2J~QMa z5q@c>WJT+8gqvRM@IxDU>w3GXpSJ9VLx+oMu)y(4faEqQYUBk;dF7Y z&9PoAEWcCuuWMVxeTb{4>cZu@c0$9&u=z?4_B@zBXeXQim9u$_@8#Lb^0WBCh{6=o zXhGI0QpbnQ?!S{6?ZZ6B4;3xULbDi{f(hUAS!if|H4M!pS=>*TZ5|<;xJS)?EF(cxQh;h4;j-7 zub|X&VwHay|Ky*k)AzmgL5VL%%BiYS8fe&xC=qM2@0bUV>(p8JRB80IpNa#llSdFS z#jkmvt~fq$3#H(aOZ#sX2f-cln!nhwS@0KcCsHHDO67;$#Jw?eY9d*A-1=MsH%(!= z^BThglc>x2cw+gJb)XKSu%Jo{uk)$WYU(w9t{*4M~On2P6GmP@W(@pWp*S+pw^X6HJcWww%x_#>aN$x6!B z{elsmqyWKi$%I-NVg}uU3D)LnvuP`$Z85n99SF|zt=m>TiFtC6$yi4KvH5o`E5-zw zJ)Fl`^dPIf7s+$m1AQ?f{Td-fp@!%e5dps~UfG4$XbLLXDD6i+~i0ndSL={;7HEqXNkkN=BCs|91@2b?dSPxAD}UC zYnM@2l6vU<)NkOY^ujDjq)g>Djd;-zNR(`GYyZlq`jIQ}`6p*bq00|3l~09agMe#T zW+Mkv4+~1b@2xe-BEmayr6Ga;(2Quw`hJCxKoa*vpf$x@_pA`|aiePXKKDNWRY9u0 z2YPcRu_<$Ue=-=bjdN<@YUuIKiPV}~@7dFvLxz8vdqR%Z&Zk`)14wW(&LgZR%^!Ey zSPh;g2%%|<62EGj#1GR(nvHODIJvmM2 z3$)dMz0p;-fC1y^3Y58nus3!)ds`OEl7dCjL$n*6W&?Bt-YKMv-L8vgvQ<9W-Avo) zd0Fxu=q?!`T01@I((U~TAuJKaA5&@m;9|U3uFpaBuPd=T zgR?Y~io;n1CI*A8V5NRQemTab?|gEbbMBt}(i|HUSQu>b4E^w>IW~$-4ZYjNH=4fK zyPyc_p{H`|=ZEunv8r~uU$7+%w@(?Vu82l23)gw;WP&_5T$Sb^;8>Lhfb`vjz&%)w zQJKHOJUs^^!9tklK%&Lz?Hmk$@Y&RFQ0CkeRjop`(nE1N)vNv@Pl^Ge8KHUvB#9el zWP3rvQ2$a%UWacm_Dt%H#Rx|e@qg!A$ddu~r3WZc#gdq@eV9*9oif*It4`ySppl*? z38AUXS19v=a4m2(KyVJK^beXYvv6=y7GMPo*U{!2hdG0uWLlPP&RwC~@WOx}PKyza zhN1Ou3kQIX4q%^Y*+#R6Y?&=8Z-w6&+!BVm@nH@xoH1=0$LprFY?FNmclUDkOLu!d zp?`;ya~|RwpZ)sOpk;V=ogObZS)^(ZC}t285G~R*U#_(Yd}=84H=9=fqGVv*l9H*+ z9DEaw`li&M7ZC+%H9&{mO5{g=?quPU4L~|tF3&mBPaz;$HGQY^Hp6ISRVjdqOzS*+ zZ3|t*AsNHLw4eJ+(mi^ipB%iH<{#2J(?g5W*k1qA&>KV%)B0%W{o0Hi3=PxDg2JIt z}v%;>Ec}bhzU()#y1oYU92doZ9rn@5IucaZ#wDQ)$L%n-l1P_z{Bm^UVszBdegkz zO`bp8{^t1V=D^+nAi5=628WmV6<`&o9fYH^!Q$i|Je6?GvP;$ggn_cXkJr`LEpU91 z+eEhzEZvS8Z^H}U9?;-YGiJUszA@f|aiFmTx$?C4_VZ`jLCx1fuWcXVb@c4fkdW3G z^H#exj131o%sq_Z!`Qq3JN&^73UTfug0%T(Zc0xG-PISY{R=XM4M22DWXzYDXqr!< zgNF7669LgP?6}dH!8bB1y#qix5{=#+aphkL!=HA@^YZp$H!-FSCLo$GHtZa~VZ)OT z*w2e)Xx!Pya3}06!&wT5E{|=#SHtQL=t`3idik{)^ni{yuEsuoNZf(5t+N86@2kv~ zitedv$wdrS)8(9o7wcRQE8l@eGC=ghob=fY)+t-)h)J%a0Z3&AAkOW6SJ~jD*#Ob_ z$H7T&(}Fx7>&qGJ0`7KTaZ(HreXeKEQQke-UX+`%cP4SurgtHQJ~?w!`i6u}i?%ZO z<&wxYz{S&X6M$*hTmP}j1gwR1lHYm59@j9~{;@NWEr5gVZlU^zUFZ7im?i`Xq1`ZN zGL0j2&nWTfySM%p=U+HD41-%pX!y{Kr6VEqddH32#|tvuaHjqRAA@-zd1$2b5r2Ly zNCsZmn%{jZ1*O!r!FDaIu@P{L_o05{3aj8mzWe$01F1;i3pV@N7)IJR^iOU}x4l1k zu%n4|A|QHv!FkpE>otKD9S8R8{lN}luL3qjgE?LttoV&DSr4{~YddKAdG+TbTRPGX z*kIGgY4u=9$zu~%`<=ek=bZH3W%ZT zx*21NxQO9NH>d`RQExG#I!OqPL9=xOL71h50ieDv%cpdiMiZpll1!~K6$PZXeE~=J z(UT48>q35z_a82L+l=N2bGw-zv{LR!+ww+jYa{COW<@Tr*+2ZukrAaF9yKqrrr@jMJrxsLefq2%aJ z+8*jHw>fM4IqHdVjOEJHrDB8@4X!q)2F0f!ZLPqtLuYBeM?y6d>KGp#wWEb!3I?-a zMKAa-_}rDNVg4ZN&E0|HG;}Nn9to}09t;hlDe)l{S+M>%BZQ8EX%&p_aR(OkMOTY8 zW(-!#bvmsI^Vy1)9Q-Q=Tl`s$)7z7c3}L3!UES&acGJSxX7ATKu?%JI`%n??LH8&8 zGvd!q@z1F^F4a1$FSs|5qj!pb?x>gAp#5c29P)#O`9bj8408tx&Jq9oQ#OEcbr$;j zkPUh7dm4#@VQ-9cPGjK;((X<*J_X6eGPT_1d=D-htns>|VS5-n)!z%0{K8E!dt-h= zZBN7s^g|N_353wCM4$2gadr4)B^>=$LO!{@bC;YELN|y$XwmM_vWh73-OfGmbu?f} zLZqtT;&xjB)>*>o-uxB)Mi5~-;=AyIEz>(7ao`<0y{tb$9+yK6x23SL8j64ZFUJO6 zQ1Q=PB6mi}#9De&4XG&Skx#Kw<}arlNGE3mAUU>b@V?w{p3Hf_IE~yrxeCtl_GAQ| zoJW1i4hu#_rMtV$=7-+!1AgPn+!J50`Gcyiz%KmIecWz8;E^8W_q;?eZuj<6F&gmN zaT;cC7*pTV^J%^nx7+gF#?Z%|>kL=@9j>(V%y<7%GKo@mbxP*E3*Lq-H6q&%M9lvw zIl%>F_~+tgJn=OOL3s{{KQjt}7DVkVYB?){PVUA(YbvUhgyKVord|=RbBcfN)Yt1p zM8z1=a9|NgcwC|vS0i_V^vywNtAYBIcSs_l#b85s#6LeFi9@uw4Yr1{X5Q5=*wEss z)!S*HovUHdKA}aseJg&r3aiR9pyO`9KYx2cVB=lb-(PU3UZ&m%z;6siZ(W#HgR48& z+2k2s+XER%Pv7GVhCcrML`G6?AcNor!k)LNkN$*RXN1sSkdd4QEt%;1C!fh-8f$;Y ztb8)!&yTw#@b0$XaZ)1e4Q8WX-=Pd1HQX-d?rJm8-+dTpElgNv z#XsLRs7FN559O?FFz`srBY^>%$-IorO;P>a_&|Jkyr7zD3kO^LSy%hz$)+M!u7)*F zI%f#~P?qGiuX`ima}EFeF#d*bKnmO4gwRK;r783{Ni(o=HO}8pUi8xBoco3<%pDiy zxi9TQ5pyPfV1sV^m~)q@amn@5NVYiyrBkj^t>cUk`b&tDAYLS2TpIBFUxIrx=N#?H z11ZjZ7VXqeoCfoQ4yL^0kJWoAO0J4|6Y^2K4i5^pexr_=2ZBSYM=T zsa2%7g7p;b1+VV5;tM@5(G{`*?8EQC0-|aT_~+k&1yC_L;Gf^=GFW|faxnDs)$8YW zmw+M&5m!h2bE{ysjt`BwRx=4maycV}Wbi{h#_tduHwE}-nr6g5pZ!uISnWs%J*?{!(#5My@z39g zWm*Uhs-O`<{|v!#aIhEr#?o!rcw7^}KYv(XgkkINyshQ|Uw7xNd~bz;iP?b=dUCx? zJgqR~+8ha?=@qA*R-dau4~Y0@uEH~+q3}xNG~Eom=zz8C;FU#IgUWnH{UEow^bRkb zniCh$-1M_T#`opHUsy!xc)lRx&ppr0$2GyhM>n_&Ob!-}<6z?}FyHm5diju(+pP^K zs`n&Mys2Z;04PN6n5=hg$4F0sQh9S%J(jK@zCo=?^PQ*MQ1{Rq#qj*id?&+4^WJ*5 zw1jaQBR>Qz_P}YxAC?RqUuu5EKQl`FZRrr_cO}0rT^w+XfML7R<3)))bq}y96=Ok$ z=Go-E&^uP;16#CMe4|CEaA5raB#c}Q^#{L)lvQSU9hdFp?!KkaUYrNkoba{^e(%4Y z-?(tQjeq0mO^mokFxR?*d%C8I$zz_(zt%w(~L2yPV0>8VXh6N4yn`F zgP@Wyjnqfg+RY0kV}#HM)Z8~M3|QzBpl96@M$zQ`HxylPotH>$W3z>=ge@8TcAA;0r$V^V23Z{frF4@*n-I?=VA<7U<^{ z_MG*QP738}hAZ{65klV)lVY2aq9u%?BB0O*!!6LyWrz~9_K|v;vSAHiM(eh!f`RUq zaem^TN$Cxh;Aku9;FUXgy$t?HN#S%OnFV0xY^wnMp_Kx%0lQm$ z_ky<-*6O`=&NN)tFwQx@EghA)5kh|~oo}tIHFpe4W=)-tv*AQ%VCgi#V&qofH<(Qt zcM{V=j}*6>KiJ6FoBiB(t)P-wiAMtcM;Y)k=64sSqEYmS zg`p22NGk~Y8QqaVJ?WwDEWI|xKX=U=IE|qql;PR6<-6x@&PZ-?2N`iS{PQgvtVkSCO2xz4J)lQ+B^1F6ZoqHsP%1Ob`3yZG?E@XE zNF4Cb0&vh5i@n}xRS%p-v==i1s(erd#D3e+t-=BS+^hmpJPd;a2j_0^N7NF?$&E_~ z`ktgSD_1)n^6~JQD7iAuHyM`yP zR9i#zlJRG=iO#?>Bx5yJY>(4wDcJ}Byxnf{Y^hcG$5Py2^Y@4aTVRAbyF4s|eQF~C zyyW)qGRNmqGOD%%zp?e}+GYPO&%rsT;mIv9IRt`Hr0g0YGzQI&jEylb@dc6ZE{_l= zL!JiX!GYbIem3N?_|lO6p`dFH{j#z9z(S7GmNEf7Ot zua%=tikW6_)R4D<_!4};mm9kid7ed}?YxRboQ57ejdI5i)O&F8c# ziZ6(KO6jlP=SksqANl7=Fe=IM8^z^mpJRZRF z)2Di!4igy%?2T8Sif$C6J;#_&fsORYQ82ziLg?j9U+^6gr=jxvI2q5wz|j41y|44y zq_3(7U@zS{2>Y!sn(%A12iGz1&%ciq=S=+baEyjSAYGdvNW?!sr!fdW_zK(^r|IJu zH5(Kp%QNSkzMa7i#I$o7`Ca7>zcb%W{PX4%6p zIVsP5wtt`2Bt}9*{9;qCHzWJ$tkV_+{`vQ6(4zdZ9!|Q|r?hY6I+vHhAAB+#jQZ|W z?l6{aGfM*1GUp4fFP8a7evotS>$@k-&EK&wc92>4WZ2I`N&H=@Z>U2C*sqSTzcKGV z*L~%a8LxZOaZPV?V-7wgQ z3Px(QkK6=buy06sAJpJ_89`48Kdt>qc^p)}=*HC$dG12WPjk~A!qq_iAP?$mr@Ea_ zKDxm#t~3l;3_iOT{B{=M5BlkvhF}QJq8p?Tq=F<9d~X*h(-7$ce#1NWMMQZIiZmin z<`s(S5OjLE0Zi9nyWJyRXR?Zu!w(~o;a!|QBZ1F%0MypIF+Vsu2$XYFH+W6|Kj+Fw z%A+{TJL>0Ow-x$NdP`jWr!=1O?3Vtv`jBg{H$dXx^=(rgthSynX!R-nn?_P;Y)iMB zWxl-0F$eE_LE0OA;KtqEBJ~}%8H3O6PMNa1-lhXe4ets4*L&ns$a^U- zxICd50cX&|9~|@rlP}C0qD;p7+^Mf`dYTuI|AH4CKnbwSy$4?OHId&AEYz1@MuQ5y zC8h!N0Tv^#HpBlcMkGMJ|C9ZUOVjUvID-q3~9>gQ);j|a4Q<97G{ z;MX>55F~>{5?$Y*&90qE&7?yyD*m~?$NW|_#M%TZnc)90jfqbV-85b>+ve=xScShd zRB3ZodA>2*xql+z4M27J0DjS<7kc-|)uStj4~9o-#aYK&aTe_j#Xo-*XR$uW(w7V8 zymV)fXsmV?0U`IC#?AM2?^qN~wcnxpi<{EppV<$}J%B20QyvWo2~-IUs3M6BKKU>F zq6gRc!7uubOM;RK;1_*W0X+49+P2#B^8q6nP~mVryyBm~setwluw;OLepdnX6Dj<_ zKfgPT%O z%z+>o{`q_wR0hyw0By#mBtOc=P({MQD24DTbk^5^sP5{3cw43T2ic&zWUO{gHpc3{ z)*KspBaxr~P2;YKX=N_aPulVO%+Nu`s8z5tqGFRj5w)ZPh0G~|#{0)ZPEAu?P zDDx*4ld2#izR?;TU4y*=4q8Z^;-5Qk>Fd?T+v@d>%#BYr zdHxNxoj7OmnZI3WJmo8=q2J7${Fg!}WO#k<_4C(j8SD>FELG z2OjAfJxwsBa~k{f-7;tPA4T^*_xkx;90~XhpU>(4#tD$sK0g}Nzm`IPp2B>Z|CK@{ z4tCwe^IU}n<-!im4?GfSK&%oJDi};Pehx3I@O5rk;N5~2>#H9k!3zyn;Gey+Hr!lJ9xM*#=|{fc(rNzsxBfv9quLlzu9#PAdDOg`x#wjm3PXSO1Qhrwsls2@TOulb0-?%Bs;cxKH2d6Zr!|V zcl8rc&l`5WUUXemmyB>*6*kVGv2IO`1SR%^{Dc@I)*1ZI=u?|pa*+pCgCjIfjQ=?r zB`?9G4g8VK6GfT1F98~#X>V>f=OzLtjW@ zY*ek)RKs>F{`n4HS-k!EVFxV={4>fK@uX)!2RL(I$Y=i0o^dES!PQobpZ|9-gdTkX ze;tA${!y7>B)iOd5dZwS8QMVB%z2<$P@w+VF@!sc4q6!O2GPW^dKg%=%nkqiu(po7 zgQRLG;28Z9I@#!In1%=n?dPSB*L|A?7&X1&pTCEO)SiwUoV#g!{RXJq#p+?dnZ$-< z=XJc4mrd!tiR!T7*PS~6>2-~GIJC?h~;dElSz0(v&?@_M?(s>fi)H)O8k z6RV4p+}S)X-fHHYO+WiQHkN8mjae8R+}B%u>jlakH2&v_EaPYH zi?g^%?FAeE#v)`;LZ5wS##&kj_u$I>;LngUgn!*0Hqx8X?KzFTd%>b@2f@_QE zmW?kc@~mAitCtlX+bl0w*4v<3&3?|RO!8i(FxLALKWF@8d_(ci^Wz`e;AlSqnKOQo z=b-14K}_To|NMN?^P8xV6#vY@onIJw8wn62zlF|Xd{GIyN%ZK+|2$Z=cJ@Gq-nkxI zlwV{twhmzF}gM1O=Fwx($?b7lFO_HPRwOE<-!}! znEBS~2RDgste1R4beo20vlakX3yssT{9r;?6M=NuA*e@e-=pf87$``n?-qZ1ciOj2 z?TskZqh@^9zvncdpLK~Y?fzAC2gU1hr}f;Sak7EG?j&lq?s##^Wl=wrLv>Bc!t9cU zWUSwWb-k?XT-<3(C$^G23Y9OO{LfKjTn5L@@3xeSboV_ZyUBF$&itT+`4GUE?!l+t zM?Bs8&Ck!4V2i#(xE2W;C9za!#_#B-xmj3NVvI7KT@FFCX)O)~Wqvn#uJ*DBeiVYf zYTd}-*&mZN+9(U3ob|~nzBc#8Ly7BjE+wJiljk<)MZcjsI693zIqNAWTvZVMo$@SQ z4oq#W6H=>=tFmyNMV^zYfFKT-4&pS({oAHt^1RiR;PtTBVHY1%59}II*XDQT2aA|P zpsBUEFHOivF3BUC&4P3Xy(abjkiklBtG1CjuwP?@Ni^U!%=Vj@HF&$~0Z#VOw@ z8{B?iiTz;#j6?ZtOv=`n+O;f8>dE}?k1(vW9DR{GTRQIG$~i~uVD?qFsJ>WZ+rcc& zIB#!4@y~<0>NFGIh1q|_KYtq>oqYq!`Mu(wgT-Se_C=Rz#po3aui1ZWisGN^9gXr( z^&er~ivG|*a6!qow~8C}B7#%HNWMp{0xt%L1fCY=+Km7C6eP7nB}PCYPC)dyn$6r4 zt4A_wNNKJjPll~jjQYW|#MK|PpNsfH6jk#g3ZG1Lmg1j59#NWCVelPg0Ma>gyRE)k z5bJKauVa%szC+s-tG7B&6C}<3xZ6TMwS_TA*ff!@b9SPalS6MgskJ$l5Us%qIxKj_ zKVLZ2^xCS1^V&iz+K1>(oUOmrcA!&;^-&QDZd^nw)08Lqa*GX;vnNRYD0jJSzqpbZ zth&z%dWsm`yBdKaL!HG4;Xjd23A6@;D6)T1AueGg5cp?((n7hWJoCj-EA18k%q4oR z1}}QXH%`MNVO_th3T5L&J#55My{<~;lNqnmCHh>ILu0ud-1korsf*&fVEgS1`W7fV z&E5#g^2ZJUJPh^kjd~GMr}$@|qlg%yJF(%t_#s-1ihuSB?{mtoiXub#TgPdD1IHWw z`Mi{c1an@jkCq(Kn4+~xC%Rxlzjk?I-lvDkA zRbw^jJM2gG`XL*a$#c*q4)Qau@(sM&>ix0S%M`~-@z2#F7uoQp9el16DW1P-5E_+-V4?(NB& zW$|q3L=38p>ZtiI<15(ont*G!%sPG9Nn1ijPQd?cOK0yW>pbhyF~-ZQ?Lxn{$IjU| zw9VlQUe8UbPps>{^y`icubm#o_xbkSQfh`5(aSJVo+m{q(WmwfC$u|T%*}dW9e4u6M1KAq<_@QEOm-IQH?Bv);2G19udVAl*QF}FS*r+M(hwNX zm!RHogh{;H*Q$JLefREl>2Sk_iTI66qGx7Gl)(tB#vHPE!T6uE(AiL%h7Yp`1q;DQ zP*3aqdD}|vpczyYoQ%Qyy&82IL6ZQ@3{ve{SBx)sKrza;jyvf*cM!K#m{1R^4TJ82 z)NUuM-Z(htYq}f6FmchFY_eGhEQA(Ns3(IvN9V@#$+(V#;h#?_#1TQ_i-}Pf8YmAa z<)HXyF4@!gtK0AO`oOWWq64hwgeBbZ4N@YZ7t)5o@CWtzEC?}K!6`okZ;Zh`o?ljl z_MBqW4BT6gdl zQEhvDQYaR>@X>xskZ(uLV{pXR`5A$QCD`va|M+G!SK(gPtE-gW+_U5#Vdc$T6j_v z|Lis5y4KSjulAv1En;>G+Zv!;K@XjURajoW9cE^3c;T&3kQ5ZipvQ9%BPxMUR^SIH z9W0o4w-%&ep+GWt)Wg;Zl(H5>RvWF22-Yd94~|m>ve3~ULx8t1Wh4`49r5A z3%AKsNQvAWY9x)%76^_zk7|>yA||^8%&H33Z1u?!X{Mr1dYyMZihe^iYp-e; z&0M+zUc`J!O!?9r zOdz{&ucRPAQ{+>=z@w$l8r_V8JLBNu9t^nXO{1N~_#VK$XOO9uF7(+_UO>7H@A zXFJ^pItAdLrR7~$i3lf0n2pu^#OV%kx|6jQw_9-tYzL>b6(j|M@z>;Y@3+}xqRt;X zi~5uhtbg~aG9lHvw#~qts0uE$7(+mQP%&y=DHrehiOJgaCCYQK==-{=1&wKNP=Scj zR13f(MH8SkaqjZ<{6WT~o%2L3KS(!yyN zUi4JaEYigwJR;lGW-5I0&6n$2GJvi$KTNYn@z2jEJwH5A>d+5pcv8KrflG>tOQLaN zVbT;%yQRX;aQFm2T&@q~=tHFaEcp-QFzc-qkzEq*nB(9*X!z$Ofg64DVfUZ(%$08l ztH?E)fCS*5Wg{g@RBf=iv}7$WdW2^~gghVO?%#M^xmzR%A}41lpmz(_QTXOlLq7x& zq@^B)r8=CADlJ6Q&ywktxoVt4eo7BSiT=nt6tHB3Nd67`M?L!TQyMN7iy3U?;9$g` zcRa~qaO7aQwWz-0ZEtLXw$o%lo{VKcP=}K)IR-PIqQz9edHJl78Dta|7QqF@KgZcl zhFM)jGCIaCfEdEbO|f|0Ue>Ur`oyFR5wn<^(n-td`Xiqb;@yuvCJoQdZojjpHn?y# z5Px=ZW@UXfHUmCaCxjES?UcG3&mTP$WZ^sTn`ls3e8;S;y1lbO<#h1kZ8}Rr;5R7# zIVPDk`lBy*I?WWM6p~?Z%clfH1Q&WlTe5qwz7W(`0>7xSZxv^Szo%er>MbQ%)Y!lt zL30&iQ0+L~yVm~K71tcSWl}-?1HV6I$sCv{3Z-`e|R!O7K(rF=J@&z zJl#fxU)~4tCjyc|@z4L8#?EP^AA{@7zv%QJ{EB~GM8S9K`uw?Z8p_95>J?u9k{|k* z29%8ApXX?U+uP&!t6E7W-xw_NyiR!X^F#QiiA%S3FL+Jw2bTv{@y{#ITvNSEz0`{& zytTM#;R_3QX324su zZ`e6!)zA1kUcY1ot)}uJ0K$yx7-%fHe&r4^W2F8x6Jj631`NfXUlir?!P*S5$r`xsbjFpvs#8_-xZF%&GMlvp$~ir z2%Mn!=emm?H>yM}%kw5c;a-?6-#rUjs93bP+H7YvYO=(155a#CFB%O0oW%V;F5X(O z%oDu0YTaQl@+p_TeO|1(L2a@eU|M(}_X6Ywuw2jYBy+Zisc8ZjWWBo zWSfE*ER*gJx#BRG_zkh;s@q@f=+M@8RiH}M_uN5^KX>c9%&GL>pa?Tg!{iz3n^UIE zFLSqi;ptIt73RAhHc7d@(^XJtV!hULRP&yyU}k?<{fy*-R@$AXhM+xIjil7 zua}qAz#2*~8O}2NvuKZ4#Q4(>aju+R!AU7rLEYv!$=9M)MB72swFSdJ=WytY=o5YU z0Gnc+3+rKZuBRn5p3?x=eK7uKtcH1E@{`jFs*ymq5(?|BOpZ0M-ao(4rS`s}>&?IdmVzEa5m|19!# zY!XkZ+g!M0=5f|fad6A0YDj}!0qy9cIwHg-qgYxz}X}<3roK>5i*zP3_J6I3S%MK!$7?!&~tX^gF zuyffb`F-b{=lccQ4x-`iajnNJ&^KB#OXIIgYrPcoN$7)+s<|i5bX^^6_hS9%>mhOi z$vA)-GI^Gyz)=q#T@S-QpMpbl#w+F$qL#U-Vvw+fh5FfV&52ZCoxxV^U1$<3{`q8p=nDtiu93h3J=s{kB=Q<;wqL~2GWoy+UqSu!| z_mp?Hl{;&YDXT$M@B72$Rrpt3bsQBsfNGtf_~*Nwi21DIpo;lJEK1>%@A^T95Po!2 zlyrC(J{kB8ry#WthxZ7Qivb8BtiX$^!)w!-+jI)110YaP{ByzFp3^Cq4g)yAKiiYO zP6wM}_~-M8%F09ky9j+#-hAFyiJ{Th2LJP3;+5+9>Se1n+u~DKXfVC{Ca&{>*`^ z)&N@P>DN>o;WP}kR|$Kkx^{-W_VG-6I9VK#$0y`mL&Q71pG$WdU>9- zO2+|tBj-eqcx1u|{LcslVRJ0urn&lRQuuZc0{=XE4|ZLwx1WN$+xVYPQ1LwG&eP2p zBlw?hL6UW@A3o&kEk<*)ZXziDnJ;Jv9JhCZCI1>Iq7DB%brC8z@xbn$#-mqKK&s|cBbb6fgj*EUXJkl{Ma6;LP>Z)Mwc1<)4RRI69M6NV>80`h? zJ+8kifIl#IyqkWmwnfP8?Rm#AG6?#hu#wsVjkrDTW=ihs6dh_@wP|8v$s+Lj>)dO(VQ?gm92gqyWKUxCStoG8GiB)gUB z6pR%V{ls?sJri^LeA{&gw)wU@)Y$gyz7dFj-g#1FCl`1Vw0;2u3cKY~oMjzw;fpbN zU1my1qP3(=2pLXdFD<;C~iNUlT>T3iWN1q?nsokL^ByM>=8i z+c%uj56?|}hqiQcd;7_Kn==DtihtHr#@T)CM)iyF>j@se%A_@YLsYmH$Q=Z$Vr4y@f;9Q z#XosGH1_;558r4Eo#=%RZ z1!y=4&kDj!F!~q_d2Sax;81Nfs+uWii4q(CvvUhpWi1v)+;)lqjKFA#j(k{7O-F1?e+2>g6vbtF$~#2-;4GONaUtbM0hp%ya;7!Umr!2E%?vC>g%&-9xzk zjgSUoF!~Q#galEaXYdJnBO3nsKhd6*(?C9@4AGw1(aJ4mqhhey8yQsO7N46mhU-=L z={L@tv)RvtjmRq~)^$=#8!wDFe{9$8E|s;I^Akpru-%4#{)nb&aHYKiXilSp{S5Cx zZ`%4IS-@41F&Q9!qvD^tm`ogFGSwpuExr*Q?B_XJ&7;E55Du`~>FTa>or!;rFsv*> z^@wwzI4e5T!yfW=Z?PHqvchQ~pE3lLVXj`p*~ybMUl$m?`gt6wVQISs{cVDW9e!}45jI5pAm&k}{7R5nhyAR0=RX6{<& z&2~}L;|CyJnyeD^F`y*Z5n<2xg9G3 zR147u1Pnl+sQBk^(q{N`&z30BgTL-o+HAXpQVN5cy&=*DDSHYQ_zEKVpTC7?Rj@X0 z_t7m~uL3AoyX-ROe0GZQTX^>5rkFgxseoIsXhH!0T<5%h56|*y1O9oGGAb_v|=!j8Z{->DIsPPrr;#ghUAPK@QpNvXBW=crRK$W^zCBq$r{Tw$T=dfIrXX2-!^P&Mz1#pZ z=X?%E;QI|gEgDgu@@i-B2H*`#{Ilq|4?CmX0Fb)m{%Zu5=36B{7=d$my8)2>k0}f` z|LYA9(7PcT|MM3+14@2FF?dY0H#EXJ+ve1t(axmpAR?|YAwM|%x+YK+71R8OYXYnS z(Wn%~SsbnjKlRrHfSNHaFTyWUhd{f&3(Cx6>gY3n@-(f*?tPr`Ep?Cq{C_75OIyh|D5ajuxaeA)I@C1 zT`+YkDPpW3BS@q*8}P>(OdU>nE5SgBC~>qBRQX2<$F@*~L|&^(LsSAd#+c3CASg^C zt_V{1u>!1y;hzyM6t7s9?z9>r-daGgN5wxQWU*Lo-if!Iib$um6q`{86mxpmNYm`D zCl-QQG{4|C=BJ3#B+iE45Q*s;&WIpHFm`J#M5q_Cs$Kc81F zR>6GW&fa3@*;9QP|MLj;Sl|gY&z?#qZ^H{dZT>ZD;)t8FcaB(RI?NWM5k4yCkZ6v^ z|15a~=i8=CN-7~QYMT|ggN@JJHbd9hL{zO@HHREmMjv+7}q zH=nb%2x|U{6(90WnHjGO%e^^M{ZO^EW?pruii(PVwtMe<30chA;sX>haRwggEo8AX zWP$ETagM`n)rTz3*);#@fP#yPfA+bGi2ok4NSp@va({;`AkXv7zw!09B42Ja{Bu)R zRlRPXAq(n_nS6|W$bw-lb#~6%L73OU*oGb5w%?5JozvJl8%bVB>}R2+kPx<+YE=aI zWXN;GU1FB(=_Mj8KB?Gu1?&w`@y`uPbXF%Ws2yqBZbjnz%ojv{@Z@&u9jDuz3L{mt z>t@=|E%&o&Xqn7nYN-QX7Yi+zS%{XD&aHkR7rhthFwn&-O{4cHq$u|3F^M&o}z*Vs#2 zXTWB4{UH2>{B@R!n)DxS-4!@(&37Oh#6SOr7;zeEKc96a9zsvBn7nA_3!)$W0bt7O zH?*bOhGSK2{g-dpIGB82wyv8ZZ+Owy-_@nwDI37oEx2%2+$9<-H*e09H$Il8pD(S# z9uNxzBT#)2|NIIOAQ%CxwpMw$D~mfwX!1EV9JKj|1!pr!Oyrn z{dD`X8>8`xe@-@6V|CYfzguBa1pA4>z;7((ce@!kY(fZM3AgASqwl>VDvQ>wvn;7n zDiEL&Z~XJ2C=0FQ-34!;RJiz^)1ZF#3X;aE%=Tii`BxOP#HH24ZUQaxy1gt0;P2qF zhztBdCO)xrw#^_3E40iN|9noibVgGs076TRXolT&Pli0}lhR~a|0*koZc@&B{Uo8| zaY1~8>#I+!Yjy0HyQG8Z0U7^uH3F3P2&ujal%e+f#O7`h?Vj|auP%^A^5rOKxtDTE zN|GEJN%7BwUJz|TtVy+guW;OoaV1|tv;%95OGw@d2t)`*PRyD3XNgNW)A)56@{%+f z1uz1GsEU6k3T`*}+4aP#flfBAmQPtG)1G^g!k&hL%jr@r3cazmeiMr@09*p=6M$mq zFMPBQ&V!xDIj?4HFE&>< zaI~=c9W+gGz4836$p%X!r~?b9f%+6fIORRdQgt_gmA&GEwo*|H}cP?M1x#pH-jo zTCOJJdSA=*=(l-#iN?d+A({o0p>boq73-^dh^;C2hJTKm$#b}5d!4q3R+Z3B%Di|- zC9@6o##v>;pj?yU+;iGAU&z(i{$Tc8+(F9^?mOPzf~iDUYi_1q6MRADQ^W$ljTCpm z!`D?}uFdezQ41)YWTw*LmuDJ&3SZBjOfAQAp^pYF~0#pqD+&SsY zB=iY=V2R^Sd1l<1K2?ugpm(hJXD(UQKx&H$0;D%&K}i?)xA^lj1P9KLxD&rIhTxXm zA1i>w;@;=GzlGpvUhc*xlb)(}m=gRe0n!ezP0kAC|<;xjV155b7oF~jL9>mvKkZBc? zuyzekMXomQ7MzsB;v04iTRe1S3!j_j0o`j>O;|@y|m%^r@MMD>y8lVmIqoLBi76LAlWtTQ5l5EMA%?<8>qS zMNUYe<+#(5Is1Am#2P=!k%$aAyZXTo!kj9i7T>@{Z~V`>S_w>-&9)iLrzrFVB6<>E z#}tVq4-w^Is$>O8W(5DU3`*gdo@CyTxrvkdS?s!crJV|CX3R^s-!;U-NqZe=E+{9^ojPGvg4!4vklC$-jP`7k+p_`kEGidndhtEnkmG0>Vc|OVa zb#C>kU@xNYY7BWIn;2~TbW<@u`jpum+@&s}LYXi7U72uO-s;NTlNlpGFNdlqH?t@q&zJdw zf&2tBqiI^3o>$8aaWFiewsT^A-azl@-gkxH)py`D7_Sp04xg$4ko9MMynZwef!1q^-|y+?*Nx-2UY^xY!&9U_){;~Wmf=YJ%a}Z_x*s_ z(x4HxV;TtHBn!X8YmjM}qkAcxY_yArWsJ(iCv!FYt(}ZyiBKJ^f1f!Gv!9LXR#@hS zcoIM#@Y+-e2r(j#zxuN0h3KVD3k?WVQB2f8P3Rwl3Fi+bTeSJz2!!KhuDXlz@MJpN1DcpK7e2r-0rA z0(aLm!!yXoQmVvhm^@n!;+u_xyF0l!8rz%ZyIbzqrUm4lM)NuwX+7W44w=)q`&;#B zq3VKk-*7z6m~=U99%l^nd>S{=IV*bws3Q#bPc2^$$=k9nSY8h`^Z^4 zHH0BcD0T>Lt7QDodG^{B>dVqW^CvgvQ|i6=vUGtvXz{v70Oyp8MWZ_zcAROf3)W; zf|A&ii_n+k{b<)Yo)EbgnQnjwlzht%{zx~V94UF^2d6&0(4`+V`2wt3@|N#Dl0ZFW zP_CXcleg8iRt|OqBvZpbPaS1f6(j|=v23)h2J?d!eNXA_Eb_MUEuS)+6t@mL$~h1D zZV4?*KpaE(%+T4GpT=$bte)4a0tS^CKadb9J;ahye z!s0>ehf$oRw88(?bv)gn@o$t*Po7c;C|3givsZ8_`y4y4zSPT9g{E-MdnZ6osiVw* zYbY60z_}m7kWK?iapqT_2gl%+@BZcDan2Th{*Q|X&2RYU4;OFC)*s#c6&l;%e^&ES z+R0R?BR+=0)$1GiSR8;NPMJ1%AyOi#37?BV} zO1fLRJ4Zz6?j9QH?vidsx;qBx8cJY(_x;xQ&n#vw=H7dr`^1TT_NFCrWo|~|hG6}> zZ-V3AO8t0^rTG%UM}}5zPbhYhGSAbgG?sM-3-2e{3Cf1|;nn5Mdu|MVZX+Pj`Y?{p zafJ+4rFwtGN+0R)qj^wn2^jU!!gxzwi6MF$-%Fd#eSe{0Ja_pVsWptMbU?gloItf>Wg{+E%=Gg7l6nRCt6Wh5dNDk9_m^* z33SX$th%$>L*nYH-trhPv4&&qXR$z)4infJ^uLct{0*D@RQxM}LsOz=^JZe%Q2$@E z&)F2Fm}TDr`a*o+(V}XfGFJBsyoID5E6K>!rU{;`@gSv7VF5)^{$4M6zZ9N2dzBmV zG;ukvm1H?;I^V9z&KQNA#<)9=HVEm}*j$ZMeN2pZfQef5MUEzy^1NjF@zGkFExFN* z4iAy#YLn8+Pi$zh@n#Z#TeyHW*WRLDC?6w>UprovDW`)X+}vi+Qw~InQV?8|!a4MF zaVP!_)<~R{KK7sX){keJaV!j%Alzu3IbH6glGPff45woI8@D6E?TE^Vj^Kg>n-zyg zsOyG^2K!iKj{cu6g1L3*SWYW>3Ju{_vj=fRfZ#wvOtz~@Pp+Bhpx%ejQl%a7QARbK zl^$N{xUc0Zr9--(8V82Hi?0ZUBP|36lVo9ct91)DS5vjybFrmM05Z}J2Fs_ohU?E5O0r?wT8`Uf!8u4J>Xe{K}fl@SG__*zhXKXL4;P}mMtx9}wB^t*9fvhvk*m0&j}-V{4}zx{+%)KoinUG`V= z#mkw~ijzD;++~6lGU^Hqs;Hh_w#B2EY+GaGlc_AOvp7T1Wzk4+wt%?iQ${=HG4^B8 zyiHL~i$P5CeGO=}U`cJ;5PH?xr6|e!S1H*IhZm!TmXcy(69EPQP0iHzBf&NmqQI7AdTz zyqn5bUVTZ@h@-ha4yTh~2o-T+y2q#ph&iVm$+BF5kEB$(F)mE-rvm)8S{BB4Qv6elk}-An6Sg5wt+0DN zGe5r$W?Vp&)BYyJ(W&z;#m}v*PHiaY0`~p6=2npF!%gfdG?Q{SWmq2N-m#^mE~@;? z3)X=H(_j^xrofB|RH92YjT83ha+GAQ(%kh=hhZQnf&&dzCq2@W2vZK%rMLS&?6Kxs%Q{QHS z2rLuQT_y3rl@7qr>2q;EdFtw}2s_+>q%v!qHoj=PCJ=z9LgLpQo_^_ zq8|VymY^;4e&I+voDaVyqhb6s2fV$RoCYZc&0Bp0pVG~3)Cbb%dmaFPGMNi(?9XZ$ zD}~8T((}o1f#KQ23w%DDG~if|<^Tb_eI2b(r#*&IR-o#5GJ9 zz70VLVWZvxKXCY?n*?j#t0Y8-fBZLAUH*LzDCi6lbOpTbCjoBomuGnER+=^15-kq{ z_?NR!xatnL|CS_wY;Z}ox^sDd{(s~Niq(l$>zr!qZa&w1LTvB^&1~dXQ>=yS(D@*n z8sB|U3gfCl0Y)S7(I3uhrZOR?Lg#yOzg8EVa{KHaq0$RE9&PP68j-rEvUkB0$I&Bi z!Jf4X5YG#!X9?43?h>E}_|@Q=uj2a>r#~t^P}*HNF$ORH1nu<3PWRmlm%4gIg1ij< z_

    aJw+W(JX`q{I_Kc5G35^Xfi*iUY9F+M4 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%0Auc7NhE`-@JOu9GIH^ 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

    qh$^6veTmWaeA2j^U+iQMoq+D2Y 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 +s;TB$Y1ZmBk_TSfa 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�K9wtq=!fq!bVe~X5F0D0 zRJH>0MYY$}?4N$xL^@T`?B5Q`SZ_ zRh_8@hE20fbD3x%f48F#OY&Xf%>Nc&UH5mzPedp;0BWRe&? zu(s)IZzr~A7M;wO9_N=R1h>mSL)0Z>yPsvdWC(ASXO4?{w-NSxT3^2&AvgtD4k}Qhv+dHaYi|j&jejw ziC#_UVZRe)MbPDW#e)1D80ae2>gt#>R#OI*7lIG4qLLA~%bjmAy^>ZzrL10;n^<%< z;tUhAlXs_i)z2B6NqHG0^bbAMl8eL4YZtNJn32E-nSz6gICX49;C#(14;o@cUx0`* zWuFxicGOZbrCKnlPN>+Be48!xRdBSIzV9D2V>$RF2yVCBuEKfsL5 zw!LwX)}aRI@NaCzzq%pn4@e|`*^8Lg-%}D4+w`8%pFo9+;+kwgy{j_7+0AMTG4Oj9 zVEGTtJ*P1AUD4S~CEr$R)4(g~EU2c|qc^Z*OE*u>DPkzBTfoza<7T-f!@bR*quk3f z;dYrEu?tMlEf5AWf?hjwZX8E{5C?_Sj3B%fAK(^b8q$=bc3l@D@v5TG{Pn3?F1qL4 zr(HQTQ>PEjRl)~7BhI4ZJH&AAVXyx_W2!2CVH>?6=MdyC=L?g=r*15Fg-u%5_UL0y zqW~!{OPAZF7+eaKgSTA$Xxi;<@jUgR`LGyslT=eP+#&K}xs|PmD$|#hFyKkA7G#a0&(_9Onk11`6}-V``;=c+D=RrO}ewsJeRdWc*L2DZ?;VE&poWs*DoKl z5${xGh+!kk@elEqX)4zh9XSqkE2VEIfs?2<4Oa6EA~#rhquWZo z)lWWtU8s$s@;(AiBd<*Rm(gt`dG_>p#<#3p|D|fHn#FR^(R#wT@B92KDlY++*7IeRe1D3kpS9HO3yoPkqme2?g4 ztL500ZNtkpx|w!~DdovVul0Rn+scw|ArPHx{bfV*lJ2p?0LnrT_uYvlhbjeqx;$)L6J8utU5P4xD-QnbaFCN|wk?>5GwY zw{em}vMO)MXDxZY^lWHpAORf=zvDhtnTejvpl;$yU(TU2#J4_hMpcPX*!-`dwPK*W zzN=bhhGJy-m(u9-vYao{mn{@>)d*!?y^%NgT7kk)YN4GzJ8S@b=lzUX^RJwx%GM|& zZqu&PgK3Dn3gK~UAk}XF@I}>fUb5oDbzEe@!t)aG906g;;1KMYCAJ8o8zXx#p2 z2aqun3|b$aKAFQ2sJx9hh@wU@J~{VtJJsId6%in{ml;-|33s%66~*Zeb+k>~O4BdQ zDfBy7wc|YLquLlmBZ?8nR?FIuCt<`^<$Ab&4m}I@2IQ{ORWi9)7%zc zDN6#rj1EXp{E_cY-g3htZoBCLeEAr1xJcK2pNoruRA!USZ6Z~4D3}bdnhqu39z=(Y@+!I9Ke?j zr=h3Wr3040k1D6hGgP@0FV)GYcWIhTuvqMdG}JD^rdDV}KaI9p>Z;M#j@HfnN0--p zt;)|ThlA-gU>i#O_)fOFbXy*>_+upYwV(P9XC`8|Ct$c`{*FOcd~`q7a^>Ttk_`3h z0q_mEL3nuV^6rUEhVuoLdpbvFo!nSY4+jH{&OS4~xVy1G zu%tZ~1qfhN48`uj!@F zwGvHaFsPyvN}-~8bfaPX1sROmquOHf9K5*TWwo{=?gTZLnDB`kC!^AQa9`eY(9}sx znMlG_Z^3Y?<+c}h_tf7Gg3B4fXKtvV80Bshm_$M#2TwGQ)BmV~``chK9boTAuI}sy zmx(F1u5P%`1NbRR{E#x{U&1u)Ww;lge0LeYgakM zSbes+W5o!V*a8@z_EiT$4iV)v)r}Rfa`=r{3RrYE=K#0i7Hq5X0i9ZnqWGWN@2qL@ zq_ZvG^SdwMDkxXGCZLV0r|?r9=8vP@9^zHhyOB#0e(X5&izPWMe-yR_)Og>-V4?xsQf&jj~>pt=8lPH^?? zEo^^8ZcY|vwl*fV&i^NY`W(EUsHa2qgrPESX$6W({T#I<(t;F=f<}7; z2M|CVnfb#K+N(W-LDN?H$VmQd5buaM$bq7K;d3wa607sM}wHAyy z+5BBPOb9KNs19HjJ0taWN@N1VEcaHMejtT0C$&#M-$e(jNzyz=c@w3~2xy3AY?JhX zaRKf@FZw+xyMUF?-Mz#_$Q>7IP2^jVTqj~wr2mOYQ!pb?XKa{SvK#{d6nhiC1OJd& zhr7ICNo8woXu75_5~$1cK-1o3+?I}P4aV_uG2C$m4+6bzueqFVV_FwAI;xj;E#X3-aeW*e@(qvr3A@EG#Azi4{dOb(P-2z^_~ zPFb(;hrGNtjZnSY{%@*H$!j^H0-mDxX{6-ouu{WUx>joqAH5?qtW~78IZgRZtP@oWqP?;NN;Pfax{ppZipM( zZqck-%xa7ZhEBb@wquN3UiM;H6Hq)*nnhL~FNX(Nu&km|5o!F8F1IK4}Resfj&j+gx5;J(=Jm2m{654|9()fTsL*}yui-@;4} zmBq0c;0Vzy`GWci-(o;KzGD9%C9fbjp({uG8xH&cizjP-V8>`ks#?GRP!w{wy{&Bv zJ_I1jC)>?Ns&(?+CzDV8ynBJRM{FJT5R~ZZXD=w(_Gq9efQ%$o#C7u$7!Xet#9Co~ z3+aZY^Q~?xm4J9;xVkyZyPAs~)1iVKq(g~P9g|6R&+<2*0IyDVmYq^5WrssO|53*{ z{z(#dT7LgqTUYp`X{y`8j|ch3;dNNqY%QhcMz^v2HakQ8ZF{R+1-neca^36^kwW)r z&S2WipHPCDI7uH_x;FJs`2y@q!Suk>)OquRaG%bMdZUfoUE8xHGlyFrwvPljTT*O4 z?_^pCGU8rQ(S3yU86IP6?IxSqd7E&^4LwvMmoRIYG0$%5Gnx^0ojlG#XMiB5kt_N6 z$o19m2?OJ^0!Y-2dkTM7()irzMT#olq3+{4VR%K1N5LXI%#De3ZK1h$0R?)YV0xdS zHkCGH;atEubrd^;kd$&0!9$0c0jIa^NC|67d)hOHWAr#o$w_^4v&m6QEKJpmgADd* z6-Q2ofHA3AW_tDsT+;S8_5pjdg<%pu zt0gLHxI!$WFJg9OQN3hBrzDuB<}{;(UwyK}!Dk8M3~>`jNhVMb#aM8owGlE|L~YTut9cc;-93p$yY64rmbKg@@L zWiLChI~iR9tNM$=?XCw#R%SDsp_fP+VOi4XMo`SM?$wJ*{nrtej&RAK(eP2eHAS$Z z9{_nO-#86q5st#mAxs$h;?TyA%;U%_adxT1aOHO%s*h)648Kx7IjI3!m1DZ`Hk@l& zQczFcB1t2YM{(a_^wA7@td=6aZx`3?^>;uJB4pqGJK<8xG}{^`G`}a^x}~lVnk0WN z>3SWelA3K+%KeS{cH!B{{PIyKRhNYGXghD%5VWr37%kb`yM;x(Bo_}=fh>egFr6Kb zsV1ucwiVynH-Pm8VN-`0?k4H$A$I*GG$Q{ns3qso1&~F0L~-1{oTK2GdriOSjESozBe*H6 zHVhD*@#gbTJr1GQbX@rpJ113$@*MRa3W#g1X7GwC!^-1?n(6>Z4ibs9t@4{?i^54z zBNhBoGHsRkgJ#}?hTgr15xw~@X9VP_{(?te-vqs)_YQgOz_R1kSaAm@>*NJ~GNgkCA#O#&c|~Gj4d4=t zcG-cxrkHJt1N`YXVz>9yr4E&$scRnWEn0|zwHSUH)oT+@B%{vr{0MgM5|g5f8m0k(+lhTUX3Wk6TKH%$bR{4ygwx*s2>a%Vr zunB=*wiJAeF1pITqImwf19md!qBTDRQsYXcuDc1Q(U#45%7rfk?K_g?`Yqx;5RN#< za&|SF-M4>t_g7|1mhE^qVB_+JniVUszfNb@4=Z@Kzb#PzjQb4@l08 zgWWFCVPwPrZpwEOuaB=K|KAr9Z%fEc{M6{km3uyG1hf%jUbgid4Z@c;I)+%Z)|)O7Hc(Q;M;c)6GVH9*Pt5jC?h= zah4&TDd;wmTq!!wO054d7&jaf39hP|@Z^y1OhgKOEUKeC5b8oc6@ci1UUk!Y{}%XP z)^(b-tos(udWu~=E5ttKZ!&Sk5($rb!zdcdU%K$Q=73*fgCiZFyYshV^!Xx*44+BTnGJrW<}HM_+E*Lh!@lqi~ax&q=eP&1B{_Eoy_A zSL;QuC5Elc!V7;Jd+tdBP!+^_y@svpn)}VWikLnfjP!Thb%j%Q&c5x;MSOty-2blp z@sUInifPgija}%4#1k=lJ53n><#v2tc=_Hp1^T|gkl>esC`m*4-5Y_p&ZyM^@~e5D zeo;$!Q*Cfw4oY@-fEm1uJGgW&~;0SAAdO>1%`8OSs3kiqFqvK)Qs+(%aqM zy&0d3-6^M9No^*^$&zsjcFtIqI>$Gwbx9&sQK zP^dLW96W0yI^`#Zo?dLSjn_`ZkZg5E#w~%d6^?ZSP>(^@SVCyy}NcO9i-&xEhVFTQg`-a#qw^#k@}Zmi}yi+UC04mg4tFoVr53iPFj; z@M>HAwI?~EG48-rzDw{uv*#3!_(Jj_HYM}xfG+7+I>oS?w^hpu`nbh;*7RxQ$WjbD zwb6@}Wr+2qpYlNSY)vwX31+9vrfWI#Yu>NxoUd954tVF<>`b4YKD)@8 z)R}b*DjKpMblAFmJx#2BToNgk=MF?$O$i;-vc@x5xon4?rC^9Gackg#W9M>7+`gyN zqAfgZ9HRd{sCuFsYj~`^B%*)rgBdbiPB4DB>zE0c0sD*E{DwX{F>I2D+jE?mcfTUw zz)>%$tu5O{HRCaXOD>-}2>Wh@2dcwXPR0p+ad-R0DukO2B@4i^D5Ez+;= zD|oF9%zPr;EA+oqXFt6PJ=BeU_1Vg3Ho9p=J=iYL;mlaOYV1yZ^+EDJcYNlf-TSQu zn*SCO`cE4!`Tspu`)R{}6pjCTrgr7?sfH`oa5md>`s#N!*3r4AuD&;IOG}sO21UR? z$Ex2qJ{jOTLl~`ZXd#*t9|e8(c~#5%?qxb8&VOKh)yZaV+EH0i`SWyER_2BkPn*=Q z*w(hJY*gw+ZX4sl51D2}F97gHEgFbfAwc7YPcaX*jTP`s2nu#44!=E#ePzkh(~jcB z{|#IEO^eV?96ks~{lFXfPy-*iuOq%l&JRwtgCyjN4kIa0p{V8l9Zu3mo;6qf;WOgz zxO?B@j~cMf;x|BqONB|Kj+Y%N98dFqIuuBX^i4r{lhOmipOrsz)Q=?k@`E z^O_HB!wpwR$uZlv535~}KDx7K%rnJupM+3JJGEd#7*&vaT(~yIA~m9gQ#k~?g?mHZ zMD@V~UcB#59wRsF71k-S&q9$nq`+k)@32^iOlL^YJ~;zMCDR2?hOT=zcT90>bT6{l zWS=d7qI4&-y2SJDC2~b{hOY#Q8^uEuD-_s*pM^l~#~Lfhr>x+3l-3?Ogw>}_!Wr3` zG2_=~$55;IKEz9xQg+e<*_sCv{$ny|O6x}8#Dh6VpZ+*_?VbQkJzHZ88%F>XxI@V8 z8`%YJ07cF(gYg~F75m_Tkt;J|kx~ogKp!T^pC;mCo^M>YD!!xqZF3nO-8%ZO`lj`z1(7YLwRLFby7G#yPTcC5&(e=TgC@j+ z?pjZvF>ae8o-i&ieF=6ulAZ%HM0e!&1OUQ%YJ{xB69g1M@aNut2t}|9L;>9QPhJ9;*?uU+q);6a;co|&V*oD2J0Z?es2QO%)PYZ& z-f=%Y4uk{W*;50i0CSMul|I;aWFpWK%q6(1To2=Q1Kw0wW5P>EKr(QLp2G*RAhvuH zA+`m`1Y4BgnM+)RHzNoti|9fA-YcUEf7szA%rF{^tmC@_GQ0q`Fx0{dWWV6L0E95X zzFk@vta(owN#1eZ#+>$vD=&7GM$WxC02!>C9hH1Y;59jDP&_NIJ}#H*7ZpM_^hsFc zC&-8-bM*!jHda7{h`xN78<2He2#@=w4`z-Sh&npZco;}iJr}AXpR6aaIL5OCZO!m4 z%rcxi1Nv(0_g~}|sGfz<#0T@KVa;u4c927R48(&w6`%&3@RAw{8?PV;_Dfx`x#ewV z`mnKpNMu$;U}3Nz;G8rO!2+l-H5$+LAx^jlP;0f^e2FXZiNOrhuA;O&m=Q5*}^axB8I#mNVPAXC=7o!@yCpl>353a6@0_!XM zo%>jtcs`e++zUB#unsz8Q5e8V`E9%N3wwbe>*mz+Sp1kG`p1{P3d|M~Y_}yfVa)9~ zW8wB+(=;q3v}d#y`+szo_@ZBO06=;1jO(ncP3<8%u;v5>0+}MraXY{V3d~5uHUfgeagmY&LZL+OI8fFM2NYD_ zG!O{hJ;3@FbDq5abT42CS0OfqpY1jC;6b`2qXl)5oNJoOowKIbBc+PR@Q`uzsQ{0o zzQyOB9pa4)6ZH#fnCf06u|SxrTGV{ z-(C7Jond+O{!;L|8eHOuDKg1gBsKC-+WLFb1#9ESp0_-@}?xl@gs$P)VvGbq0Keqkb-~OQ!j~QC4Lftp~_=1e-zWQB-Q6wF{xC;_iJUm_ZW-!CvJ_6?(r(HyxN40dOLLcd6$`VLT znD@wcx<&U-xv~f}{PHcV)pp-G=(MxnC$eQq&3IYH)3H!(YfmJx{bEI`_Oe@n1kaL| z@$o{_Ohr9K$vv!9bMu_G#-@$~%krhjs+Lw}F{=4>5d9aA{x`PR+gQmui&+D=X0+EN>Yr$`lRlr;2x~lCd&s=)6ZDtEhh{##A7h z#jM18ep)8O%ZBNP1$HS1Cp31}O?@NBnCHbo8y?KD(g!D6{#UT5SjgtjF3~sI^_Oye zgl)yPFN#Qx62m1RwJ9GwZH{bxScp_W5BmdbGJa z%1c%ms z5fqd9<~Ddn(h$<(n%igFi_RZ-Hs$fx>PJjrbV)|eGgMM4hjZ33Op{RFE z)oC>xZ-g1z@&>CE6|NAz`y0^V!IN}WAOPY%n1xcJ3#$kW?NP6*Ce@3Wg$h(&=MB|a zA&i_qMi`d5Jjn*7p#%~l1Yl?dOz*;U>~dpgZLK8Skb-}VU(5ahV}uROubA@hQ=uK8 zlIoxz1sC;lY~8$8#}Afib+pT?||feAvm zK7bFw0u??D+n9CIY&)ckVKFg6ML?VmH`~`$^w|eoG#&WVa>%~26l5Az zI}pZkk28i!c&c{<=TH)$+ydz-%bdHL$d&aH9Y0}s!LYQnl-%Z3Zj`bY@O7UGBNB8c z6|0}kxHpU_|N>-GDc{5sf@>^1>Tn=m{qfI zoprian}oPwRuoxVzy|`ZqYT$3UIkuT_3szU>)>WnWL+`VIe=g1Ut7+1D}z9#g%EIQ z(esQv*K(_BXkJfZSNnQ#e;B2)`%W`LqEwL7r7>#4lS0sYN+jf_2 z+qP}nHoI)ww(aTvoSV6yN61Z*FMDO}$VWj>FkyIRh>`nA7Oys_T#y1D5bvG9RjL?=pk2{VVNAT{1}eDVT~}ihP=> zy+%e$Cwd}oFu~gIRE(+Jbi0{}PH!lw=5u5cYuRc>6W`a=)R#`ok9B8fq<<5O8D&h2 zIWXT)!C5GSQz#_u$YyOim$(+@q8nlEetreiPl>-vwGSY?`-p#tm^h=uHx(+_@K(t> z^7LL}Uu<5)f1B?BDShlHe^><4fGj<7`jIKiDeUZ>4Cq=d#1g8$13^vU>PD0rPX*FC zR4(N_EuiZD3d-F&f=cj(c99ON1XdR56n%C}^nxT|!g@S7Pa#PjK;5w}VU%WcSxkBY z$727?P(%k8$`Rs1e7W}ba-yh{RCeV|etFigQGB3a{s(f81S-mP19prjJusn!H((+c z5;=j$XoV%F%VQvweGTsoJGZ& z0Zpfi%MpaUoR&YWbX^>@Yf1gHmR!bkGru!>MYqdolVXq#w5o2-*lRT4-lxZD z<~W|wn5fhuPMLyP)J3YYinIuOlrB8X)ubn08%~HvH+Ma0@8`*z(#^xD&rA3^=3blY z=U&HakLD>keF6`$kOBP_p54pls>j9$eRw@ILcyB)HwgB9ouPaTo=bQ59iqy~t*V53 zh-f{m!9xq9y{ZhUz=X#27Ylwq=q^p6X;U*gnh9Gin5Eg4*f%ETeVn+GMt9mO}! z4}ItCNpNI<;RkCyh*(Bf-oHNXR9#B4Zi&kSvw6*GWS&91PQY$I06}R%VxUK!aAX{z zEp0?Qe+8&Xq;y(u8jEQh}1Yu=mh_&6J7LXIGlEvPjzQt+3+1P^xTgLa`rq zn2*O(FWPf75D-*;Wvuo3EH%c{Kl4Qi;LXKNxrU3E%_GLjrDu@U1EEd1o7fSgU%9Eq zu)5xrXXL;gHmiB7Ms=Hm8ifXa1#}y`VWEBJJ;Y|y`@Y-W#ErDLC#Raf)xW@|>RhPIm@c-g9i^u~XKfFS-eC+@Vd<^yPjBQmL?+%<`;$_Sc@E2Ex14CyY#m{L?%)7(qTbM|A0( zq(-8*Sc)b}IfL`Od9hxMU&_={LF;(BHVmlp?G$iC&nc&z-V6z^@?9iDR9J;ea%8|G zRZgrUM;EopxanYJ->|5EiTvPm@VgDXQ1nz4HrAqnB2f?@xUO8hcC#aruj5#6rQldV zweR8PvYJf=V#J~erG83MM7;D0-VK?sgHrhKU|-en=*LXX2>p$Ea3-7iW3OUcM0QFK z(LIPC%5Tp@A$=x3_v1fvRxz^F#=W98BzK&29{+fCZA_Ekn$PN7Qf}Oe0pId|r5JIP zr)p3oofBJn`4l$H{RJPP){B;JTLx3{B4+^y@{2$EM3a+p2CxPohm$ul%`0qovZ_nP z9Pw<$H32;T4&-~An;@Sw&RhWnw(%fiSw$QaXURP}n_0lu!pyvI@IV&6LbkZR6nhLg zC#$Q+(rn&TY|(zXt;vWyYcDDI1f-xK)!Cs@tl<1eEH)4EI%{C%w24$74||%R;qBBh z$9qi&OeBzo4&5O|GeO!t##Es8$a_0fn0@aS8H~V{VMHT;LpwCc9LZ&5kd1 zM0RG?X=PV!@vZUcxclG4n?rpgzmRje9*Ofyz8qf>#~)_ThZ&u7csgi`qi*8qAWGx! z{R_OVdF%$M&}y!2jrjzpXuXhFZ4q+(dg{~Vaehm)nVZqB=maZx3+{>lQMHNnTEtGUjNck$~5?zkKYR@cg@@aU)4 zLP2-bv7|hz9b9&VT9ZV2J|r%=np)X|hV3pG;Xc9oj{SIZ6Neeh?t&U5oIY&eQvpb` zfA==#)d{4rwFyss)#kr6QT)Nc6Mh!gz?W*vsimr8JtIk%EL7mVk{z8a0?KFvBd*%?Tnl3D2Y7Ljz2DFG$ zs>MHi2DD*EdHiwg(S z?W->*!d!p5KOG$LG}tGR&?kD!B_PSj08(X$ny{_of>(ca3;zJ82Blq$E=aC@v^(4jLf1vB= z+vAfY7nS_%bEC@rQJ&C?$hIYc)of0*n=1fOR6FNseeILo_oz|AC^Mo|TXlqw}Ym&;mdVayI#bJdjgM63)i%yq#uQZG-O%gmju}_yHlVHa_t4dUrgPlK! zQG#p@VKGuw+Mm#wxT}0 z(S2Q!Ry?!(EV8q0*yHgD%6T_C%i=`2dFjn4pe6M=G@q&N9SD4!CMh?vA1V3_DGl;# zp4r#c7{Xz5al+4-wwgTfz{&Nx8Zgpi+PERQi5qT-j34wzK9z$#-LN>4lXKrEWzK0r zqUK)%k_05W>mxs4z$(Qjif*1Xk^$X`Pm5&*z{7-pN~0wE5aO;`nRoenx>9FK3uRhIm?T z)E7dp3qKn#PB^@)Sf=!We`IzH6F}P92zzp1dU%R0x{nDEnYDxt1vYexi)lB&dv}}U zmuJ}d`&`i*s^XI9=C&zYa1=us`THwEwqg`rdGG548WE=kK^29iNLdgERj9tcbhy2` zc@f<|xt(KFwyw0=z8)ytjpNbkps>$;mf~hI)2AHY{19QjeUIN?o>jm$3{YQ;Zp!O0 zt*%$#L1fD-sMJa%hXg9r9IN#gsr}Pi@61yPca}0kSrg1N`0%Sp#`as1$b@;8T$pmh zNA4ha9b*tMGnQJaia(qIGf5^v6(EfC08nL;XzD?_WtL$O4Xe1kjVQ~}tu|1jS8CBM z_M?!|tlRP@j^=th*D*Q^%U;K+$$jxD(3~JIjwBDeu%%LXj0EX(ExL2|<9Y|)>y!U_ z{e9=S0JT@;ifQDCspiZmTo_aL&p>kZllhTh+%KqXx7qHcO0+ z^{|iB2!HHgfX1Kq%IBhfB-E5PS2tH6_`s+dC>>dEW<)Lw^}gKY{^h#KKkc0lF575Y z1U$hh7*>VZF^i%f%TsE;s>>4_-{t{#2x^Aa5sqwfpuruFjhRbnZEmO08^KH9iq)zS z&15U<=CC_;md!3;UY9J*Na~!8nQN8U<}J21Y!O?pR(dH$-6f5ryjVgF3)>1S1C%Mn z+U%y(BQQSp{(Tf-KZQVFQJedH_K4Lf#O20|*AP4})you`8|Ze@4trkZR4Susb<6CVn z8RtpamFql&jk$!Abo7RIw&|YSWvA{q2c5Tv9kqIwuPO3nH~E&j)M9dZT2;`hO#n-@GBT&bX&QZk$>VFIBmO%I=RpFpP=IEGOQaNe@zW!3k4Q>%sS zd}ca?q=AXOi#QqL;Sy=vRg!Woi2vxj+4|>n-MG}ocW6G-WGXYtPs{uGkgBP~sNkec z=1FGrFhv(xq-||2bt?yoKaQcHpG(?rv4fNv^()c78d9C!gnt~Ef6UDHd?@|pVFYCV zlFnOZDSb~%Zlxj#oH+!g2U9UdQURsQb9!(6B+MTGiKY$gLMx((TFgD`ne|vt@Vl2b z%SxiYv$b=ye2?mDQ{Rx!YGj$RVMTc!2l%s+WC3{&{mS>E7{2HjTHKmkRRGxd zGO_#f!#}&Kw(;cUB5PMgEky|i$=B?FtOa}vG41CAmO+I;{J+yVhL|DmUf_ld(|=GS zJ+&b)*dPsGABJ-8F~w)UG~R(3&w2>vm_av%$|v{?DQ_fYB)dZ(NtBVrUxS zyRL9>O4;{4DI8-n*dXg2xvovazc|jnJ>;_p4}&h`bmW+c9H_|agk{nQV-bYvmLQsOlUO_kg9B8B41lUQGBeMfXabvTGsR#O zo+MURxZYiaF7VD!Re&+0*q{+ZH6U#OaSUKh78X&~u-thQboab5fI5i6P~Jn*L+a(< z_BFCm>Kkc)?o5A*dh4~R;~S&eLsJi?^DrF*sovUvKmK0;7*AmP_kWIPA%r;qEtxQ= z{9her9L)bq+X(CK@}Y51gL*s>rCB?SRL=PG8_P!~e;hGm5u~IwXhBHvp7C$NC zItDRXN7%IDu+pXXi%_|dM@CA+UQmO~R>GK{1DL0VoVyubS`E9s06EUo9e$l31m8T;S zc`9~q2Yx=GH(exG-}T%zM*It`T1>?Klv&{p*~wttA|YU($srh*0iFfh2ybKy%(IUv z3IKYl9w3!5eK^T>MCH&a%DqH9K>rl9qIr{ZUJkAR^alzYSlELB8C0ySt`n$;B4tnEXaB{ z70UVEzas+7J}tdI1S!RW%oVyV3!UkV>(}6S-Ihx z8Dfym_L&cSva=_w>g@{E{4kDX&YXzt*X&cmgmEw!7(Zi^Z)NxD%k%^&@Yyd3S9yio zMq65Lpaz&mnGMD{E_l$YIZMz9)9dn5_U!omHwVAFqVM3~*z|30z?&-@{9ZSF5H(W> zU>ei=h-hwaaP0W+ruNBDQlhI!uWzhW%2=6h7Rt z>E$r49(|cvPQFyd{44uQ!|w8W;I4$>nbMOu$4y)FejcRF)9XxrJJ**LgrBdv#&6TR zzVX3F8K*)!xw@!4_u^9>h7e@K?&233pH({?s0r=xwLy$xOq+l&gr5h1FT8VTyb%qT zZ06G`S$+DMXZ15XePx8Cuvb6{^DD@x>hO%axO!5Fko)8~Rk#A`@T0i)C9Oy+BhWm? z)1E&bS0oqzFk}5CuIQ-g$WwiFQ{0xtN`^PTeGN}J8$fLf8$~i_f2G@?0^F*NZqy&G z92HS1C!)h1kWZBI?x9XW+`TQz?&G9#kUXD0x!V8uS( zw303Ro2;3!K#e0Ws!@{t3e{^?5v)Ec%Ml-`B$t4A^5wueK*s1-B7%O~89dX@>(ZII zBQ$CO+P<07r4#)ENmo0=M6jDZzjr4PNpo}wR_x3S^Cs+h1p@tH!ufF6u&(4Y+Y#Pz zl;}N?COdlp^bj@;th)76&Njgy({LKvSRRh1Q&R*C?V4_O7EtG!x$hHn7F4$hlgH#xhWgtXmF;Ya2F#>R~CF-@lCIg;i z5ExJi3#Cw!axcWC{7$H6>0IG$w7y$bD`KCnyAqaLl16uSF}Iocr_l>>)LqQbEsyPe3@?9*XxhAjNe&uV!wIn3)3k~ULP3xBMniBt#RF8z^6K-&Hz25i@8>vj8sMyPl$+oGZ zIfNe*Y=~i|;#R~)y3t=l6T{BMBMk(HWM4ad0sc^M$%&!{>fd`%WD_n+IZ776&jY&R z`*sJmsIT;qIHf`P_G%&zUYeq8*2j4i5&{^I*+7~}S#FZ1b$v^qi7*nDPMHD`B?{vv zW2zVeVJY{OLrrkk#^v$~SkrbKae@&#IoE;LBlv|K;>q1(gpXe2OI`h_qDbWGp0+6? zz5)HG1gh#xQJ{eR^1|%DKBabV!^#nj7chtN(btG?!iHW3(nUw`0qZwZY*9QiSinex zHunHE9YT4T>dSw!_s${ewnE=7DemBN9!0uvpylKet&t?xSZaosn>^d0OxOID{EG~buakl#6uo zrBF6fra0|vGF#7Ss$F8{PgE*%I9m>R$dGb$>FX9%!hz{{S1Prw?5iT7(YK1_HWkLN z>Aq~0Icrvk`r?J|p$SW3Ooq>i@#oXf9ECuO{TjH$1P>FdNV2CDlVvehC+;Y-3#qSZ zRrS~&SL)aE$O$3G=g|jLmwAwJDEolBodmN0a39oLQv}J@WRBR ziHv&DT&vdKUPZanc-0CqtUJFGu66-*Uu&Y>Cv_NQA|73ee7d-|$WNAt5yG?jH5hSsh=5qUui%f$VW^WdbxvH>_5~zVIQ^5Ytht09 zcn7ZhB!WhuvXiEdCVTZ#p3B4apIFYk$zdVJ+&w^cOcJJ@EuO^jOa(MyOuWD3l$N<6 zSZ-Y$^iNl9c&W#NMGV}t9n!Pl=a>>HPRn~npS3GXxdRcQ&AvSpe&{-ZG^7?t1NhBF zfL2n#WDYTC8fm`XbaCYO)P=3+r#kvbOAc`I+RRwCyb{bv=EsVyW$%#$89v4HN9ZxJ zO=Ztxg+7vKnsmnZNhZgJgD?C0Kl`2TS>4hLlOpD>QX3>F4Z&q5#{7)^zoIZDO#&kC zj^mMu{KbW~fZ{7xvK*pygGVOgN24F6v{3YH9pvv1B9B5ky``m_h7~}sQ6o%pZE2Zk z3`hH!o_d1ts(pbw;av)iVBg;S*~@{R#?u1wI35yPXwr9!yHG5g3o;@tX_I636Y~qJ z#Joid((bJ49s|fPl`JW?MsECwqZ6_9pzrsjH$NQEA?6n5IslKvkgr{ds_@{B{{JG& zixi8w*HP1$9$PqKZlC0JX~xHJIMYvR96P|Mg&UQ4X;*-*s;i)h!v5V1v8q6i0;oz= z-43`^(OYsxijR-ZZci5XreUQ;k6G^rGFEWv7EgWaSOWqGU7Mf~yLB}+%?>oea0;X17>5aCxPGhB z)-jfoi=1xCrn}h4agS$j6kG2;jDUTQfZn@q0lYp-=s&ri`G10_=bh`;PTD40<=?nw zoKV_ItM_F9&qP?@TKD>?Gi|uALFJXF;oV(^>gAIx@n_mT{ba0WSRyBUX~6|4cdG+W815Csq$$*g zE62kuTuO7aD|EO}{)P9a`t7)-=&>a`?Pn|I`|bOgzjcxbClw7FV1uJQqB|-x(s+Hu7sU&96r) zCj|1M_m{lVY@wK-uCMoLe%a%GH3>8ARch5tEbXmBB{H3vB_>&uLH2!Cf-k|j(vK{l z`BFRAzuwWKNUFO_g^TC?I%r=~;e}$d~f2Kst-kMVzj_nqHB-PEb1O=9vAe z$mYPaN{nW{-k(qH-a=OP{CD21K#J?mu3}cp)-GW1(x;V9v*xioD;ZSg)yjqbQ_Z}p z3b$7sf#0?T6;qR-6odcNr_o}_X>`vMQwEl^a4z__28_dzE{Zbkp|8Qwo z=A@r7t6)PXH#hZe&CfqsOfJWbNHrW2Smu>S*T7teDH-`rQ+NPdUs@$$i40?HaKivi zd67;G&^^om4=`jv3i0&%O6O&v?V%CKE*9dRT0KXkIv*r~OdReOV5j%5w2){g?nxs9 zSvkOfvX2YhTV)z*n&gI*<->&KyF0JA(#F8cZ%pgU_&xzWdI>pEmMBY9g*kRNH*DBm zchDHWPVmc4lsmAhTBUj7{176$BpwPGb9sE?2|m3Z%eZ^T=w0cW>r$WvVz6;BdM(hT z+L`Kl-X&5pcEayPYrSsSU*f!-5#eTg?XaSocFAAVzjJVH4Y8y^XDP&1s#lIyE~|e) z9So8rX=($%TwgVl^(y<>MC@BDoQ)4C7NaonuP9$s0< zH>j1UFX)!Jo1E_x+&Fa;B~mHQmhrCr6I#=V^#L0ygt>NhDNVGz0fh;mv;X5E6k&}U z>W*ty7du1(CVR`3DgIdB_EjiLe>!?=lUgZ*STY83J7##riu=Pvzm%f3$emfqtnJ)y zER($~V#Y(W)gbJVomas_aYmXu+{4jS+c$nYJCcBr+`6XgG-t*nE$vBvjjHhqO}<0J zZ>_U{?CMBm5_PO@wcXYr%5I(@>p${9P;^M__;->GSdRq zYMMES64Lfl0M*5qBc;3_)Ib|*g%sI3$j5T!R41S}$_j&~&))E7`|A&D4#+1O8FOrk zrXFi0gRPnDm10GE2ZOcS^@=_hr&IPa9|#|eIQ8L;zRs1xQ(>>9&wl=Ry>0_6 zKl}@P-0%=$Pxu@oji1`2&~iw3MzqJ}dy;j=3_% zuSp!uKGi(4mZ~S2?$6iuKHZlM3x!*UHnXlSrHX482>d)%;k^$FPD~w?3kgdfQ95aB zU>f0)%n@o_d*YK>hf#d!9MY(87v&FLkV{ikJ#E5CgAc(sjf^cP2g~es@GfApSVaVt zRUl^%-QdX|TAzxqv`P0euha8nw8rp>m9|KIPQ(ii=!YBj4bc4O%7f3A$X7kp?%&U) z>Y>TQn-vMYM%bg6H`OeGxNOk(#_Qtk?@fV(3D!tmVNhvZ6_$HD)Z1Uh`yVSa3l~7V zFO4*Cdi2u)Z9;R)O~m2!A=$|sIi@|mGtdKp(Klj;4AXq|WP|~(6WY|!d+~b0x!}{e zl+Zhq!=f2Wne*)BntZnwze&MSo#PHPv2iDl$ERy#1ehav}Fvw7RBIwvvbcfu4pAEpDf0k@lO0iv2QVN8!