FreeCalypso > hg > freecalypso-tools
view target-utils/libcommon/uartsel.c @ 964:a96cb97b66a2
ringtools/imy: fix duplicate definition of tdma_durations[]
The bug was reported by Vadim Yanitskiy <fixeria@osmocom.org>,
although the present fix is slightly different from the contributed
patch: because main.c doesn't need this tdma_durations[] array
at all, let's simply remove the reference to this array from main.c
rather than turn it into an extern.
I no longer remember my original thought flow that resulted (by mistake)
in tdma_durations[] being multiply defined in main.c and durations.c.
My intent might have been to define all globals in main.c and have
the reference in durations.c be an extern - and I missed that extern -
but without clear memory, I have no certainty. In any case, having
this data array defined in the same module that fills it (durations.c)
is sensible, so let's make it the new way.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 31 Aug 2023 19:38:18 +0000 |
parents | 2942c5ef76ed |
children |
line wrap: on
line source
/* * uart_select_init() figures out which UART was used to load us * through the boot ROM, and sets things up for us to use the same * UART for our communication. */ #include "types.h" #include "romvars.h" #include "ns16550.h" #include "halt.h" extern struct ns16550_regs *uart_base; static u16 rom_version; static struct boot_rom_vars *rom_vars; static char *uart_name; uart_select_init() { rom_version = *(const u16 *)0x1FFE; switch (rom_version) { case 0x0200: rom_vars = (struct boot_rom_vars *) 0x800504; break; case 0x0300: rom_vars = (struct boot_rom_vars *) 0x800518; break; default: _exit(HALTCODE_BOOTROMVER); } switch (rom_vars->uart_id) { case 0: uart_base = (struct ns16550_regs *) 0xFFFF5800; uart_name = "MODEM"; break; case 1: uart_base = (struct ns16550_regs *) 0xFFFF5000; uart_name = "IrDA"; break; default: _exit(HALTCODE_INVALIDUART); } } print_boot_rom_info() { printf("Loaded via boot ROM v%04X, UART %d (%s) at baud rate #%d\n", rom_version, rom_vars->uart_id, uart_name, rom_vars->baud_rate_code); printf("CLKTCXO input autodetected to be %d MHz\n", rom_vars->clktcxo_13mhz ? 13 : 26); }