Move some HPS_IO commands from FPGA for UIO channel.

This commit is contained in:
sorgelig
2020-04-19 03:38:49 +08:00
parent 4e96473a1a
commit f167fbde1c
2 changed files with 37 additions and 37 deletions

View File

@@ -73,49 +73,49 @@ void tos_set_cdc_control_redirect(char mode)
}
*/
static void mist_set_control(uint32_t ctrl)
static void set_control(uint32_t ctrl)
{
spi_uio_cmd_cont(UIO_SET_STATUS2);
spi32w(ctrl);
DisableIO();
}
static void mist_memory_read(unsigned char *data, unsigned long words)
static void memory_read(unsigned char *data, unsigned long words)
{
EnableFpga();
EnableIO();
spi8(ST_READ_MEMORY);
// transmitted bytes must be multiple of 2 (-> words)
uint16_t *buf = (uint16_t*)data;
while (words--) *buf++ = spi_w(0);
DisableFpga();
DisableIO();
}
static void mist_memory_write(unsigned char *data, unsigned long words)
static void memory_write(unsigned char *data, unsigned long words)
{
EnableFpga();
EnableIO();
spi8(ST_WRITE_MEMORY);
uint16_t *buf = (uint16_t*)data;
while (words--) spi_w(*buf++);
DisableFpga();
DisableIO();
}
static void dma_ack(unsigned char status)
{
EnableFpga();
EnableIO();
spi8(ST_ACK_DMA);
spi8(status);
DisableFpga();
DisableIO();
}
static void dma_nak(void)
{
EnableFpga();
EnableIO();
spi8(ST_NAK_DMA);
DisableFpga();
DisableIO();
}
static void handle_acsi(unsigned char *buffer)
@@ -154,7 +154,7 @@ static void handle_acsi(unsigned char *buffer)
dma_buffer[3] = (blocks - 1) >> 0;
dma_buffer[6] = 2; // 512 bytes per block
mist_memory_write(dma_buffer, 4);
memory_write(dma_buffer, 4);
dma_ack(0x00);
asc[target] = 0x00;
@@ -187,7 +187,7 @@ static void handle_acsi(unsigned char *buffer)
dma_buffer[2] = 0x05;
dma_buffer[12] = asc[target];
}
mist_memory_write(dma_buffer, 9); // 18 bytes
memory_write(dma_buffer, 9); // 18 bytes
dma_ack(0x00);
asc[target] = 0x00;
break;
@@ -220,7 +220,7 @@ static void handle_acsi(unsigned char *buffer)
len *= 512;
FileReadAdv(&hdd_image[target], buf, len);
mist_memory_write(buf, len / 2);
memory_write(buf, len / 2);
}
DISKLED_OFF;
@@ -269,7 +269,7 @@ static void handle_acsi(unsigned char *buffer)
length -= len;
len *= 512;
mist_memory_read(buf, len / 2);
memory_read(buf, len / 2);
FileWriteAdv(&hdd_image[target], buf, len);
}
DISKLED_OFF;
@@ -300,7 +300,7 @@ static void handle_acsi(unsigned char *buffer)
memcpy(dma_buffer + 32, "ATH ", 4); // Product revision
memcpy(dma_buffer + 36, VDATE " ", 8); // Serial number
if (device != 0) dma_buffer[0] = 0x7f;
mist_memory_write(dma_buffer, length / 2);
memory_write(dma_buffer, length / 2);
dma_ack(0x00);
asc[target] = 0x00;
break;
@@ -314,7 +314,7 @@ static void handle_acsi(unsigned char *buffer)
dma_buffer[6] = blocks >> 8;
dma_buffer[7] = blocks;
dma_buffer[10] = 2; // byte 1 of block size in bytes (512)
mist_memory_write(dma_buffer, length / 2);
memory_write(dma_buffer, length / 2);
dma_ack(0x00);
asc[target] = 0x00;
}
@@ -349,14 +349,14 @@ static void handle_acsi(unsigned char *buffer)
}
}
static void mist_get_dmastate()
static void get_dmastate()
{
unsigned char buffer[16];
EnableFpga();
EnableIO();
spi8(ST_GET_DMASTATE);
spi_read(buffer, 16, 0);
DisableFpga();
DisableIO();
if (buffer[10] & 0x01) handle_acsi(buffer);
}
@@ -369,10 +369,10 @@ static void fill_tx(unsigned char fill, unsigned int len, unsigned char index)
uint16_t wfill = (fill << 8) | fill;
len /= 2;
EnableFpga();
EnableIO();
spi8(UIO_FILE_TX_DAT);
while(len--) spi_w(wfill);
DisableFpga();
DisableIO();
user_io_set_download(0);
}
@@ -404,7 +404,7 @@ void tos_poll()
{
static unsigned long timer = 0;
mist_get_dmastate();
get_dmastate();
// check the user button
if (!user_io_osd_is_visible() && user_io_user_button())
@@ -428,7 +428,7 @@ void tos_poll()
void tos_update_sysctrl(unsigned long n)
{
config.system_ctrl = n;
mist_set_control(config.system_ctrl);
set_control(config.system_ctrl);
}
const char *tos_get_disk_name(int index)
@@ -487,7 +487,7 @@ static void tos_select_hdd_image(int i, const char *name)
}
// update system control
mist_set_control(config.system_ctrl);
set_control(config.system_ctrl);
}
void tos_insert_disk(int index, const char *name)

View File

@@ -65,50 +65,50 @@ static x86_config config;
static uint8_t dma_sdio(int status)
{
uint8_t res;
EnableFpga();
EnableIO();
spi8(UIO_DMA_SDIO);
res = spi_w((uint16_t)status);
DisableFpga();
DisableIO();
return res;
}
/*
static uint32_t dma_get(uint32_t address)
{
EnableFpga();
EnableIO();
spi8(UIO_DMA_READ);
spi32w(address);
uint32_t res = spi32w(0);
DisableFpga();
DisableIO();
return res;
}
*/
static void dma_set(uint32_t address, uint32_t data)
{
EnableFpga();
EnableIO();
spi8(UIO_DMA_WRITE);
spi32w(address);
spi32w(data);
DisableFpga();
DisableIO();
}
static void dma_sendbuf(uint32_t address, uint32_t length, uint32_t *data)
{
EnableFpga();
EnableIO();
spi8(UIO_DMA_WRITE);
spi32w(address);
while (length--) spi32w(*data++);
DisableFpga();
DisableIO();
}
static void dma_rcvbuf(uint32_t address, uint32_t length, uint32_t *data)
{
EnableFpga();
EnableIO();
spi8(UIO_DMA_READ);
spi32w(address);
while (length--) *data++ = spi32w(0);
DisableFpga();
DisableIO();
}
static int load_bios(const char* name, uint8_t index)
@@ -121,7 +121,7 @@ static int load_bios(const char* name, uint8_t index)
unsigned long bytes2send = f.size;
printf("BIOS %s, %lu bytes.\n", name, bytes2send);
EnableFpga();
EnableIO();
spi8(UIO_DMA_WRITE);
spi32w( index ? 0x80C0000 : 0x80F0000 );
@@ -138,7 +138,7 @@ static int load_bios(const char* name, uint8_t index)
uint32_t* p = buf;
while(chunk--) spi32w(*p++);
}
DisableFpga();
DisableIO();
FileClose(&f);
printf("\n");