@@ -98,6 +98,26 @@ net_ena_reset:
9898
9999 ; Stop queues if they are running
100100
101+ ; Reset interface
102+ mov eax , 1
103+ mov [ rsi + ENA_DEV_CTL ], eax
104+
105+ ; Wait for reset
106+ net_ena_reset_wait:
107+ mov eax , [ rsi + ENA_DEV_STS ]
108+ bt eax , 3
109+ jc net_ena_reset_wait
110+
111+ ; Clear reset
112+ xor eax , eax
113+ mov [ rsi + ENA_DEV_CTL ], eax
114+
115+ ; Wait for reset clear
116+ net_ena_reset_wait_clear:
117+ mov eax , [ rsi + ENA_DEV_STS ]
118+ bt eax , 3
119+ jnc net_ena_reset_wait_clear
120+
101121 ; Check ENA_DEV_STS.READY
102122 mov eax , [ rsi + ENA_DEV_STS ]
103123 test eax , 1
@@ -132,7 +152,7 @@ net_ena_reset:
132152 ; Check ENA_DEV_STS.READY
133153
134154 ; Build an Admin command
135- ; opcode ENA_ADMIN_GET_FEATURE = 0x0009
155+ ; opcode ENA_ADMIN_GET_FEATURE = 0x0008
136156 ; feat_id ENA_ADMIN_DEVICE_ATTRIBUTES = 1
137157 ; Put it in the queue
138158 ; Wait for completion
@@ -247,6 +267,53 @@ ENA_MMIO_RESP_LO equ 0x60
247267ENA_MMIO_RESP_HI equ 0x64
248268ENA_RSS_IND_ENTRY_UPDATE equ 0x68
249269
270+ ; Admin Queue Opcodes
271+ ENA_ADMIN_CREATE_SQ equ 1
272+ ENA_ADMIN_DESTROY_SQ equ 2
273+ ENA_ADMIN_CREATE_CQ equ 3
274+ ENA_ADMIN_DESTROY_CQ equ 4
275+ ENA_ADMIN_GET_FEATURE equ 8
276+ ENA_ADMIN_SET_FEATURE equ 9
277+ ENA_ADMIN_GET_STATS equ 11
278+
279+ ; Admin Queue Status
280+ ENA_ADMIN_SUCCESS equ 0
281+ ENA_ADMIN_RESOURCE_ALLOCATION_FAILURE equ 1
282+ ENA_ADMIN_BAD_OPCODE equ 2
283+ ENA_ADMIN_UNSUPPORTED_OPCODE equ 3
284+ ENA_ADMIN_MALFORMED_REQUEST equ 4
285+ ENA_ADMIN_ILLEGAL_PARAMETER equ 5
286+ ENA_ADMIN_UNKNOWN_ERROR equ 6
287+ ENA_ADMIN_RESOURCE_BUSY equ 7
288+
289+ ; Admin Queue Feature ID
290+ ENA_ADMIN_DEVICE_ATTRIBUTES equ 1
291+ ENA_ADMIN_MAX_QUEUES_NUM equ 2
292+ ENA_ADMIN_HW_HINTS equ 3
293+ ENA_ADMIN_LLQ equ 4
294+ ENA_ADMIN_MAX_QUEUES_EXT equ 7
295+ ENA_ADMIN_RSS_HASH_FUNCTION equ 10
296+ ENA_ADMIN_STATELESS_OFFLOAD_CONFIG equ 11
297+ ENA_ADMIN_RSS_INDIRECTION_TABLE_CONFIG equ 12
298+ ENA_ADMIN_MTU equ 14
299+ ENA_ADMIN_RSS_HASH_INPUT equ 18
300+ ENA_ADMIN_INTERRUPT_MODERATION equ 20
301+ ENA_ADMIN_AENQ_CONFIG equ 26
302+ ENA_ADMIN_LINK_CONFIG equ 27
303+ ENA_ADMIN_HOST_ATTR_CONFIG equ 28
304+ ENA_ADMIN_FEATURES_OPCODE_NUM equ 32
305+
306+ ; Speeds
307+ ENA_ADMIN_LINK_SPEED_1G equ 0x1
308+ ENA_ADMIN_LINK_SPEED_2_HALF_G equ 0x2
309+ ENA_ADMIN_LINK_SPEED_5G equ 0x4
310+ ENA_ADMIN_LINK_SPEED_10G equ 0x8
311+ ENA_ADMIN_LINK_SPEED_25G equ 0x10
312+ ENA_ADMIN_LINK_SPEED_40G equ 0x20
313+ ENA_ADMIN_LINK_SPEED_50G equ 0x40
314+ ENA_ADMIN_LINK_SPEED_100G equ 0x80
315+ ENA_ADMIN_LINK_SPEED_200G equ 0x100
316+ ENA_ADMIN_LINK_SPEED_400G equ 0x200
250317
251318; Register bits
252319
0 commit comments