PS2SDK
PS2 Homebrew Libraries
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 
39 typedef 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 */
53 extern dma_command_t cmd;
54 extern int sio2_event_flag;
55 extern const uint8_t reverse_byte_LUT8[256];
56 
57 /* MX SIO2 functions */
58 extern void mx_sio2_lock(uint8_t intr_type);
59 extern void mx_sio2_unlock(uint8_t intr_type);
60 extern void mx_sio2_set_baud(uint8_t baud);
61 
62 extern uint8_t mx_sio2_write_byte(uint8_t byte);
63 extern uint8_t mx_sio2_write_dummy(void);
64 
65 extern void mx_sio2_rx_pio(uint8_t *buffer, uint32_t size); /* PIO only used for sending commands */
66 extern void mx_sio2_tx_pio(uint8_t *buffer, uint32_t size);
67 
68 extern void mx_sio2_start_rx_dma(uint8_t *buffer); /* DMA used for all other transfers */
69 extern void mx_sio2_start_tx_dma(uint8_t *buffer);
70 
71 extern uint8_t mx_sio2_wait_equal(uint8_t value, uint32_t count);
72 extern uint8_t mx_sio2_wait_not_equal(uint8_t value, uint32_t count);
73 extern uint8_t mx_sio2_wait_equal_masked(uint8_t value, uint8_t mask, uint32_t count);
74 
75 /* misc */
76 extern void reverse_buffer(uint32_t *buffer, uint32_t count);
77 
78 #endif
count
u32 count
start sector of fragmented bd/file
Definition: usbhdfsd-common.h:3
dma_command_t
Definition: mx4sio.h:39