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