Subversion Repositories Kolibri OS

Rev

Rev 8896 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                                 ;;
  3. ;; Copyright (C) KolibriOS team 2004-2021. All rights reserved.    ;;
  4. ;; Distributed under terms of the GNU General Public License       ;;
  5. ;;                                                                 ;;
  6. ;;          GNU GENERAL PUBLIC LICENSE                             ;;
  7. ;;             Version 2, June 1991                                ;;
  8. ;;                                                                 ;;
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10.  
  11. ; This macro will prepend driver name to all debug output through DEBUGF macro
  12. ; The driver name is taken from my_service label
  13.  
  14. if defined my_service
  15.  
  16.         macro DEBUGF _level,_format, [args] {
  17.         common DEBUGF _level, "%s: " # _format, my_service, args
  18.         }
  19.  
  20. end if
  21.  
  22. include 'pci.inc'
  23. include 'mii.inc'
  24.  
  25. ; Kernel variables
  26.  
  27.         PAGESIZE        = 4096
  28.  
  29. ; Network driver types
  30.  
  31.         NET_TYPE_ETH    = 1
  32.         NET_TYPE_SLIP   = 2
  33.  
  34. ; Link state
  35.  
  36.         ETH_LINK_DOWN           = 0             ; Link is down
  37.         ETH_LINK_UNKNOWN        = 1b            ; There could be an active link
  38.         ETH_LINK_FULL_DUPLEX    = 10b           ; full duplex flag
  39.  
  40.         ETH_LINK_SPEED_10M      = 100b          ; 10 Mbit
  41.         ETH_LINK_SPEED_100M     = 1000b         ; 100 Mbit
  42.         ETH_LINK_SPEED_1G       = 1100b         ; Gigabit
  43.  
  44.         ETH_LINK_SPEED_MASK     = 1100b
  45.  
  46. ; Deprecated naming - dont use
  47.         ETH_LINK_FD     = 10b           ; full duplex flag
  48.         ETH_LINK_10M    = 100b          ; 10 mbit
  49.         ETH_LINK_100M   = 1000b         ; 100 mbit
  50.         ETH_LINK_1G     = 1100b         ; gigabit
  51.  
  52. ; Macro to easily set i/o addresses to access device.
  53. ; In the beginning of a procedure (or ofter edx may have been destroyed),
  54. ; always use set_io with offset 0 to reset the variables.
  55.  
  56.         LAST_IO = 0
  57.  
  58. macro   set_io  baseaddr, offset {
  59.  
  60.         if      offset = 0
  61.         mov     edx, baseaddr
  62.         else if offset = LAST_IO
  63.         else
  64.         add     edx, offset - LAST_IO
  65.         end if
  66.  
  67.         LAST_IO = offset
  68. }
  69.  
  70. ; Macro to allocate a contiguous buffer in memory
  71. ; And initialise it to all zeros
  72.  
  73. ; This macro will destroy eax, ecx and edi !
  74.  
  75. macro   allocate_and_clear dest, size, err {
  76.  
  77. ; We need to allocate at least 8 pages, if we want a contiguous area in ram
  78.         push    edx
  79.     if (size < 8*4096) & (size > 4096)
  80.         invoke  KernelAlloc, 8*4096
  81.     else
  82.         invoke  KernelAlloc, size
  83.     end if
  84.         pop     edx
  85.  
  86.         test    eax, eax
  87.         jz      err
  88.         mov     dest, eax
  89.         mov     edi, eax                ; look at last part of code!
  90.  
  91. ; Release the unused pages (if any)
  92.     if (size < 8*4096) & (size > 4096)
  93.         add     eax, (size/4096+1)*4096
  94.         mov     ecx, 8-(size/4096+1)
  95.         push    edx
  96.         invoke  ReleasePages
  97.         pop     edx
  98.     end if
  99.  
  100. ; Clear the allocated buffer
  101.         mov     ecx, size/4             ; divide by 4 because of DWORD
  102.         xor     eax, eax
  103.         rep     stosd
  104.  
  105.      if (size - size/4*4)
  106.         mov     ecx, size - size/4*4
  107.         rep     stosb
  108.      end if
  109.  
  110. }
  111.  
  112.  
  113. struct  NET_DEVICE
  114.  
  115.         type            dd ?    ; Type field
  116.         mtu             dd ?    ; Maximal Transmission Unit
  117.         name            dd ?    ; Ptr to 0 terminated string
  118.  
  119.         unload          dd ?    ; Ptrs to driver functions
  120.         reset           dd ?    ;
  121.         transmit        dd ?    ;
  122.  
  123.         state           dd ?    ; link state (0 = no link)
  124.         hwacc           dd ?    ; bitmask stating enabled HW accelerations (offload engines)
  125.  
  126.         bytes_tx        dq ?    ; Statistics, updated by the driver
  127.         bytes_rx        dq ?    ;
  128.  
  129.         packets_tx      dd ?    ;
  130.         packets_tx_err  dd ?    ; CRC errors, too long or too short frames
  131.         packets_tx_drop dd ?    ;
  132.         packets_tx_ovr  dd ?    ; FIFO overrun
  133.  
  134.         packets_rx      dd ?    ;
  135.         packets_rx_err  dd ?    ; CRC errors, too long or too short frames
  136.         packets_rx_drop dd ?    ;
  137.         packets_rx_ovr  dd ?    ; FIFO overrun
  138.  
  139. ends
  140.  
  141.  
  142. struct  NET_BUFF
  143.  
  144.         NextPtr         dd ?    ; pointer to next frame in list
  145.         PrevPtr         dd ?    ; pointer to previous frame in list
  146.         device          dd ?    ; ptr to NET_DEVICE structure
  147.         type            dd ?    ; data type (e.g. Ethernet)
  148.         length          dd ?    ; data length
  149.         offset          dd ?    ; offset to actual data (24 bytes for default frame)
  150.         data            rb 0
  151.  
  152. ends
  153.  
  154.  
  155. struct  ETH_DEVICE      NET_DEVICE
  156.  
  157.         mac             dp ?
  158.                         dw ?    ; qword alignment
  159.  
  160. ends