git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Cleanup (debug statements removed)
[tpg/acess2.git]
/
Modules
/
Network
/
NE2000
/
ne2000.c
diff --git
a/Modules/Network/NE2000/ne2000.c
b/Modules/Network/NE2000/ne2000.c
index
76e4379
..
d752580
100644
(file)
--- a/
Modules/Network/NE2000/ne2000.c
+++ b/
Modules/Network/NE2000/ne2000.c
@@
-29,7
+29,7
@@
static const struct {
{0x10EC, 0x8029}, // Realtek 8029
{0x10EC, 0x8129} // Realtek 8129
};
-#define NUM_COMPAT_DEVICES (
sizeof(csaCOMPAT_DEVICES)/sizeof(csaCOMPAT_DEVICES[0]
))
+#define NUM_COMPAT_DEVICES (
(int)(sizeof(csaCOMPAT_DEVICES)/sizeof(csaCOMPAT_DEVICES[0])
))
enum eNe2k_Page0Read {
CMD = 0, //!< the master command register
@@
-75,7
+75,7
@@
typedef struct sNe2k_Card {
int NextMemPage; //!< Next Card Memory page to use
- Uint8 Buffer[RX_BUF_SIZE];
+ Uint8 Buffer[RX_BUF_SIZE
*256
];
char Name[2]; // "0"
tVFS_Node Node;
@@
-85,7
+85,7
@@
typedef struct sNe2k_Card {
// === PROTOTYPES ===
int Ne2k_Install(char **Arguments);
char *Ne2k_ReadDir(tVFS_Node *Node, int Pos);
-tVFS_Node *Ne2k_FindDir(tVFS_Node *Node, char *Name);
+tVFS_Node *Ne2k_FindDir(tVFS_Node *Node, c
onst c
har *Name);
int Ne2k_IOCtl(tVFS_Node *Node, int ID, void *Data);
Uint64 Ne2k_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer);
Uint64 Ne2k_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer);
@@
-127,6
+127,11
@@
int Ne2k_Install(char **Options)
giNe2k_CardCount += PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, 0 );
}
+ if( giNe2k_CardCount == 0 ) {
+ Log_Warning("Ne2k", "No cards detected");
+ return MODULE_ERR_NOTNEEDED;
+ }
+
// Enumerate Cards
k = 0;
gpNe2k_Cards = calloc( giNe2k_CardCount, sizeof(tCard) );
@@
-157,7
+162,7
@@
int Ne2k_Install(char **Options)
outb( base + CURR, RX_FIRST ); // Current RX page
outb( base + CMD, 0x21 ); // No DMA and Stop
outb( base + DCR, 0x49 ); // Set WORD mode
- outb( base + IMR, 0x00 );
+ outb( base + IMR, 0x00 );
// Interrupt Mask Register
outb( base + ISR, 0xFF );
outb( base + RCR, 0x20 ); // Reciever to Monitor
outb( base + TCR, 0x02 ); // Transmitter OFF (TCR.LB = 1, Internal Loopback)
@@
-194,12
+199,11
@@
int Ne2k_Install(char **Options)
Ne2k_WriteReg(base, MAC5, gpNe2k_Cards[ k ].MacAddr[5]);
*/
- Log("[NE2K]: Card #%i: IRQ=%i, IOBase=0x%x",
- k, gpNe2k_Cards[ k ].IRQ, gpNe2k_Cards[ k ].IOBase);
- Log("MAC Address %x:%x:%x:%x:%x:%x",
- gpNe2k_Cards[ k ].MacAddr[0], gpNe2k_Cards[ k ].MacAddr[1],
- gpNe2k_Cards[ k ].MacAddr[2], gpNe2k_Cards[ k ].MacAddr[3],
- gpNe2k_Cards[ k ].MacAddr[4], gpNe2k_Cards[ k ].MacAddr[5]
+ Log_Log("Ne2k", "Card %i 0x%04x IRQ%i %02x:%02x:%02x:%02x:%02x:%02x",
+ k, base, gpNe2k_Cards[ k ].IRQ,
+ gpNe2k_Cards[k].MacAddr[0], gpNe2k_Cards[k].MacAddr[1],
+ gpNe2k_Cards[k].MacAddr[2], gpNe2k_Cards[k].MacAddr[3],
+ gpNe2k_Cards[k].MacAddr[4], gpNe2k_Cards[k].MacAddr[5]
);
// Set VFS Node
@@
-216,7
+220,7
@@
int Ne2k_Install(char **Options)
gNe2k_DriverInfo.RootNode.Size = giNe2k_CardCount;
DevFS_AddDevice( &gNe2k_DriverInfo );
- return
1
;
+ return
MODULE_ERR_OK
;
}
/**
@@
-232,9
+236,9
@@
char *Ne2k_ReadDir(tVFS_Node *Node, int Pos)
}
/**
- * \fn tVFS_Node *Ne2k_FindDir(tVFS_Node *Node, char *Name)
+ * \fn tVFS_Node *Ne2k_FindDir(tVFS_Node *Node, c
onst c
har *Name)
*/
-tVFS_Node *Ne2k_FindDir(tVFS_Node *Node, char *Name)
+tVFS_Node *Ne2k_FindDir(tVFS_Node *Node, c
onst c
har *Name)
{
if(Name[0] == '\0' || Name[1] != '\0') return NULL;
@@
-248,27
+252,10
@@
static const char *casIOCtls[] = { DRV_IOCTLNAMES, DRV_NETWORK_IOCTLNAMES, NULL
*/
int Ne2k_IOCtl(tVFS_Node *Node, int ID, void *Data)
{
- int tmp;
ENTER("pNode iID pData", Node, ID, Data);
switch( ID )
{
- case DRV_IOCTL_TYPE:
- LEAVE('i', DRV_TYPE_NETWORK);
- return DRV_TYPE_NETWORK;
-
- case DRV_IOCTL_IDENT:
- tmp = ModUtil_SetIdent(Data, "Ne2k");
- LEAVE('i', tmp);
- return tmp;
-
- case DRV_IOCTL_VERSION:
- LEAVE('x', VERSION);
- return VERSION;
-
- case DRV_IOCTL_LOOKUP:
- tmp = ModUtil_LookupString( (char**)casIOCtls, Data );
- LEAVE('i', tmp);
- return tmp;
+ BASE_IOCTLS(DRV_TYPE_NETWORK, "NE2000", VERSION, casIOCtls);
}
// If this is the root, return
@@
-302,11
+289,17
@@
Uint64 Ne2k_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
tCard *Card = (tCard*)Node->ImplPtr;
Uint16 *buf = Buffer;
int rem = Length;
+ int page;
ENTER("pNode XOffset XLength pBuffer", Node, Offset, Length, Buffer);
// Sanity Check Length
- if(Length > TX_BUF_SIZE) {
+ if(Length > TX_BUF_SIZE*256) {
+ Log_Warning(
+ "Ne2k",
+ "Ne2k_Write - Attempting to send over TX_BUF_SIZE*256 (%i) bytes (%i)",
+ TX_BUF_SIZE*256, Length
+ );
LEAVE('i', 0);
return 0;
}
@@
-327,14
+320,16
@@
Uint64 Ne2k_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
// Set up transfer
outb(Card->IOBase + RSAR0, 0x00); // Page Offset
- outb(Card->IOBase + RSAR1, Ne2k_int_GetWritePage(Card, Length)); // Page Offset
+ page = Ne2k_int_GetWritePage(Card, Length);
+ outb(Card->IOBase + RSAR1, page); // Page Offset
// Start
//outb(Card->IOBase + CMD, 0|0x18|0x4|0x2); // Page 0, Transmit Packet, TXP, Start
outb(Card->IOBase + CMD, 0|0x10|0x2); // Page 0, Remote Write, Start
// Send Data
- for(rem = Length; rem
; rem -= 2)
+ for(rem = Length; rem
> 0; rem -= 2) {
outw(Card->IOBase + 0x10, *buf++);
+ }
while( inb(Card->IOBase + ISR) == 0 ) // Wait for Remote DMA Complete
; //Proc_Yield();
@@
-342,6
+337,7
@@
Uint64 Ne2k_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
outb( Card->IOBase + ISR, 0x40 ); // ACK Interrupt
// Send Packet
+ outb(Card->IOBase + TPSR, page);
outb(Card->IOBase + CMD, 0|0x10|0x4|0x2);
// Complete DMA
@@
-369,6
+365,7
@@
Uint64 Ne2k_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
ENTER("pNode XOffset XLength pBuffer", Node, Offset, Length, Buffer);
+ // TODO: Use MutexP/MutexV instead
while(Card->NumWaitingPackets == 0) Threads_Yield();
// Make sure that the card is in page 0
@@
-498,5
+495,5
@@
void Ne2k_IRQHandler(int IntNum)
return ;
}
}
-
Warning("[NE2K ]
Recieved Unknown IRQ %i", IntNum);
+
Log_Warning("Ne2k", "
Recieved Unknown IRQ %i", IntNum);
}
UCC
git Repository :: git.ucc.asn.au