1 |
|
/* |
2 |
|
* ether_amiga.cpp - Ethernet device driver, AmigaOS specific stuff |
3 |
|
* |
4 |
< |
* Basilisk II (C) 1997-1999 Christian Bauer |
4 |
> |
* Basilisk II (C) 1997-2000 Christian Bauer |
5 |
|
* |
6 |
|
* This program is free software; you can redistribute it and/or modify |
7 |
|
* it under the terms of the GNU General Public License as published by |
135 |
|
proc_error = false; |
136 |
|
SetSignal(0, SIGF_SINGLE); |
137 |
|
net_proc = CreateNewProcTags( |
138 |
< |
NP_Entry, net_func, |
139 |
< |
NP_Name, "Basilisk II Ethernet Task", |
138 |
> |
NP_Entry, (ULONG)net_func, |
139 |
> |
NP_Name, (ULONG)"Basilisk II Ethernet Task", |
140 |
|
NP_Priority, 1, |
141 |
|
TAG_END |
142 |
|
); |
287 |
|
* Copy received network packet to Mac side |
288 |
|
*/ |
289 |
|
|
290 |
< |
static __saveds __asm LONG copy_to_buff(register __a0 uint8 *to, register __a1 uint8 *from, register __d0 uint32 packet_len) |
290 |
> |
static __saveds __regargs LONG copy_to_buff(uint8 *to /*a0*/, uint8 *from /*a1*/, uint32 packet_len /*d0*/) |
291 |
|
{ |
292 |
|
D(bug("CopyToBuff to %08lx, from %08lx, size %08lx\n", to, from, packet_len)); |
293 |
|
|
313 |
|
* Copy data from Mac WDS to outgoing network packet |
314 |
|
*/ |
315 |
|
|
316 |
< |
static __saveds __asm LONG copy_from_buff(register __a0 uint8 *to, register __a1 uint32 wds, register __d0 uint32 packet_len) |
316 |
> |
static __saveds __regargs LONG copy_from_buff(uint8 *to /*a0*/, char *wds /*a1*/, uint32 packet_len /*d0*/) |
317 |
|
{ |
318 |
|
D(bug("CopyFromBuff to %08lx, wds %08lx, size %08lx\n", to, wds, packet_len)); |
319 |
|
#if MONITOR |
320 |
|
bug("Sending Ethernet packet:\n"); |
321 |
|
#endif |
322 |
|
for (;;) { |
323 |
< |
int len = ReadMacInt16(wds); |
323 |
> |
int len = ReadMacInt16((uint32)wds); |
324 |
|
if (len == 0) |
325 |
|
break; |
326 |
|
#if MONITOR |
327 |
< |
uint8 *adr = Mac2HostAddr(ReadMacInt32(wds + 2)); |
327 |
> |
uint8 *adr = Mac2HostAddr(ReadMacInt32((uint32)wds + 2)); |
328 |
|
for (int i=0; i<len; i++) { |
329 |
|
bug("%02lx ", adr[i]); |
330 |
|
} |
331 |
|
#endif |
332 |
< |
CopyMem(Mac2HostAddr(ReadMacInt32(wds + 2)), to, len); |
332 |
> |
CopyMem(Mac2HostAddr(ReadMacInt32((uint32)wds + 2)), to, len); |
333 |
|
to += len; |
334 |
|
wds += 6; |
335 |
|
} |
451 |
|
|
452 |
|
case MSG_ADD_MULTI: |
453 |
|
control_io->ios2_Req.io_Command = S2_ADDMULTICASTADDRESS; |
454 |
< |
memcpy(control_io->ios2_SrcAddr, Mac2HostAddr(msg->pointer + eMultiAddr), 6); |
454 |
> |
Mac2Host_memcpy(control_io->ios2_SrcAddr, msg->pointer + eMultiAddr, 6); |
455 |
|
DoIO((struct IORequest *)control_io); |
456 |
|
if (control_io->ios2_Req.io_Error == S2ERR_NOT_SUPPORTED) { |
457 |
|
WarningAlert(GetString(STR_NO_MULTICAST_WARN)); |
464 |
|
|
465 |
|
case MSG_DEL_MULTI: |
466 |
|
control_io->ios2_Req.io_Command = S2_DELMULTICASTADDRESS; |
467 |
< |
memcpy(control_io->ios2_SrcAddr, Mac2HostAddr(msg->pointer + eMultiAddr), 6); |
467 |
> |
Mac2Host_memcpy(control_io->ios2_SrcAddr, msg->pointer + eMultiAddr, 6); |
468 |
|
DoIO((struct IORequest *)control_io); |
469 |
|
if (control_io->ios2_Req.io_Error) |
470 |
|
msg->result = eMultiErr; |
550 |
|
|
551 |
|
// Get destination address, set source address |
552 |
|
uint32 hdr = ReadMacInt32(wds + 2); |
553 |
< |
memcpy(write_io->ios2_DstAddr, Mac2HostAddr(hdr), 6); |
554 |
< |
memcpy(Mac2HostAddr(hdr + 6), ether_addr, 6); |
553 |
> |
Mac2Host_memcpy(write_io->ios2_DstAddr, hdr, 6); |
554 |
> |
Host2Mac_memcpy(hdr + 6, ether_addr, 6); |
555 |
|
|
556 |
|
// Get packet type |
557 |
|
uint32 type = ReadMacInt16(hdr + 12); |
635 |
|
|
636 |
|
// Packet write done, enqueue DT to call IODone |
637 |
|
if (write_done) { |
638 |
< |
Enqueue(ether_data + ed_DeferredTask, 0xd92); |
638 |
> |
EnqueueMac(ether_data + ed_DeferredTask, 0xd92); |
639 |
|
write_done = false; |
640 |
|
} |
641 |
|
|
651 |
|
continue; |
652 |
|
|
653 |
|
// Copy header to RHA |
654 |
< |
memcpy(Mac2HostAddr(ether_data + ed_RHA), io->ios2_Data, 14); |
654 |
> |
Host2Mac_memcpy(ether_data + ed_RHA, io->ios2_Data, 14); |
655 |
|
D(bug(" header %08lx%04lx %08lx%04lx %04lx\n", ReadMacInt32(ether_data + ed_RHA), ReadMacInt16(ether_data + ed_RHA + 4), ReadMacInt32(ether_data + ed_RHA + 6), ReadMacInt16(ether_data + ed_RHA + 10), ReadMacInt16(ether_data + ed_RHA + 12))); |
656 |
|
|
657 |
|
// Call protocol handler |