]> git.sesse.net Git - pistorm/blob - platforms/amiga/net/pi-net.c
b206438e4618a089dabcd6691001e948bf44e043
[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/gpio.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 }
22
23 uint8_t PI_MAC[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
24 uint8_t PI_IP[4] = { 192, 168, 1, 9 };
25
26 void handle_pinet_write(uint32_t addr, uint32_t val, uint8_t type) {
27     int32_t r;
28
29     switch (addr & 0xFFFF) {
30         case PINET_CMD_READ:
31             printf("[PI-NET] Read.\n");
32             break;
33         case PINET_CMD_WRITE:
34             printf("[PI-NET] Write.\n");
35             break;
36         case PINET_CMD_ADDR1:
37             pinet_u32[0] = val;
38             printf("[PI-NET] Write to ADDR1: %.8x\n", pinet_u32[0]);
39             break;
40         case PINET_CMD_ADDR2:
41             pinet_u32[1] = val;
42             printf("[PI-NET] Write to ADDR2: %.8x\n", pinet_u32[1]);
43             break;
44         case PINET_CMD_ADDR3:
45             pinet_u32[2] = val;
46             printf("[PI-NET] Write to ADDR3: %.8x\n", pinet_u32[2]);
47             break;
48         case PINET_CMD_ADDR4:
49             pinet_u32[3] = val;
50             printf("[PI-NET] Write to ADDR4: %.8x\n", pinet_u32[3]);
51             break;
52         default:
53             printf("[PI-NET] Unhandled %s register write to %.8X: %d\n", op_type_names[type], addr, val);
54             break;
55     }
56 }
57
58 uint32_t handle_pinet_read(uint32_t addr_, uint8_t type) {
59     uint32_t addr = addr_ & 0xFFFF;
60
61     if (addr >= PINET_CMD_MAC && addr < PINET_CMD_IP) {
62         printf("[PI-NET] Read from MAC: %.2X. (%.8X)\n", PI_MAC[addr - PINET_CMD_MAC], addr_);
63         return PI_MAC[addr - PINET_CMD_MAC];
64     }
65     if (addr >= PINET_CMD_IP && addr < PINET_CMD_BEEF) {
66         printf("[PI-NET] Read from IP: %.2X. (%.8X)\n", PI_IP[addr - PINET_CMD_IP], addr_);
67         return PI_IP[addr - PINET_CMD_IP];
68     }
69
70     switch (addr & 0xFFFF) {
71         default:
72             printf("[PI-NET] Unhandled %s register read from %.8X\n", op_type_names[type], addr);
73             break;
74     }
75
76     return 0;
77 }