]> git.sesse.net Git - pistorm/blob - platforms/amiga/net/pi-net.c
The remainder of the initial PiStorm interaction stuff (I think)
[pistorm] / platforms / amiga / net / pi-net.c
1 // SPDX-License-Identifier: MIT
2
3 #include <stdio.h>
4 #include <stdint.h>
5 #include <fcntl.h>
6 #include <unistd.h>
7 #include <endian.h>
8 #include "pi-net.h"
9 #include "pi-net-enums.h"
10 #include "config_file/config_file.h"
11 #include "gpio/ps_protocol.h"
12
13 uint32_t pinet_u32[4];
14 static const char *op_type_names[4] = {
15     "BYTE",
16     "WORD",
17     "LONGWORD",
18     "MEM",
19 };
20
21 void pinet_init(char *dev) {
22     // Initialize them nets.
23     (void)dev;
24 }
25
26 void pinet_shutdown() {
27     // Aaahh!
28 }
29
30 uint8_t PI_MAC[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
31 uint8_t PI_IP[4] = { 192, 168, 1, 9 };
32
33 void handle_pinet_write(uint32_t addr, uint32_t val, uint8_t type) {
34 //    int32_t r;
35
36     switch (addr & 0xFFFF) {
37         case PINET_CMD_READ:
38             printf("[PI-NET] Read.\n");
39             break;
40         case PINET_CMD_WRITE:
41             printf("[PI-NET] Write.\n");
42             break;
43         case PINET_CMD_ADDR1:
44             pinet_u32[0] = val;
45             printf("[PI-NET] Write to ADDR1: %.8x\n", pinet_u32[0]);
46             break;
47         case PINET_CMD_ADDR2:
48             pinet_u32[1] = val;
49             printf("[PI-NET] Write to ADDR2: %.8x\n", pinet_u32[1]);
50             break;
51         case PINET_CMD_ADDR3:
52             pinet_u32[2] = val;
53             printf("[PI-NET] Write to ADDR3: %.8x\n", pinet_u32[2]);
54             break;
55         case PINET_CMD_ADDR4:
56             pinet_u32[3] = val;
57             printf("[PI-NET] Write to ADDR4: %.8x\n", pinet_u32[3]);
58             break;
59         default:
60             printf("[PI-NET] Unhandled %s register write to %.8X: %d\n", op_type_names[type], addr, val);
61             break;
62     }
63 }
64
65 uint32_t handle_pinet_read(uint32_t addr_, uint8_t type) {
66     uint32_t addr = addr_ & 0xFFFF;
67
68     if (addr >= PINET_CMD_MAC && addr < PINET_CMD_IP) {
69         printf("[PI-NET] Read from MAC: %.2X. (%.8X)\n", PI_MAC[addr - PINET_CMD_MAC], addr_);
70         return PI_MAC[addr - PINET_CMD_MAC];
71     }
72     if (addr >= PINET_CMD_IP && addr < PINET_CMD_BEEF) {
73         printf("[PI-NET] Read from IP: %.2X. (%.8X)\n", PI_IP[addr - PINET_CMD_IP], addr_);
74         return PI_IP[addr - PINET_CMD_IP];
75     }
76
77     switch (addr & 0xFFFF) {
78         default:
79             printf("[PI-NET] Unhandled %s register read from %.8X\n", op_type_names[type], addr);
80             break;
81     }
82
83     return 0;
84 }