Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 56 additions & 55 deletions DMAtest/dmatest.c
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

#define __NOLIBBASE__

#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/prometheus.h>

extern struct Library *SysBase, *DOSBase;
Expand All @@ -12,101 +12,102 @@ struct Library *PrometheusBase, *CardBase;

const UBYTE VString[] = "$VER: dmalist 1.2 (6.10.2002) � by Matay 2002";


/* private structures */

struct DMAMemChunk
{
struct MinNode dmc_Node; /* for linking into list */
APTR dmc_Address; /* logical (CPU) address */
struct Task *dmc_Owner; /* memory owner (NULL if none) */
ULONG dmc_Size; /* chunk size in bytes */
};
{
struct MinNode dmc_Node; /* for linking into list */
APTR dmc_Address; /* logical (CPU) address */
struct Task * dmc_Owner; /* memory owner (NULL if none) */
ULONG dmc_Size; /* chunk size in bytes */
};

struct CardBase
{
struct Library cb_Library;
UBYTE cb_Flags;
UBYTE cb_Pad;
struct Library *cb_SysBase;
struct Library *cb_ExpansionBase;
APTR cb_SegList;
STRPTR cb_Name;
{
struct Library cb_Library;
UBYTE cb_Flags;
UBYTE cb_Pad;
struct Library *cb_SysBase;
struct Library *cb_ExpansionBase;
APTR cb_SegList;
STRPTR cb_Name;

/* standard fields ends here */

struct Library *cb_PrometheusBase;
struct Library * cb_PrometheusBase;
BOOL cb_DMAMemGranted;
APTR cb_LegacyIOBase;
APTR cb_MemPool; /* for DMA memory management lists */
APTR cb_MemPool; /* for DMA memory management lists */
struct MinList cb_MemList;
struct SignalSemaphore *cb_MemSem;
};

};

BOOL try_memory(void)
{
{
APTR pointer;

if (pointer = Prm_AllocDMABuffer(4))
{
{
Prm_FreeDMABuffer(pointer, 4);
return TRUE;
}
}
return FALSE;
}

}

void dump_list(struct CardBase *cb)
{
{
struct DMAMemChunk *dmc;

PutStr("\nStart End Size\tOwner\n"
"---------------------------------------------------------------\n");
PutStr(
"\nStart End Size\tOwner\n"
"---------------------------------------------------------------\n");

ObtainSemaphoreShared(cb->cb_MemSem);

for (dmc = (struct DMAMemChunk*)cb->cb_MemList.mlh_Head;
dmc->dmc_Node.mln_Succ;
dmc = (struct DMAMemChunk*)dmc->dmc_Node.mln_Succ)
{
for (dmc = (struct DMAMemChunk *)cb->cb_MemList.mlh_Head; dmc->dmc_Node.mln_Succ;
dmc = (struct DMAMemChunk *)dmc->dmc_Node.mln_Succ)
{
STRPTR owner;

if (dmc->dmc_Owner) owner = dmc->dmc_Owner->tc_Node.ln_Name;
else owner = "FREE";
if (dmc->dmc_Owner)
owner = dmc->dmc_Owner->tc_Node.ln_Name;
else
owner = "FREE";

Printf("$%08lx $%08lx %ld\t%s\n", (ULONG)dmc->dmc_Address, (ULONG)dmc->dmc_Address + dmc->dmc_Size - 1,
dmc->dmc_Size, (LONG)owner);
}
Printf("$%08lx $%08lx %ld\t%s\n",
(ULONG)dmc->dmc_Address,
(ULONG)dmc->dmc_Address + dmc->dmc_Size - 1,
dmc->dmc_Size,
(LONG)owner);
}

ReleaseSemaphore(cb->cb_MemSem);
PutStr("---------------------------------------------------------------\n\n");
return;
}
}


int main (void)
{
int main(void)
{
APTR b;

Printf("Prometheus DMA memory lister v 1.2\n");
if (PrometheusBase = OpenLibrary("prometheus.library", 2))
{
{
if (CardBase = OpenLibrary("Prometheus.card", 7))
{
{
if (try_memory())
{
{
Printf("DMA memory detected, block listing...\n");
dump_list((struct CardBase*)CardBase);
}
else Printf("No free DMA memory found.\n");
dump_list((struct CardBase *)CardBase);
}
else
Printf("No free DMA memory found.\n");
CloseLibrary(CardBase);
}
else Printf("Prometheus is not upgraded yet.\n");
}
else
Printf("Prometheus is not upgraded yet.\n");
CloseLibrary(PrometheusBase);
}
else Printf("Can't open prometheus.library v2+\n");
}



}
else
Printf("Can't open prometheus.library v2+\n");
}
37 changes: 16 additions & 21 deletions DMAtest/rtl8139.c
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,30 @@

#define __NOLIBBASE__

#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/prometheus.h>

#define PCI_COMMAND 0x04
#define PCI_STATUS 0x06

#define PCI_COMMAND 0x04
#define PCI_STATUS 0x06

extern struct Library *SysBase, *DOSBase;

struct Library *PrometheusBase;

const UBYTE VString[] = "$VER: RTL8139test 1.0 (13.9.2002) � by Matay 2002";

int main (void)
{
int main(void)
{
PCIBoard *b;
UWORD s;
UWORD s;

Printf("RTL8139 test.\n");
if (PrometheusBase = OpenLibrary("prometheus.library", 2))
{
{
Printf("prometheus.library v2 base at $%08lx\n", (LONG)PrometheusBase);
if (b = Prm_FindBoardTags(NULL,
PRM_Vendor, 0x10EC,
PRM_Device, 0x8139,
TAG_END))
{
if (b = Prm_FindBoardTags(NULL, PRM_Vendor, 0x10EC, PRM_Device, 0x8139, TAG_END))
{
Printf("RTL8139 board at $%08lx.\n", (ULONG)b);
s = Prm_ReadConfigWord(b, PCI_COMMAND);
Printf("conf: %04lx\n", s);
Expand All @@ -41,12 +37,11 @@ int main (void)
Printf("devc: %04lx\n", s);
s = Prm_ReadConfigByte(b, 62);
Printf("intr: %02lx\n", s);
}
else Printf("No RTL8139 board found.\n");
}
else
Printf("No RTL8139 board found.\n");
CloseLibrary(PrometheusBase);
}
else Printf("Can't open prometheus.library v2+\n");
}



}
else
Printf("Can't open prometheus.library v2+\n");
}
Loading