Rev 5522 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5522 | Rev 10057 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
2 | ;; ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2024. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;; DEC 21x4x driver for KolibriOS ;; |
6 | ;; DEC 21x4x driver for KolibriOS ;; |
7 | ;; ;; |
7 | ;; ;; |
8 | ;; Based on dec21140.Asm from Solar OS by ;; |
8 | ;; Based on dec21140.Asm from Solar OS by ;; |
Line 93... | Line 93... | ||
93 | 93 | ||
94 | ; using values from linux driver.. |
94 | ; using values from linux driver.. |
Line 95... | Line 95... | ||
95 | CSR0_DEFAULT = CSR0_WIE + CSR0_RLE + CSR0_RML + CSR0_CACHEALIGN_NONE |
95 | CSR0_DEFAULT = CSR0_WIE + CSR0_RLE + CSR0_RML + CSR0_CACHEALIGN_NONE |
96 | 96 | ||
97 | ;------- CSR5 -STATUS- bits -------------------------------- |
97 | ;------- CSR5 -STATUS- bits -------------------------------- |
98 | CSR5_TI = 0x00000001 ;1 shl 0 ; Transmit interupt - frame transmition completed |
98 | CSR5_TI = 0x00000001 ;1 shl 0 ; Transmit interupt - frame transmission completed |
99 | CSR5_TPS = 0x00000002 ;1 shl 1 ; Transmit process stopped |
99 | CSR5_TPS = 0x00000002 ;1 shl 1 ; Transmit process stopped |
100 | CSR5_TU = 0x00000004 ;1 shl 2 ; Transmit Buffer unavailable |
100 | CSR5_TU = 0x00000004 ;1 shl 2 ; Transmit Buffer unavailable |
101 | CSR5_TJT = 0x00000008 ;1 shl 3 ; Transmit Jabber Timeout (transmitter had been excessively active) |
101 | CSR5_TJT = 0x00000008 ;1 shl 3 ; Transmit Jabber Timeout (transmitter had been excessively active) |
Line 180... | Line 180... | ||
180 | 180 | ||
181 | ;receive |
181 | ;receive |
182 | RDES0_ZER = 1 shl 0 ; must be 0 if legal length :D |
182 | RDES0_ZER = 1 shl 0 ; must be 0 if legal length :D |
183 | RDES0_CE = 1 shl 1 ; CRC error, valid only on last desc (RDES0<8>=1) |
183 | RDES0_CE = 1 shl 1 ; CRC error, valid only on last desc (RDES0<8>=1) |
184 | RDES0_DB = 1 shl 2 ; dribbling bit - not multiple of 8 bits, valid only on last desc (RDES0<8>=1) |
184 | RDES0_DB = 1 shl 2 ; dribbling bit - not multiple of 8 bits, valid only on last desc (RDES0<8>=1) |
185 | RDES0_RE = 1 shl 3 ; Report on MII error.. i dont realy know what this means :P |
185 | RDES0_RE = 1 shl 3 ; Report on MII error.. I don't realy know what this means :P |
186 | RDES0_RW = 1 shl 4 ; received watchdog timer expiration - must set CSR5<9>, valid only on last desc (RDES0<8>=1) |
186 | RDES0_RW = 1 shl 4 ; received watchdog timer expiration - must set CSR5<9>, valid only on last desc (RDES0<8>=1) |
187 | RDES0_FT = 1 shl 5 ; frame type: 0->IEEE802.0 (len<1500) 1-> ETHERNET frame (len>1500), valid only on last desc (RDES0<8>=1) |
187 | RDES0_FT = 1 shl 5 ; frame type: 0->IEEE802.0 (len<1500) 1-> ETHERNET frame (len>1500), valid only on last desc (RDES0<8>=1) |
188 | RDES0_CS = 1 shl 6 ; Collision seen, valid only on last desc (RDES0<8>=1) |
188 | RDES0_CS = 1 shl 6 ; Collision seen, valid only on last desc (RDES0<8>=1) |
189 | RDES0_TL = 1 shl 7 ; Too long(>1518)-NOT AN ERROR, valid only on last desc (RDES0<8>=1) |
189 | RDES0_TL = 1 shl 7 ; Too long(>1518)-NOT AN ERROR, valid only on last desc (RDES0<8>=1) |
Line 192... | Line 192... | ||
192 | RDES0_MF = 1 shl 10 ; Multicast frame, valid only on last desc (RDES0<8>=1) |
192 | RDES0_MF = 1 shl 10 ; Multicast frame, valid only on last desc (RDES0<8>=1) |
193 | RDES0_RF = 1 shl 11 ; Runt frame, valid only on last desc (RDES0<8>=1) and id overflow |
193 | RDES0_RF = 1 shl 11 ; Runt frame, valid only on last desc (RDES0<8>=1) and id overflow |
194 | RDES0_DT_SERIAL = 00b shl 12 ; Data type-Serial recv frame, valid only on last desc (RDES0<8>=1) |
194 | RDES0_DT_SERIAL = 00b shl 12 ; Data type-Serial recv frame, valid only on last desc (RDES0<8>=1) |
195 | RDES0_DT_INTERNAL = 01b shl 12 ; Data type-Internal loopback recv frame, valid only on last desc (RDES0<8>=1) |
195 | RDES0_DT_INTERNAL = 01b shl 12 ; Data type-Internal loopback recv frame, valid only on last desc (RDES0<8>=1) |
196 | RDES0_DT_EXTERNAL = 11b shl 12 ; Data type-External loopback recv frame, valid only on last desc (RDES0<8>=1) |
196 | RDES0_DT_EXTERNAL = 11b shl 12 ; Data type-External loopback recv frame, valid only on last desc (RDES0<8>=1) |
197 | RDES0_DE = 1 shl 14 ; Descriptor error - cant own a new desc and frame doesnt fit, valid only on last desc (RDES0<8>=1) |
197 | RDES0_DE = 1 shl 14 ; Descriptor error - can't own a new desc and frame doesn't fit, valid only on last desc (RDES0<8>=1) |
198 | RDES0_ES = 1 shl 15 ; Error Summmary - bits 1+6+11+14, valid only on last desc (RDES0<8>=1) |
198 | RDES0_ES = 1 shl 15 ; Error Summmary - bits 1+6+11+14, valid only on last desc (RDES0<8>=1) |
199 | RDES0_FL_SH = 16 ; Field length shift, valid only on last desc (RDES0<8>=1) |
199 | RDES0_FL_SH = 16 ; Field length shift, valid only on last desc (RDES0<8>=1) |
200 | RDES0_FL_MASK = 11111111111111b ; Field length mask (+CRC), valid only on last desc (RDES0<8>=1) |
200 | RDES0_FL_MASK = 11111111111111b ; Field length mask (+CRC), valid only on last desc (RDES0<8>=1) |
201 | RDES0_FF = 1 shl 30 ; Filtering fail-frame failed address recognition test(must CSR6<30>=1), valid only on last desc (RDES0<8>=1) |
201 | RDES0_FF = 1 shl 30 ; Filtering fail-frame failed address recognition test(must CSR6<30>=1), valid only on last desc (RDES0<8>=1) |
Line 204... | Line 204... | ||
204 | RDES1_RBS2_SH = 11 ; second buffer size SHIFT |
204 | RDES1_RBS2_SH = 11 ; second buffer size SHIFT |
205 | RDES1_RBS2_MASK = 11111111111b ; second buffer size MASK |
205 | RDES1_RBS2_MASK = 11111111111b ; second buffer size MASK |
206 | RDES1_RCH = 1 shl 24 ; Second address chained - second address (buffer) is next desc address |
206 | RDES1_RCH = 1 shl 24 ; Second address chained - second address (buffer) is next desc address |
207 | RDES1_RER = 1 shl 25 ; Receive End of Ring - final descriptor, NIC must return to first desc |
207 | RDES1_RER = 1 shl 25 ; Receive End of Ring - final descriptor, NIC must return to first desc |
Line 208... | Line 208... | ||
208 | 208 | ||
209 | ;transmition |
209 | ;transmission |
210 | TDES0_DE = 1 shl 0 ; Deffered |
210 | TDES0_DE = 1 shl 0 ; Deffered |
211 | TDES0_UF = 1 shl 1 ; Underflow error |
211 | TDES0_UF = 1 shl 1 ; Underflow error |
212 | TDES0_LF = 1 shl 2 ; Link fail report (only if CSR6<23>=1) |
212 | TDES0_LF = 1 shl 2 ; Link fail report (only if CSR6<23>=1) |
213 | TDES0_CC_SH = 3 ; Collision Count shift - no of collision before transmition |
213 | TDES0_CC_SH = 3 ; Collision Count shift - no of collision before transmission |
214 | TDES0_CC_MASK = 1111b ; Collision Count mask |
214 | TDES0_CC_MASK = 1111b ; Collision Count mask |
215 | TDES0_HF = 1 shl 7 ; Heartbeat fail |
215 | TDES0_HF = 1 shl 7 ; Heartbeat fail |
216 | TDES0_EC = 1 shl 8 ; Excessive Collisions - >16 collisions |
216 | TDES0_EC = 1 shl 8 ; Excessive Collisions - >16 collisions |
217 | TDES0_LC = 1 shl 9 ; Late collision |
217 | TDES0_LC = 1 shl 9 ; Late collision |
Line 379... | Line 379... | ||
379 | cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes |
379 | cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes |
380 | jb .fail |
380 | jb .fail |
Line 381... | Line 381... | ||
381 | 381 | ||
382 | mov eax, [edx + IOCTL.input] |
382 | mov eax, [edx + IOCTL.input] |
383 | cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given |
383 | cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given |
Line 384... | Line 384... | ||
384 | jne .fail ; other types arent supported for this card yet |
384 | jne .fail ; other types aren't supported for this card yet |
Line 385... | Line 385... | ||
385 | 385 | ||
386 | ; check if the device is already listed |
386 | ; check if the device is already listed |
Line 395... | Line 395... | ||
395 | .nextdevice: |
395 | .nextdevice: |
396 | mov ebx, [esi] |
396 | mov ebx, [esi] |
397 | cmp al, byte[ebx + device.pci_bus] |
397 | cmp al, byte[ebx + device.pci_bus] |
398 | jne @f |
398 | jne @f |
399 | cmp ah, byte[ebx + device.pci_dev] |
399 | cmp ah, byte[ebx + device.pci_dev] |
400 | je .find_devicenum ; Device is already loaded, let's find it's device number |
400 | je .find_devicenum ; Device is already loaded, let's find its device number |
401 | @@: |
401 | @@: |
402 | add esi, 4 |
402 | add esi, 4 |
403 | loop .nextdevice |
403 | loop .nextdevice |
Line 404... | Line 404... | ||
404 | 404 | ||
405 | 405 | ||
406 | ; This device doesnt have its own eth_device structure yet, lets create one |
406 | ; This device doesn't have its own eth_device structure yet, let's create one |
407 | .firstdevice: |
407 | .firstdevice: |
Line 408... | Line 408... | ||
408 | cmp [devices], MAX_DEVICES ; First check if the driver can handle one more card |
408 | cmp [devices], MAX_DEVICES ; First check if the driver can handle one more card |