From 0a282504782429c2808be9265ed4a9331848e685 Mon Sep 17 00:00:00 2001 From: neil Date: Sun, 9 Oct 2011 13:34:10 +0000 Subject: [PATCH] - Fixes to OS wrappers to allow extra mask parameter for PCCard status interrupts. - Autodoc improvements. git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@41794 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- workbench/devs/networks/etherlink3/Makefile.OS4 | 6 ++- workbench/devs/networks/etherlink3/aros_device.c | 14 +++--- workbench/devs/networks/etherlink3/device.h | 9 ++-- workbench/devs/networks/etherlink3/expansion.c | 10 ++--- workbench/devs/networks/etherlink3/initializers.h | 2 +- workbench/devs/networks/etherlink3/isa.c | 7 ++- workbench/devs/networks/etherlink3/openpci.c | 10 ++--- workbench/devs/networks/etherlink3/os4_device.c | 8 ++-- workbench/devs/networks/etherlink3/pccard.c | 24 +++++----- workbench/devs/networks/etherlink3/pci.c | 16 +++---- workbench/devs/networks/etherlink3/powerpci.c | 10 ++--- workbench/devs/networks/etherlink3/prometheus.c | 10 ++--- workbench/devs/networks/etherlink3/request.c | 2 +- workbench/devs/networks/etherlink3/startup.c | 13 ++++-- workbench/devs/networks/etherlink3/unit.c | 55 ++++++++++++----------- 15 files changed, 103 insertions(+), 93 deletions(-) diff --git a/workbench/devs/networks/etherlink3/Makefile.OS4 b/workbench/devs/networks/etherlink3/Makefile.OS4 index e00de8e63a..6d1cc45fc0 100644 --- a/workbench/devs/networks/etherlink3/Makefile.OS4 +++ b/workbench/devs/networks/etherlink3/Makefile.OS4 @@ -1,8 +1,10 @@ -CFLAGS = -O3 -Wall -Wno-uninitialized -Wno-parentheses -D__USE_INLINE__ -D__USE_BASETYPE__ -D__NOLIBBASE__ -D__NOGLOBALIFACE__ +CFLAGS = -O3 -Wall -Wno-uninitialized -Wno-parentheses \ + -D__USE_INLINE__ -D__USE_BASETYPE__ -D__NOLIBBASE__ \ + -D__NOGLOBALIFACE__ CC = gcc $(CFLAGS) MAKEFILE = Makefile.OS4 #LINKER = ld -e Main -s -lauto -LINKER = gcc +LINKER = gcc -nostdlib #AMIGA_LIB = -lamiga #C_LIB = -lauto diff --git a/workbench/devs/networks/etherlink3/aros_device.c b/workbench/devs/networks/etherlink3/aros_device.c index 993cdbf431..f71b479a18 100644 --- a/workbench/devs/networks/etherlink3/aros_device.c +++ b/workbench/devs/networks/etherlink3/aros_device.c @@ -58,9 +58,10 @@ AROS_LD1(VOID, AROSDevAbortIO, static BOOL RXFunction(struct IOSana2Req *request, APTR buffer, ULONG size); static BOOL TXFunction(APTR buffer, struct IOSana2Req *request, ULONG size); static UBYTE *DMATXFunction(struct IOSana2Req *request); -AROS_UFP2(BOOL, AROSInt, +AROS_UFP3(BOOL, AROSInt, AROS_UFPA(APTR *, int_data, A1), - AROS_UFPA(APTR, this_code, A5)); + AROS_UFPA(APTR, this_code, A5), + AROS_UFPA(UBYTE, mask, D0)); extern const APTR init_data; extern const struct Resident rom_tag; @@ -389,16 +390,17 @@ static UBYTE *DMATXFunction(struct IOSana2Req *request) * */ -AROS_UFH2(BOOL, AROSInt, +AROS_UFH3(BOOL, AROSInt, AROS_UFHA(APTR *, int_data, A1), - AROS_UFHA(APTR, this_code, A5)) + AROS_UFHA(APTR, this_code, A5), + AROS_UFHA(UBYTE, mask, D0)) { AROS_USERFUNC_INIT - BOOL (*int_code)(APTR, APTR); + BOOL (*int_code)(APTR, APTR, UBYTE); int_code = int_data[0]; - return int_code(int_data[1], int_code); + return int_code(int_data[1], int_code, mask); AROS_USERFUNC_EXIT } diff --git a/workbench/devs/networks/etherlink3/device.h b/workbench/devs/networks/etherlink3/device.h index 0913329adb..97b19989a7 100644 --- a/workbench/devs/networks/etherlink3/device.h +++ b/workbench/devs/networks/etherlink3/device.h @@ -34,9 +34,9 @@ MA 02111-1307, USA. #include "io.h" #define DEVICE_NAME "etherlink3.device" -#define VERSION 0 -#define REVISION 9 -#define DATE "5.7.2008" +#define VERSION 1 +#define REVISION 1 +#define DATE "9.10.2011" #define UTILITY_VERSION 39 #define PROMETHEUS_VERSION 2 @@ -275,9 +275,6 @@ struct AddressRange /* Library and device bases */ -/* FIXME: Remove these #define xxxBase hacks - Do not use this in new code ! -*/ #define SysBase (base->sys_base) #define CardResource (base->card_base) #define UtilityBase (base->utility_base) diff --git a/workbench/devs/networks/etherlink3/expansion.c b/workbench/devs/networks/etherlink3/expansion.c index d7ec5d2b22..d90c23ec9b 100644 --- a/workbench/devs/networks/etherlink3/expansion.c +++ b/workbench/devs/networks/etherlink3/expansion.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2004,2005 Neil Cafferkey +Copyright (C) 2004-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -226,9 +226,9 @@ VOID FreeExpansionCard(struct BusContext *context, struct DevBase *base) * AddExpansionIntServer * * SYNOPSIS -* context = AddExpansionIntServer(index) +* success = AddExpansionIntServer(card, interrupt) * -* struct BusContext *AddExpansionIntServer(ULONG); +* BOOL AddExpansionIntServer(APTR, struct Interrupt *); * **************************************************************************** * @@ -249,9 +249,9 @@ BOOL AddExpansionIntServer(APTR card, struct Interrupt *interrupt, * RemExpansionIntServer * * SYNOPSIS -* RemExpansionIntServer() +* RemExpansionIntServer(card, interrupt) * -* VOID RemExpansionIntServer(ULONG); +* VOID RemExpansionIntServer(APTR, struct Interrupt *); * **************************************************************************** * diff --git a/workbench/devs/networks/etherlink3/initializers.h b/workbench/devs/networks/etherlink3/initializers.h index 251340e79a..e7fbcae43f 100644 --- a/workbench/devs/networks/etherlink3/initializers.h +++ b/workbench/devs/networks/etherlink3/initializers.h @@ -34,7 +34,7 @@ MA 02111-1307, USA. #endif */ #define OFFSET(struct_name, struct_field) \ - ((IPTR)(&(((struct struct_name *)0)->struct_field))) + ((UPINT)(&(((struct struct_name *)0)->struct_field))) /* Use the following macros in the structure definition */ diff --git a/workbench/devs/networks/etherlink3/isa.c b/workbench/devs/networks/etherlink3/isa.c index 7dc6c1a45f..d9c9f7efa7 100644 --- a/workbench/devs/networks/etherlink3/isa.c +++ b/workbench/devs/networks/etherlink3/isa.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2000-2006 Neil Cafferkey +Copyright (C) 2000-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -394,6 +394,11 @@ static struct BusContext *AllocCard(ULONG index, struct DevBase *base) * NAME * FreeCard -- Release a card * +* SYNOPSIS +* FreeCard(context) +* +* VOID FreeCard(struct BusContext *); +* **************************************************************************** * */ diff --git a/workbench/devs/networks/etherlink3/openpci.c b/workbench/devs/networks/etherlink3/openpci.c index bbbfd5a528..4001656ce3 100755 --- a/workbench/devs/networks/etherlink3/openpci.c +++ b/workbench/devs/networks/etherlink3/openpci.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2004-2008 Neil Cafferkey +Copyright (C) 2004-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -167,9 +167,9 @@ VOID FreeOpenPCICard(struct BusContext *context, struct DevBase *base) * AddOpenPCIIntServer * * SYNOPSIS -* context = AddOpenPCIIntServer(index) +* success = AddOpenPCIIntServer(card, interrupt) * -* struct BusContext *AddOpenPCIIntServer(ULONG); +* BOOL AddOpenPCIIntServer(APTR, struct Interrupt *); * **************************************************************************** * @@ -189,9 +189,9 @@ BOOL AddOpenPCIIntServer(APTR card, struct Interrupt *interrupt, * RemOpenPCIIntServer * * SYNOPSIS -* RemOpenPCIIntServer() +* RemOpenPCIIntServer(card, interrupt) * -* VOID RemOpenPCIIntServer(ULONG); +* VOID RemOpenPCIIntServer(APTR, struct Interrupt *); * **************************************************************************** * diff --git a/workbench/devs/networks/etherlink3/os4_device.c b/workbench/devs/networks/etherlink3/os4_device.c index cbb10f3bb4..437bf891a3 100644 --- a/workbench/devs/networks/etherlink3/os4_device.c +++ b/workbench/devs/networks/etherlink3/os4_device.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2000-2008 Neil Cafferkey +Copyright (C) 2000-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -439,8 +439,6 @@ static VOID OS4DevBeginIO(struct Interface *self, * **************************************************************************** * -* Disable() used instead of a semaphore because device uses interrupts. -* */ static VOID OS4DevAbortIO(struct Interface *self, @@ -589,10 +587,10 @@ static UBYTE *DMATXFunction(struct IOSana2Req *request) static ULONG OS4Int(struct ExceptionContext ex_context, struct ExecBase *sys_base, APTR *int_data) { - BOOL (*int_code)(APTR, APTR); + BOOL (*int_code)(APTR, APTR, UBYTE); int_code = int_data[0]; - return int_code(int_data[1], int_code); + return int_code(int_data[1], int_code, 0x4); } diff --git a/workbench/devs/networks/etherlink3/pccard.c b/workbench/devs/networks/etherlink3/pccard.c index 4a32b8fddb..f9a5787478 100644 --- a/workbench/devs/networks/etherlink3/pccard.c +++ b/workbench/devs/networks/etherlink3/pccard.c @@ -72,8 +72,8 @@ static VOID CardRemovedInt(REG(a1, struct BusContext *context), REG(a6, APTR int_code)); static VOID CardInsertedInt(REG(a1, struct BusContext *context), REG(a6, APTR int_code)); -static UBYTE CardStatusInt(REG(d0, UBYTE mask), - REG(a1, struct BusContext *context), REG(a6, APTR int_code)); +static UBYTE CardStatusInt(REG(a1, struct BusContext *context), + REG(a6, APTR int_code), REG(d0, UBYTE mask)); static UBYTE ByteInHook(struct BusContext *context, ULONG offset); static ULONG LongInHook(struct BusContext *context, ULONG offset); static VOID ByteOutHook(struct BusContext *context, ULONG offset, @@ -162,6 +162,7 @@ ULONG GetPCCardCount(struct DevBase *base) } + /****i* etherlink3.device/GetPCCardUnit ************************************ * * NAME @@ -200,7 +201,7 @@ struct DevUnit *GetPCCardUnit(ULONG index, struct DevBase *base) * FindPCCardUnit -- Find a unit by number. * * SYNOPSIS -* unit = FindPCCardUnit(unit_num) +* unit = FindPCCardUnit(index) * * struct DevUnit *FindPCCardUnit(ULONG); * @@ -333,6 +334,7 @@ VOID DeletePCCardUnit(struct DevUnit *unit, struct DevBase *base) UnwrapInt(&unit->status_int, base); context = unit->card; DeleteUnit(unit, base); + context->unit = NULL; FreeCard(context, base); } @@ -719,9 +721,9 @@ static BOOL CardInsertedHook(struct BusContext *context, * CardRemovedInt * * SYNOPSIS -* CardRemovedInt(unit) +* CardRemovedInt(context, int_code) * -* VOID CardRemovedInt(struct DevUnit *); +* VOID CardRemovedInt(struct BusContext *, APTR); * **************************************************************************** * @@ -758,9 +760,9 @@ static VOID CardRemovedInt(REG(a1, struct BusContext *context), * CardInsertedInt * * SYNOPSIS -* CardInsertedInt(unit) +* CardInsertedInt(context, int_code) * -* VOID CardInsertedInt(struct DevUnit *); +* VOID CardInsertedInt(struct BusContext *, APTR); * **************************************************************************** * @@ -788,9 +790,9 @@ static VOID CardInsertedInt(REG(a1, struct BusContext *context), * CardStatusInt * * SYNOPSIS -* mask = CardStatusInt(mask, unit) +* mask = CardStatusInt(context, int_code, mask) * -* UBYTE CardStatusInt(UBYTE mask, struct DevUnit *); +* UBYTE CardStatusInt(struct BusContext *, APTR, UBYTE); * **************************************************************************** * @@ -799,8 +801,8 @@ static VOID CardInsertedInt(REG(a1, struct BusContext *context), * */ -static UBYTE CardStatusInt(REG(d0, UBYTE mask), - REG(a1, struct BusContext *context), REG(a6, APTR int_code)) +static UBYTE CardStatusInt(REG(a1, struct BusContext *context), + REG(a6, APTR int_code), REG(d0, UBYTE mask)) { if(context->resource_version < 39) { diff --git a/workbench/devs/networks/etherlink3/pci.c b/workbench/devs/networks/etherlink3/pci.c index 9c6a25e6ac..be404c601e 100644 --- a/workbench/devs/networks/etherlink3/pci.c +++ b/workbench/devs/networks/etherlink3/pci.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2004,2005 Neil Cafferkey +Copyright (C) 2004-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -269,13 +269,7 @@ static struct DevUnit *CreatePCIUnit(ULONG index, struct DevBase *base) if(success) { if(context->unit_tags == NULL) - { context->unit_tags = unit_tags; - } - } - - if(success) - { context->device = base; context->unit = unit = CreateUnit(index, context, context->unit_tags, context->generation, PCI_BUS, base); @@ -442,9 +436,9 @@ static VOID FreeCard(struct BusContext *context, struct DevBase *base) * AddPCIIntServer * * SYNOPSIS -* context = AddPCIIntServer(index) +* success = AddPCIIntServer(card, interrupt) * -* struct BusContext *AddPCIIntServer(ULONG); +* BOOL AddPCIIntServer(APTR, struct Interrupt *); * **************************************************************************** * @@ -483,9 +477,9 @@ static BOOL AddPCIIntServer(APTR card, struct Interrupt *interrupt, * RemPCIIntServer * * SYNOPSIS -* RemPCIIntServer() +* RemPCIIntServer(card, interrupt) * -* VOID RemPCIIntServer(ULONG); +* VOID RemPCIIntServer(APTR, struct Interrupt *); * **************************************************************************** * diff --git a/workbench/devs/networks/etherlink3/powerpci.c b/workbench/devs/networks/etherlink3/powerpci.c index a355237c67..60ff0227d2 100644 --- a/workbench/devs/networks/etherlink3/powerpci.c +++ b/workbench/devs/networks/etherlink3/powerpci.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2004,2005 Neil Cafferkey +Copyright (C) 2004-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -164,9 +164,9 @@ VOID FreePowerPCICard(struct BusContext *context, struct DevBase *base) * AddPowerPCIIntServer * * SYNOPSIS -* context = AddPowerPCIIntServer(index) +* success = AddPowerPCIIntServer(card, interrupt) * -* struct BusContext *AddPowerPCIIntServer(ULONG); +* BOOL AddPowerPCIIntServer(APTR, struct Interrupt *); * **************************************************************************** * @@ -186,9 +186,9 @@ BOOL AddPowerPCIIntServer(APTR card, struct Interrupt *interrupt, * RemPowerPCIIntServer * * SYNOPSIS -* RemPowerPCIIntServer() +* RemPowerPCIIntServer(card, interrupt) * -* VOID RemPowerPCIIntServer(ULONG); +* VOID RemPowerPCIIntServer(APTR, struct Interrupt *); * **************************************************************************** * diff --git a/workbench/devs/networks/etherlink3/prometheus.c b/workbench/devs/networks/etherlink3/prometheus.c index 78800b8f41..a85cf8b982 100644 --- a/workbench/devs/networks/etherlink3/prometheus.c +++ b/workbench/devs/networks/etherlink3/prometheus.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2004,2005 Neil Cafferkey +Copyright (C) 2004-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -186,9 +186,9 @@ VOID FreePrometheusCard(struct BusContext *context, struct DevBase *base) * AddPrometheusIntServer * * SYNOPSIS -* context = AddPrometheusIntServer(index) +* success = AddPrometheusIntServer(card, interrupt) * -* struct BusContext *AddPrometheusIntServer(ULONG); +* BOOL AddPrometheusIntServer(APTR, struct Interrupt *); * **************************************************************************** * @@ -208,9 +208,9 @@ BOOL AddPrometheusIntServer(APTR card, struct Interrupt *interrupt, * RemPrometheusIntServer * * SYNOPSIS -* RemPrometheusIntServer() +* RemPrometheusIntServer(card, interrupt) * -* VOID RemPrometheusIntServer(ULONG); +* VOID RemPrometheusIntServer(APTR, struct Interrupt *); * **************************************************************************** * diff --git a/workbench/devs/networks/etherlink3/request.c b/workbench/devs/networks/etherlink3/request.c index d326d1b8c2..f0e148c088 100644 --- a/workbench/devs/networks/etherlink3/request.c +++ b/workbench/devs/networks/etherlink3/request.c @@ -1199,7 +1199,7 @@ static BOOL CmdOnline(struct IOSana2Req *request, struct DevBase *base) /* Clear global and special stats and put adapter back online */ - if((error == 0) && ((unit->flags & UNITF_ONLINE) == 0)) + if(error == 0 && (unit->flags & UNITF_ONLINE) == 0) { unit->stats.PacketsReceived = 0; unit->stats.PacketsSent = 0; diff --git a/workbench/devs/networks/etherlink3/startup.c b/workbench/devs/networks/etherlink3/startup.c index d66573b1a1..fede11d317 100644 --- a/workbench/devs/networks/etherlink3/startup.c +++ b/workbench/devs/networks/etherlink3/startup.c @@ -1,8 +1,6 @@ /* -File: startup.c -Author: Neil Cafferkey -Copyright (C) 2000 Neil Cafferkey +Copyright (C) 2000-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,3 +32,12 @@ int main(void) +#if defined(__mc68000__) && !defined(__AROS__) +int __main(void) +{ + return 0; +} +#endif + + + diff --git a/workbench/devs/networks/etherlink3/unit.c b/workbench/devs/networks/etherlink3/unit.c index 1c2c5c718f..7f78bfb4dd 100644 --- a/workbench/devs/networks/etherlink3/unit.c +++ b/workbench/devs/networks/etherlink3/unit.c @@ -1,6 +1,6 @@ /* -Copyright (C) 2001-2005 Neil Cafferkey +Copyright (C) 2001-2011 Neil Cafferkey This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -309,15 +309,15 @@ struct DevUnit *CreateUnit(ULONG index, APTR card, { upd = next_upd; next_upd = upd + UPD_SIZE / sizeof(ULONG); - upd[EL3UPD_NEXT] = MakeLELong((ULONG)(IPTR)next_upd); + upd[EL3UPD_NEXT] = MakeLELong((ULONG)(UPINT)next_upd); upd[EL3UPD_STATUS] = 0; fragment = upd + EL3UPD_FIRSTFRAG; - fragment[EL3FRAG_ADDR] = MakeLELong((ULONG)(IPTR)buffer); + fragment[EL3FRAG_ADDR] = MakeLELong((ULONG)(UPINT)buffer); fragment[EL3FRAG_LEN] = MakeLELong(EL3FRAG_LENF_LAST | ETH_MAXPACKETSIZE); buffer += ETH_MAXPACKETSIZE; } - upd[EL3UPD_NEXT] = MakeLELong((ULONG)(IPTR)unit->upds); + upd[EL3UPD_NEXT] = MakeLELong((ULONG)(UPINT)unit->upds); unit->next_upd = unit->upds; dma_size = UPD_SIZE * RX_SLOT_COUNT; @@ -828,7 +828,7 @@ VOID ConfigureAdapter(struct DevUnit *unit, struct DevBase *base) /* Go online */ if((unit->capabilities & EL3ROM_CAPABILITIESF_FULLMASTER) != 0) - unit->LELongOut(unit->card, EL3REG_UPLIST, (ULONG)(IPTR)unit->upds); + unit->LELongOut(unit->card, EL3REG_UPLIST, (ULONG)(UPINT)unit->upds); GoOnline(unit, base); /* Return */ @@ -1251,9 +1251,9 @@ struct TypeStats *FindTypeStats(struct DevUnit *unit, struct MinList *list, * FlushUnit -- . * * SYNOPSIS -* FlushUnit(unit) +* FlushUnit(unit, last_queue, error) * -* VOID FlushUnit(struct DevUnit *); +* VOID FlushUnit(struct DevUnit *, UBYTE, BYTE); * **************************************************************************** * @@ -1944,7 +1944,7 @@ static VOID DMARXInt(REG(a1, struct DevUnit *unit), & EL3UPD_STATUSF_COMPLETE) != 0) { fragment = upd + EL3UPD_FIRSTFRAG; - buffer = (UBYTE *)(IPTR)LELong(fragment[EL3FRAG_ADDR]); + buffer = (UBYTE *)(UPINT)LELong(fragment[EL3FRAG_ADDR]); dma_size = ETH_MAXPACKETSIZE; CachePostDMA(buffer, &dma_size, 0); @@ -2027,7 +2027,7 @@ static VOID DMARXInt(REG(a1, struct DevUnit *unit), dma_size = ETH_MAXPACKETSIZE; CachePreDMA(buffer, &dma_size, 0); - upd = (ULONG *)(IPTR)LELong(upd[EL3UPD_NEXT]); + upd = (ULONG *)(UPINT)LELong(upd[EL3UPD_NEXT]); } dma_size = UPD_SIZE * RX_SLOT_COUNT; @@ -2108,7 +2108,7 @@ static VOID DMATXInt(REG(a1, struct DevUnit *unit), if((request->ios2_Req.io_Flags & SANA2IOF_RAW) == 0) { buffer = unit->headers + ETH_HEADERSIZE * slot; - fragment[EL3FRAG_ADDR] = MakeLELong((ULONG)(IPTR)buffer); + fragment[EL3FRAG_ADDR] = MakeLELong((ULONG)(UPINT)buffer); fragment[EL3FRAG_LEN] = MakeLELong(ETH_HEADERSIZE); p = (UWORD *)buffer; @@ -2150,29 +2150,31 @@ static VOID DMATXInt(REG(a1, struct DevUnit *unit), } } - /* Write packet data */ + /* Fill in rest of descriptor for packet transmission */ if(error == 0) { - fragment[EL3FRAG_ADDR] = MakeLELong((ULONG)(IPTR)buffer); + fragment[EL3FRAG_ADDR] = MakeLELong((ULONG)(UPINT)buffer); fragment[EL3FRAG_LEN] = MakeLELong(EL3FRAG_LENF_LAST | data_size); - dma_size = data_size; - CachePreDMA(buffer, &dma_size, DMA_ReadFromRAM); /* Pass packet to adapter */ - last_dpd = (ULONG *)(IPTR)unit->LELongIn(unit->card, EL3REG_DOWNLIST); + dma_size = data_size; + CachePreDMA(buffer, &dma_size, DMA_ReadFromRAM); + + last_dpd = (ULONG *)(UPINT) + unit->LELongIn(unit->card, EL3REG_DOWNLIST); if(last_dpd != NULL) { unit->LEWordOut(unit->card, EL3REG_COMMAND, EL3CMD_DOWNSTALL); while((unit->LEWordIn(unit->card, EL3REG_STATUS) & EL3REG_STATUSF_CMDINPROGRESS) != 0); - while((next_dpd = (ULONG *)(IPTR)LELong(last_dpd[EL3DPD_NEXT])) - != NULL) + while((next_dpd = + (ULONG *)(UPINT)LELong(last_dpd[EL3DPD_NEXT])) != NULL) last_dpd = next_dpd; - last_dpd[EL3DPD_NEXT] = MakeLELong((ULONG)(IPTR)dpd); + last_dpd[EL3DPD_NEXT] = MakeLELong((ULONG)(UPINT)dpd); dma_size = DPD_SIZE * TX_SLOT_COUNT; CachePreDMA(unit->dpds, &dma_size, 0); unit->LEWordOut(unit->card, EL3REG_COMMAND, @@ -2182,14 +2184,15 @@ static VOID DMATXInt(REG(a1, struct DevUnit *unit), { dma_size = DPD_SIZE * TX_SLOT_COUNT; CachePreDMA(unit->dpds, &dma_size, 0); - unit->LELongOut(unit->card, EL3REG_DOWNLIST, (ULONG)(IPTR)dpd); + unit->LELongOut(unit->card, EL3REG_DOWNLIST, + (ULONG)(UPINT)dpd); } unit->tx_in_slot = new_slot; } else { - /* Reply packet */ + /* Reply failed request */ request->ios2_Req.io_Error = error; request->ios2_WireError = wire_error; @@ -2213,12 +2216,12 @@ static VOID DMATXInt(REG(a1, struct DevUnit *unit), /****i* etherlink3.device/DMATXEndInt ************************************** * * NAME -* TXInt +* DMATXEndInt * * SYNOPSIS -* TXInt(unit, int_code) +* DMATXEndInt(unit, int_code) * -* VOID TXInt(struct DevUnit *, APTR); +* VOID DMATXEndInt(struct DevUnit *, APTR); * * NOTES * I think it's safe to assume that there will always be at least one @@ -2241,7 +2244,7 @@ static VOID DMATXEndInt(REG(a1, struct DevUnit *unit), /* Find out which packets have completed */ base = unit->device; - dpd = (ULONG *)(IPTR)unit->LELongIn(unit->card, EL3REG_DOWNLIST); + dpd = (ULONG *)(UPINT)unit->LELongIn(unit->card, EL3REG_DOWNLIST); if(dpd != NULL) new_out_slot = (dpd - unit->dpds) / (sizeof(ULONG) * DPD_SIZE); else @@ -2266,13 +2269,13 @@ static VOID DMATXEndInt(REG(a1, struct DevUnit *unit), if((request->ios2_Req.io_Flags & SANA2IOF_RAW) == 0) { - buffer = (APTR)(IPTR)LELong(fragment[EL3FRAG_ADDR]); + buffer = (APTR)(UPINT)LELong(fragment[EL3FRAG_ADDR]); dma_size = ETH_HEADERSIZE; CachePostDMA(buffer, &dma_size, DMA_ReadFromRAM); fragment += EL3_FRAGLEN; } - buffer = (APTR)(IPTR)LELong(fragment[EL3FRAG_ADDR]); + buffer = (APTR)(UPINT)LELong(fragment[EL3FRAG_ADDR]); dma_size = data_size; CachePostDMA(buffer, &dma_size, DMA_ReadFromRAM); -- 2.11.4.GIT