Fasm: Fixed a bug when building programs with the length of the included file name...
[kolibrios.git] / drivers / netdrv.inc
blob7f626363fe1dea71d86fdd63469c047d9988102d
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
2 ;;                                                                 ;;\r
3 ;; Copyright (C) KolibriOS team 2004-2021. All rights reserved.    ;;\r
4 ;; Distributed under terms of the GNU General Public License       ;;\r
5 ;;                                                                 ;;\r
6 ;;          GNU GENERAL PUBLIC LICENSE                             ;;\r
7 ;;             Version 2, June 1991                                ;;\r
8 ;;                                                                 ;;\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
18         }\r
20 end if\r
22 include 'pci.inc'\r
23 include 'mii.inc'\r
25 ; Kernel variables\r
27         PAGESIZE        = 4096\r
29 ; Network driver types\r
31         NET_TYPE_ETH    = 1\r
32         NET_TYPE_SLIP   = 2\r
34 ; Link state\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
50         LAST_IO = 0\r
52 macro   set_io  baseaddr, offset {\r
54         if      offset = 0\r
55         mov     edx, baseaddr\r
56         else if offset = LAST_IO\r
57         else\r
58         add     edx, offset - LAST_IO\r
59         end if\r
61         LAST_IO = offset\r
62 }\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
72         push    edx\r
73     if (size < 8*4096) & (size > 4096)\r
74         invoke  KernelAlloc, 8*4096\r
75     else\r
76         invoke  KernelAlloc, size\r
77     end if\r
78         pop     edx\r
80         test    eax, eax\r
81         jz      err\r
82         mov     dest, eax\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
89         push    edx\r
90         invoke  ReleasePages\r
91         pop     edx\r
92     end if\r
94 ; Clear the allocated buffer\r
95         mov     ecx, size/4             ; divide by 4 because of DWORD\r
96         xor     eax, eax\r
97         rep     stosd\r
99      if (size - size/4*4)\r
100         mov     ecx, size - size/4*4\r
101         rep     stosb\r
102      end if\r
107 struct  NET_DEVICE\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
114         reset           dd ?    ;\r
115         transmit        dd ?    ;\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
121         bytes_rx        dq ?    ;\r
123         packets_tx      dd ?    ;\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
128         packets_rx      dd ?    ;\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
133 ends\r
136 struct  NET_BUFF\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
144         data            rb 0\r
146 ends\r
149 struct  ETH_DEVICE      NET_DEVICE\r
151         mac             dp ?\r
152                         dw ?    ; qword alignment\r
154 ends