Skip to content

Commit 34ea4f1

Browse files
authored
Merge pull request #1920 from NotExactlySiev/sio-pr
Add enums to the OpenBIOS SIO module and basic cleanup
2 parents 891fb37 + b8a9080 commit 34ea4f1

File tree

7 files changed

+144
-241
lines changed

7 files changed

+144
-241
lines changed

src/mips/common/hardware/hwregs.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,6 @@ SOFTWARE.
3030

3131
#include "common/hardware/counters.h"
3232

33-
struct SIO {
34-
uint8_t fifo;
35-
uint8_t preview[3];
36-
uint16_t stat;
37-
uint16_t padding;
38-
uint16_t mode;
39-
uint16_t ctrl;
40-
uint16_t reserved;
41-
uint16_t baudRate;
42-
};
43-
4433
#define HW_U8(x) (*(volatile uint8_t *)(x))
4534
#define HW_U16(x) (*(volatile uint16_t *)(x))
4635
#define HW_U32(x) (*(volatile uint32_t *)(x))
@@ -52,8 +41,6 @@ struct SIO {
5241
#define SBUS_DEV5_CTRL HW_U32(0x1f801018)
5342
#define SBUS_COM_CTRL HW_U32(0x1f801020)
5443

55-
#define SIOS ((volatile struct SIO *)0x1f801040)
56-
5744
#define RAM_SIZE HW_U32(0x1f801060)
5845

5946
#define IREG HW_U32(0xbf801070)

src/mips/common/hardware/sio.h

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
3+
MIT License
4+
5+
Copyright (c) 2020 PCSX-Redux authors
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in all
15+
copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23+
SOFTWARE.
24+
25+
*/
26+
27+
#pragma once
28+
29+
#include <stdint.h>
30+
#include "common/hardware/irq.h"
31+
32+
struct SIOPort {
33+
uint8_t fifo;
34+
uint8_t preview[3];
35+
uint16_t stat;
36+
uint16_t padding;
37+
uint16_t mode;
38+
uint16_t ctrl;
39+
uint16_t reserved;
40+
uint16_t baudRate;
41+
};
42+
43+
#define SIOS ((volatile struct SIOPort *)0x1f801040)
44+
45+
enum {
46+
SIO_CTRL_TXEN = (1 << 0), // Transmit Enable
47+
SIO_CTRL_DTR = (1 << 1), // Data Terminal Ready, aka Select (output)
48+
SIO_CTRL_RXE = (1 << 2), // Receive Enable
49+
SIO_CTRL_SBRK = (1 << 3), // Send Break character
50+
SIO_CTRL_ERRRES = (1 << 4), // Error Reset
51+
SIO_CTRL_RTS = (1 << 5), // Request to Send (output)
52+
SIO_CTRL_IR = (1 << 6), // Internal Reset, resets most SIO registers
53+
SIO_CTRL_RXIRQMODE = (1 << 8), // Receive IRQ Mode (0..3 = IRQ when RX FIFO contains 1,2,4,8 bytes)
54+
SIO_CTRL_TXIRQEN = (1 << 10), // Transmit IRQ Enable
55+
SIO_CTRL_RXIRQEN = (1 << 11), // Receive IRQ Enable
56+
SIO_CTRL_ACKIRQEN = (1 << 12), // Acknowledge IRQ Enable
57+
SIO_CTRL_PORTSEL = (1 << 13), // Port Select
58+
};
59+
60+
enum {
61+
SIO_STAT_TXRDY = (1 << 0), // TX buffer is empty
62+
SIO_STAT_RXRDY = (1 << 1), // RX buffer has data
63+
SIO_STAT_TXEMPTY = (1 << 2), // No data in TX buffer
64+
SIO_STAT_PE = (1 << 3), // Parity Error
65+
SIO_STAT_OE = (1 << 4), // Overrun Error
66+
SIO_STAT_FE = (1 << 5), // Framing Error
67+
SIO_STAT_SYNDET = (1 << 6), // Sync Detect
68+
SIO_STAT_ACK = (1 << 7), // ACK signal level (input)
69+
SIO_STAT_CTS = (1 << 8), // Clear to Send (output), unused on SIO0
70+
SIO_STAT_IRQ = (1 << 9), // Interrupt Request
71+
};
72+
73+
static inline uint8_t __attribute__((always_inline)) exchangeByte(uint8_t b) {
74+
uint8_t ret = SIOS[0].fifo; // may throw away
75+
SIOS[0].fifo = b;
76+
SIOS[0].ctrl |= SIO_CTRL_ERRRES;
77+
IREG = ~IRQ_CONTROLLER;
78+
return ret;
79+
}

src/mips/common/hardware/sio1.c

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/mips/common/hardware/sio1.h

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/mips/openbios/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ TARGET = openbios
55
TYPE = bin
66

77
SRCS = \
8-
../common/hardware/sio1.c \
98
../common/psxlibc/fastmemset.s \
109
boot/$(BOARD).s \
1110
card/backupunit.c \

0 commit comments

Comments
 (0)