Line 76... |
Line 76... |
|
|
return char_clks * bauds_per_char;
|
return char_clks * bauds_per_char;
|
}
|
}
|
|
|
/* Set a specific UART register with value. */
|
/* Set a specific UART register with value. */
|
void uart_write_byte(oraddr_t addr, uint32_t value)
|
void uart_write_byte(oraddr_t addr, uint32_t value, void *dat)
|
{
|
{
|
int chipsel;
|
int chipsel;
|
|
|
debug(4, "uart_write_byte(%"PRIxADDR",%02"PRIx32")\n", addr, value);
|
debug(4, "uart_write_byte(%"PRIxADDR",%02"PRIx32")\n", addr, value);
|
|
|
Line 151... |
Line 151... |
debug(1, "write out of range (addr %x)\n", addr);
|
debug(1, "write out of range (addr %x)\n", addr);
|
}
|
}
|
}
|
}
|
|
|
/* Read a specific UART register. */
|
/* Read a specific UART register. */
|
uint32_t uart_read_byte(oraddr_t addr)
|
uint32_t uart_read_byte(oraddr_t addr, void *dat)
|
{
|
{
|
uint8_t value = 0;
|
uint8_t value = 0;
|
int chipsel;
|
int chipsel;
|
|
|
debug(4, "uart_read_byte(%"PRIxADDR")", addr);
|
debug(4, "uart_read_byte(%"PRIxADDR")", addr);
|
Line 588... |
Line 588... |
if ((config.uarts[i].vapi_id & VAPI_DEVICE_ID) != i) {
|
if ((config.uarts[i].vapi_id & VAPI_DEVICE_ID) != i) {
|
fprintf (stderr, "ERROR: Wrong vapi_id (0x%lx) for uart %i, last byte is required to be %02x; ignoring.\n", config.uarts[i].vapi_id, i, i);
|
fprintf (stderr, "ERROR: Wrong vapi_id (0x%lx) for uart %i, last byte is required to be %02x; ignoring.\n", config.uarts[i].vapi_id, i, i);
|
config.uarts[i].vapi_id = 0;
|
config.uarts[i].vapi_id = 0;
|
} else {
|
} else {
|
vapi_install_handler (config.uarts[i].vapi_id, uart_vapi_read);
|
vapi_install_handler (config.uarts[i].vapi_id, uart_vapi_read);
|
register_memoryarea(config.uarts[i].baseaddr, UART_ADDR_SPACE, 1, 0, uart_read_byte, uart_write_byte);
|
register_memoryarea(config.uarts[i].baseaddr, UART_ADDR_SPACE, 1, 0, uart_read_byte, uart_write_byte, NULL);
|
}
|
}
|
} else if (config.uarts[i].channel[0]) { /* MM: Try to create stream. */
|
} else if (config.uarts[i].channel[0]) { /* MM: Try to create stream. */
|
if(channels[i])
|
if(channels[i])
|
channel_close(channels[i]);
|
channel_close(channels[i]);
|
else
|
else
|
Line 601... |
Line 601... |
debug (0, "WARNING: UART%d has problems with channel \"%s\".\n", i, config.uarts[i].channel);
|
debug (0, "WARNING: UART%d has problems with channel \"%s\".\n", i, config.uarts[i].channel);
|
continue;
|
continue;
|
}
|
}
|
if (config.sim.verbose)
|
if (config.sim.verbose)
|
PRINTF("UART%d at 0x%.8lx uses ", i, config.uarts[i].baseaddr);
|
PRINTF("UART%d at 0x%.8lx uses ", i, config.uarts[i].baseaddr);
|
register_memoryarea(config.uarts[i].baseaddr, UART_ADDR_SPACE, 1, 0, uart_read_byte, uart_write_byte);
|
register_memoryarea(config.uarts[i].baseaddr, UART_ADDR_SPACE, 1, 0, uart_read_byte, uart_write_byte, NULL);
|
} else {
|
} else {
|
debug (0, "WARNING: UART%d has no vapi nor channel specified\n", i);
|
debug (0, "WARNING: UART%d has no vapi nor channel specified\n", i);
|
continue;
|
continue;
|
}
|
}
|
|
|