*
* See: ~/Sources/bochs/bochs.../iodev/ne2k.cc
*/
-#define DEBUG 0
+#define DEBUG 1
#define VERSION ((0<<8)|50)
#include <acess.h>
#include <modules.h>
int Ne2k_Install(char **Options)
{
int i, j, k;
- int count, id, base;
+ int count, base;
+ tPCIDev id;
// --- Scan PCI Bus ---
// Count Cards
giNe2k_CardCount = 0;
for( i = 0; i < NUM_COMPAT_DEVICES; i ++ )
{
- giNe2k_CardCount += PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, 0 );
+ giNe2k_CardCount += PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device );
}
if( giNe2k_CardCount == 0 ) {
for( i = 0; i < NUM_COMPAT_DEVICES; i ++ )
{
- count = PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, 0 );
+ count = PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device );
for( j = 0; j < count; j ++,k ++ )
{
- id = PCI_GetDevice( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, 0, j );
+ id = PCI_GetDevice( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, j );
// Create Structure
- base = PCI_AssignPort( id, 0, 0x20 );
+ base = PCI_GetBAR( id, 0 );
gpNe2k_Cards[ k ].IOBase = base;
gpNe2k_Cards[ k ].IRQ = PCI_GetIRQ( id );
gpNe2k_Cards[ k ].NextMemPage = 64;
ENTER("pNode XOffset XLength pBuffer", Node, Offset, Length, Buffer);
+ // TODO: Lock
+
// Sanity Check Length
if(Length > TX_BUF_SIZE*256) {
Log_Warning(
ENTER("pNode XOffset XLength pBuffer", Node, Offset, Length, Buffer);
// Wait for packets
- Semaphore_Wait( &Card->Semaphore, 1 );
+ if( Semaphore_Wait( &Card->Semaphore, 1 ) != 1 )
+ {
+ // Error or interrupted
+ LEAVE_RET('i', 0);
+ }
outb(Card->IOBase, 0x22 | (1 << 6)); // Page 6
LOG("CURR : 0x%02x", inb(Card->IOBase + CURR));
LOG("pktHdr->Length (%i) > 256 - 4, allocated buffer %p", pktHdr->Length, buf);
- if(!buf) {
- LEAVE('i', -1);
- return -1;
- }
+ if(!buf) LEAVE_RET('i', -1);
// Copy the already read data
memcpy(buf, data, 256);
{
//if( gpNe2k_Cards[i].NumWaitingPackets > MAX_PACKET_QUEUE )
// gpNe2k_Cards[i].NumWaitingPackets = MAX_PACKET_QUEUE;
- Semaphore_Signal( &gpNe2k_Cards[i].Semaphore, 1 );
+ if( Semaphore_Signal( &gpNe2k_Cards[i].Semaphore, 1 ) != 1 ) {
+ // Oops?
+ }
}
// 1: Packet sent (no error)
// 2: Recieved with error