1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\r
3 ;; Copyright (C) KolibriOS team 2004-2021. All rights reserved. ;;
\r
4 ;; Distributed under terms of the GNU General Public License ;;
\r
6 ;; GNU GENERAL PUBLIC LICENSE ;;
\r
7 ;; Version 2, June 1991 ;;
\r
9 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\r
11 ; This macro will prepend driver name to all debug output through DEBUGF macro
\r
12 ; The driver name is taken from my_service label
\r
14 if defined my_service
\r
16 macro DEBUGF _level,_format, [args] {
\r
17 common DEBUGF _level, "%s: " # _format, my_service, args
\r
29 ; Network driver types
\r
36 ETH_LINK_DOWN = 0 ; Link is down
\r
37 ETH_LINK_UNKNOWN = 1b ; There could be an active link
\r
38 ETH_LINK_FULL_DUPLEX = 10b ; full duplex flag
\r
40 ETH_LINK_SPEED_10M = 100b ; 10 Mbit
\r
41 ETH_LINK_SPEED_100M = 1000b ; 100 Mbit
\r
42 ETH_LINK_SPEED_1G = 1100b ; Gigabit
\r
44 ETH_LINK_SPEED_MASK = 1100b
\r
46 ; Macro to easily set i/o addresses to access device.
\r
47 ; In the beginning of a procedure (or ofter edx may have been destroyed),
\r
48 ; always use set_io with offset 0 to reset the variables.
\r
52 macro set_io baseaddr, offset {
\r
56 else if offset = LAST_IO
\r
58 add edx, offset - LAST_IO
\r
64 ; Macro to allocate a contiguous buffer in memory
\r
65 ; And initialise it to all zeros
\r
67 ; This macro will destroy eax, ecx and edi !
\r
69 macro allocate_and_clear dest, size, err {
\r
71 ; We need to allocate at least 8 pages, if we want a contiguous area in ram
\r
73 if (size < 8*4096) & (size > 4096)
\r
74 invoke KernelAlloc, 8*4096
\r
76 invoke KernelAlloc, size
\r
83 mov edi, eax ; look at last part of code!
\r
85 ; Release the unused pages (if any)
\r
86 if (size < 8*4096) & (size > 4096)
\r
87 add eax, (size/4096+1)*4096
\r
88 mov ecx, 8-(size/4096+1)
\r
94 ; Clear the allocated buffer
\r
95 mov ecx, size/4 ; divide by 4 because of DWORD
\r
99 if (size - size/4*4)
\r
100 mov ecx, size - size/4*4
\r
109 type dd ? ; Type field
\r
110 mtu dd ? ; Maximal Transmission Unit
\r
111 name dd ? ; Ptr to 0 terminated string
\r
113 unload dd ? ; Ptrs to driver functions
\r
117 state dd ? ; link state (0 = no link)
\r
118 hwacc dd ? ; bitmask stating enabled HW accelerations (offload engines)
\r
120 bytes_tx dq ? ; Statistics, updated by the driver
\r
124 packets_tx_err dd ? ; CRC errors, too long or too short frames
\r
125 packets_tx_drop dd ? ;
\r
126 packets_tx_ovr dd ? ; FIFO overrun
\r
129 packets_rx_err dd ? ; CRC errors, too long or too short frames
\r
130 packets_rx_drop dd ? ;
\r
131 packets_rx_ovr dd ? ; FIFO overrun
\r
138 NextPtr dd ? ; pointer to next frame in list
\r
139 PrevPtr dd ? ; pointer to previous frame in list
\r
140 device dd ? ; ptr to NET_DEVICE structure
\r
141 type dd ? ; data type (e.g. Ethernet)
\r
142 length dd ? ; data length
\r
143 offset dd ? ; offset to actual data (24 bytes for default frame)
\r
149 struct ETH_DEVICE NET_DEVICE
\r
152 dw ? ; qword alignment
\r