PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
mx4sio.h
1#ifndef MX4SIO_H
2#define MX4SIO_H
3
4#include <stdint.h>
5
6/*
7 * Clock divider for 48MHz clock:
8 * 1 = 48 MHz - Invalid setting
9 * 2 = 24 MHz - Fastest usable speed
10 * 3 = 16 MHz
11 * 4 = 12 MHz
12 * 5 = 9.6MHz
13 * 6 = 6 MHz
14 * ...
15 * 0x78 = 400KHz - Initialization speed
16 */
17
18/* baud dividers */
19#define SIO2_BAUD_DIV_SLOW 0x78
20#define SIO2_BAUD_DIV_FAST 0x2
21
22/* SIO2 can only transfer 256 bytes at a time */
23#define SIO2_MAX_TRANSFER_SIZE 256
24
25/* interrupt event flags */
26#define EF_SIO2_INTR_REVERSE 0x00000100
27#define EF_SIO2_INTR_COMPLETE 0x00000200
28
29/* interrupt types */
30#define INTR_NONE 0x0
31#define INTR_RX 0x1
32#define INTR_TX 0x2
33
34/* mem slot 2 */
35#define PORT_NR 3
36
37// #define CONFIG_USE_CRC16
38
39typedef struct dma_command_t
40{
41 uint8_t *buffer;
42 uint16_t sector_count;
43 volatile uint16_t sectors_transferred;
44 uint16_t sectors_reversed;
45#ifdef CONFIG_USE_CRC16
46 uint16_t crc[512]; /*FIXME*/
47#endif
48 uint8_t response;
49 volatile uint8_t abort;
51
52/* globals */
53extern dma_command_t cmd;
54extern int sio2_event_flag;
55extern const uint8_t reverse_byte_LUT8[256];
56
57/* MX SIO2 functions */
58extern void mx_sio2_lock(uint8_t intr_type);
59extern void mx_sio2_unlock(uint8_t intr_type);
60extern void mx_sio2_set_baud(uint8_t baud);
61
62extern uint8_t mx_sio2_write_byte(uint8_t byte);
63extern uint8_t mx_sio2_write_dummy(void);
64
65extern void mx_sio2_rx_pio(uint8_t *buffer, uint32_t size); /* PIO only used for sending commands */
66extern void mx_sio2_tx_pio(uint8_t *buffer, uint32_t size);
67
68extern void mx_sio2_start_rx_dma(uint8_t *buffer); /* DMA used for all other transfers */
69extern void mx_sio2_start_tx_dma(uint8_t *buffer);
70
71extern uint8_t mx_sio2_wait_equal(uint8_t value, uint32_t count);
72extern uint8_t mx_sio2_wait_not_equal(uint8_t value, uint32_t count);
73extern uint8_t mx_sio2_wait_equal_masked(uint8_t value, uint8_t mask, uint32_t count);
74
75/* misc */
76extern void reverse_buffer(uint32_t *buffer, uint32_t count);
77
78#endif
u32 count
start sector of fragmented bd/file