ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/include/ether.h
(Generate patch)

Comparing BasiliskII/src/include/ether.h (file contents):
Revision 1.2 by cebix, 2000-04-10T18:53:30Z vs.
Revision 1.9 by gbeauche, 2005-03-19T17:43:03Z

# Line 1 | Line 1
1   /*
2   *  ether.h - Ethernet device driver
3   *
4 < *  Basilisk II (C) 1997-2000 Christian Bauer
4 > *  Basilisk II (C) 1997-2005 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
# Line 21 | Line 21
21   #ifndef ETHER_H
22   #define ETHER_H
23  
24 + struct sockaddr_in;
25 +
26 + extern void EtherInit(void);
27 + extern void EtherExit(void);
28 +
29   extern int16 EtherOpen(uint32 pb, uint32 dce);
30   extern int16 EtherControl(uint32 pb, uint32 dce);
31 < extern void EtherReadPacket(uint8 **src, uint32 &dest, uint32 &len, uint32 &remaining);
31 > extern void EtherReadPacket(uint32 &src, uint32 &dest, uint32 &len, uint32 &remaining);
32  
33   // System specific and internal functions/data
29 extern void EtherInit(void);
30 extern void EtherExit(void);
34   extern void EtherReset(void);
35   extern void EtherInterrupt(void);
36  
37 + extern bool ether_init(void);
38 + extern void ether_exit(void);
39 + extern void ether_reset(void);
40   extern int16 ether_add_multicast(uint32 pb);
41   extern int16 ether_del_multicast(uint32 pb);
42   extern int16 ether_attach_ph(uint16 type, uint32 handler);
43   extern int16 ether_detach_ph(uint16 type);
44   extern int16 ether_write(uint32 wds);
45 + extern bool ether_start_udp_thread(int socket_fd);
46 + extern void ether_stop_udp_thread(void);
47 + extern void ether_udp_read(uint32 packet, int length, struct sockaddr_in *from);
48  
49 < extern uint8 ether_addr[6];     // Ethernet address (set by EtherInit())
41 < extern bool net_open;           // Flag: initialization succeeded, network device open (set by EtherInit())
49 > extern uint8 ether_addr[6];     // Ethernet address (set by ether_init())
50  
51   // Ethernet driver data in MacOS RAM
52   enum {
# Line 53 | Line 61 | enum {
61  
62   extern uint32 ether_data;       // Mac address of driver data in MacOS RAM
63  
64 + // Ethernet packet allocator (optimized for 32-bit platforms in real addressing mode)
65 + class EthernetPacket {
66 + #if SIZEOF_VOID_P == 4 && REAL_ADDRESSING
67 +        uint8 packet[1516];
68 + public:
69 +        uint32 addr(void) const { return (uint32)packet; }
70 + #else
71 +        uint32 packet;
72 + public:
73 +        EthernetPacket();
74 +        ~EthernetPacket();
75 +        uint32 addr(void) const { return packet; }
76 + #endif
77 + };
78 +
79 + // Copy packet data from WDS to linear buffer (must hold at least 1514 bytes),
80 + // returns packet length
81 + static inline int ether_wds_to_buffer(uint32 wds, uint8 *p)
82 + {
83 +        int len = 0;
84 +        while (len < 1514) {
85 +                int w = ReadMacInt16(wds);
86 +                if (w == 0)
87 +                        break;
88 +                Mac2Host_memcpy(p, ReadMacInt32(wds + 2), w);
89 +                len += w;
90 +                p += w;
91 +                wds += 6;
92 +        }
93 +        return len;
94 + }
95 +
96   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines