1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
|
/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
* Copyright (c) 2026-present Eclipse ThreadX contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
*
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** USBX Component */
/** */
/** ASIX Class */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_host_class_asix.h PORTABLE C */
/* 6.2.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This file contains all the header and extern functions used by the */
/* USBX ASIX class. */
/* */
/**************************************************************************/
#ifndef UX_HOST_CLASS_ASIX_H
#define UX_HOST_CLASS_ASIX_H
/* Determine if a C++ compiler is being used. If so, ensure that standard
C is used to process the API information. */
#ifdef __cplusplus
/* Yes, C++ compiler is present. Use standard C. */
extern "C" {
#endif
#if !defined(UX_HOST_STANDALONE)
#include "nx_api.h"
#include "ux_network_driver.h"
#else
/* Assume NX things for compiling. */
#define NX_PACKET VOID*
#define NX_PACKET_POOL VOID*
#endif
/* Define to check if NetX preserved header size is compatible with ASIX. */
/* #define UX_HOST_CLASS_ASIX_HEADER_CHECK_ENABLE */
/* Define ASIX Class constants. Insert here the PID/VID of vendors and products using the Asix chipset. */
#ifndef UX_HOST_CLASS_ASIX_VENDOR_ID
#define UX_HOST_CLASS_ASIX_VENDOR_ID 0X2001
#define UX_HOST_CLASS_ASIX_PRODUCT_ID 0X3C05
#endif
#define UX_HOST_CLASS_ASIX_VENDOR_FUJIEI_ID 0X0B95
#define UX_HOST_CLASS_ASIX_PRODUCT_FUJIEI_ID 0X772B
#define UX_HOST_CLASS_ASIX_VENDOR_LINKSYS_ID 0X13B1
#define UX_HOST_CLASS_ASIX_PRODUCT_LINKSYS_ID 0X0018
/* Define ASIX supported VID and PID array (of 16-bits). */
#ifndef UX_HOST_CLASS_ASIX_VID_PID_ARRAY
#define UX_HOST_CLASS_ASIX_VID_PID_ARRAY \
UX_HOST_CLASS_ASIX_VENDOR_ID, UX_HOST_CLASS_ASIX_PRODUCT_ID, \
UX_HOST_CLASS_ASIX_VENDOR_FUJIEI_ID, UX_HOST_CLASS_ASIX_PRODUCT_FUJIEI_ID, \
UX_HOST_CLASS_ASIX_VENDOR_LINKSYS_ID, UX_HOST_CLASS_ASIX_PRODUCT_LINKSYS_ID
#endif
#define UX_HOST_CLASS_ASIX_SPEED_SELECTED_100MPBS 0x100
#define UX_HOST_CLASS_ASIX_SPEED_SELECTED_10MPBS 0x10
#define UX_HOST_CLASS_ASIX_LINK_STATE_DOWN 0
#define UX_HOST_CLASS_ASIX_LINK_STATE_UP 1
#define UX_HOST_CLASS_ASIX_LINK_STATE_PENDING_UP 2
#define UX_HOST_CLASS_ASIX_LINK_STATE_PENDING_DOWN 3
#define UX_HOST_CLASS_ASIX_BASE_IP_ADDRESS 0xC0A80001
#define UX_HOST_CLASS_ASIX_BASE_IP_MASK 0xFFFFFF00
#define UX_HOST_CLASS_ASIX_MAX_MTU 1518
#define UX_HOST_CLASS_ASIX_ETHERNET_IP 0x0800
#define UX_HOST_CLASS_ASIX_ETHERNET_ARP 0x0806
#define UX_HOST_CLASS_ASIX_ETHERNET_RARP 0x8035
#define UX_HOST_CLASS_ASIX_ETHERNET_PACKET_SIZE 1536
#define UX_HOST_CLASS_ASIX_NX_ALIGN_PADDING 2
#define UX_HOST_CLASS_ASIX_RX_HEADER_SIZE 4
#define UX_HOST_CLASS_ASIX_OVERHEAD_SIZE (UX_HOST_CLASS_ASIX_NX_ALIGN_PADDING + UX_HOST_CLASS_ASIX_RX_HEADER_SIZE)
#define UX_HOST_CLASS_ASIX_TRANSMIT_BUFFER_SIZE UX_HOST_CLASS_ASIX_NX_PAYLOAD_SIZE
#ifndef UX_HOST_CLASS_ASIX_RECEIVE_BUFFER_SIZE
#define UX_HOST_CLASS_ASIX_RECEIVE_BUFFER_SIZE 512 /* N*512. */
#endif
#ifdef NX_DISABLE_PACKET_CHAIN
#undef UX_HOST_CLASS_ASIX_PACKET_CHAIN_SUPPORT
#else
#define UX_HOST_CLASS_ASIX_PACKET_CHAIN_SUPPORT
#endif
#define UX_HOST_CLASS_ASIX_NX_PACKET_SIZE sizeof(NX_PACKET)
#define UX_HOST_CLASS_ASIX_NX_PAYLOAD_SIZE_ASSERT \
UX_COMPILE_TIME_ASSERT(!UX_OVERFLOW_CHECK_ADD_ULONG( \
UX_HOST_CLASS_ASIX_ETHERNET_PACKET_SIZE, \
UX_HOST_CLASS_ASIX_OVERHEAD_SIZE), \
UX_HOST_CLASS_ASIX_NX_PAYLOAD_SIZE_calc_ovf)
#define UX_HOST_CLASS_ASIX_NX_PAYLOAD_SIZE (UX_HOST_CLASS_ASIX_ETHERNET_PACKET_SIZE + UX_HOST_CLASS_ASIX_OVERHEAD_SIZE)
#define UX_HOST_CLASS_ASIX_NX_BUFF_SIZE_ASSERT \
UX_HOST_CLASS_ASIX_NX_PAYLOAD_SIZE_ASSERT \
UX_COMPILE_TIME_ASSERT(!UX_OVERFLOW_CHECK_ADD_ULONG( \
UX_HOST_CLASS_ASIX_NX_PAYLOAD_SIZE, \
UX_HOST_CLASS_ASIX_NX_PACKET_SIZE), \
UX_HOST_CLASS_ASIX_NX_BUFF_SIZE_calc_ovf)
#define UX_HOST_CLASS_ASIX_NX_BUFF_SIZE (UX_HOST_CLASS_ASIX_NX_PAYLOAD_SIZE + UX_HOST_CLASS_ASIX_NX_PACKET_SIZE)
#define UX_HOST_CLASS_ASIX_ETHERNET_SIZE 14
#define UX_HOST_CLASS_ASIX_DEVICE_INIT_DELAY (1 * UX_PERIODIC_RATE)
#define UX_HOST_CLASS_ASIX_CLASS_TRANSFER_TIMEOUT 300000
#define UX_HOST_CLASS_ASIX_SETUP_BUFFER_SIZE 16
#define UX_HOST_CLASS_ASIX_PACKET_POOL_WAIT 100
#define UX_HOST_CLASS_ASIX_PACKET_ALLOCATE_WAIT 2000
/* Define NetX errors inside the Asix class. */
#define UX_HOST_CLASS_ASIX_NX_SUCCESS 0x00
#define UX_HOST_CLASS_ASIX_NX_NO_PACKET 0x01
#define UX_HOST_CLASS_ASIX_NX_UNDERFLOW 0x02
#define UX_HOST_CLASS_ASIX_NX_OVERFLOW 0x03
#define UX_HOST_CLASS_ASIX_NX_NO_MAPPING 0x04
#define UX_HOST_CLASS_ASIX_NX_DELETED 0x05
#define UX_HOST_CLASS_ASIX_NX_POOL_ERROR 0x06
#define UX_HOST_CLASS_ASIX_NX_PTR_ERROR 0x07
#define UX_HOST_CLASS_ASIX_NX_WAIT_ERROR 0x08
#define UX_HOST_CLASS_ASIX_NX_SIZE_ERROR 0x09
#define UX_HOST_CLASS_ASIX_NX_OPTION_ERROR 0x0a
#define UX_HOST_CLASS_ASIX_NX_DELETE_ERROR 0x10
#define UX_HOST_CLASS_ASIX_NX_CALLER_ERROR 0x11
#define UX_HOST_CLASS_ASIX_NX_INVALID_PACKET 0x12
#define UX_HOST_CLASS_ASIX_NX_INVALID_SOCKET 0x13
#define UX_HOST_CLASS_ASIX_NX_NOT_ENABLED 0x14
#define UX_HOST_CLASS_ASIX_NX_ALREADY_ENABLED 0x15
#define UX_HOST_CLASS_ASIX_NX_ENTRY_NOT_FOUND 0x16
#define UX_HOST_CLASS_ASIX_NX_NO_MORE_ENTRIES 0x17
#define UX_HOST_CLASS_ASIX_NX_ARP_TIMER_ERROR 0x18
#define UX_HOST_CLASS_ASIX_NX_RESERVED_CODE0 0x19
#define UX_HOST_CLASS_ASIX_NX_WAIT_ABORTED 0x1A
#define UX_HOST_CLASS_ASIX_NX_IP_INTERNAL_ERROR 0x20
#define UX_HOST_CLASS_ASIX_NX_IP_ADDRESS_ERROR 0x21
#define UX_HOST_CLASS_ASIX_NX_ALREADY_BOUND 0x22
#define UX_HOST_CLASS_ASIX_NX_PORT_UNAVAILABLE 0x23
#define UX_HOST_CLASS_ASIX_NX_NOT_BOUND 0x24
#define UX_HOST_CLASS_ASIX_NX_RESERVED_CODE1 0x25
#define UX_HOST_CLASS_ASIX_NX_SOCKET_UNBOUND 0x26
#define UX_HOST_CLASS_ASIX_NX_NOT_CREATED 0x27
#define UX_HOST_CLASS_ASIX_NX_SOCKETS_BOUND 0x28
#define UX_HOST_CLASS_ASIX_NX_NO_RESPONSE 0x29
#define UX_HOST_CLASS_ASIX_NX_POOL_DELETED 0x30
#define UX_HOST_CLASS_ASIX_NX_ALREADY_RELEASED 0x31
#define UX_HOST_CLASS_ASIX_NX_RESERVED_CODE2 0x32
#define UX_HOST_CLASS_ASIX_NX_MAX_LISTEN 0x33
#define UX_HOST_CLASS_ASIX_NX_DUPLICATE_LISTEN 0x34
#define UX_HOST_CLASS_ASIX_NX_NOT_CLOSED 0x35
#define UX_HOST_CLASS_ASIX_NX_NOT_LISTEN_STATE 0x36
#define UX_HOST_CLASS_ASIX_NX_IN_PROGRESS 0x37
#define UX_HOST_CLASS_ASIX_NX_NOT_CONNECTED 0x38
#define UX_HOST_CLASS_ASIX_NX_WINDOW_OVERFLOW 0x39
#define UX_HOST_CLASS_ASIX_NX_ALREADY_SUSPENDED 0x40
#define UX_HOST_CLASS_ASIX_NX_DISCONNECT_FAILED 0x41
#define UX_HOST_CLASS_ASIX_NX_STILL_BOUND 0x42
#define UX_HOST_CLASS_ASIX_NX_NOT_SUCCESSFUL 0x43
#define UX_HOST_CLASS_ASIX_NX_UNHANDLED_COMMAND 0x44
#define UX_HOST_CLASS_ASIX_NX_NO_FREE_PORTS 0x45
#define UX_HOST_CLASS_ASIX_NX_INVALID_PORT 0x46
#define UX_HOST_CLASS_ASIX_NX_INVALID_RELISTEN 0x47
#define UX_HOST_CLASS_ASIX_NX_CONNECTION_PENDING 0x48
#define UX_HOST_CLASS_ASIX_NX_TX_QUEUE_DEPTH 0x49
#define UX_HOST_CLASS_ASIX_NX_NOT_IMPLEMENTED 0x80
/* Define ASIX command request values. */
#define UX_HOST_CLASS_ASIX_REQ_RX_TX_SRAM_REG_READ 0x02
#define UX_HOST_CLASS_ASIX_REQ_RX_TX_SRAM_REG_WRITE 0x03
#define UX_HOST_CLASS_ASIX_REQ_OWN_SMI 0x06
#define UX_HOST_CLASS_ASIX_REQ_READ_PHY_REG 0x07
#define UX_HOST_CLASS_ASIX_REQ_WRITE_PHY_REG 0x08
#define UX_HOST_CLASS_ASIX_REQ_READ_STATION_STATUS 0x09
#define UX_HOST_CLASS_ASIX_REQ_WHO_OWNS_SMI 0x09
#define UX_HOST_CLASS_ASIX_REQ_RELEASE_SMI 0x0a
#define UX_HOST_CLASS_ASIX_REQ_READ_SROM 0x0b
#define UX_HOST_CLASS_ASIX_REQ_WRITE_SROM 0x0c
#define UX_HOST_CLASS_ASIX_REQ_WRITE_SROM_EN 0x0d
#define UX_HOST_CLASS_ASIX_REQ_WRITE_SROM_DIS 0x0e
#define UX_HOST_CLASS_ASIX_REQ_READ_RX_CTL 0x0f
#define UX_HOST_CLASS_ASIX_REQ_WRITE_RX_CTL 0x10
#define UX_HOST_CLASS_ASIX_REQ_READ_IPG012 0x11
#define UX_HOST_CLASS_ASIX_REQ_WRITE_IPG012 0x12
#define UX_HOST_CLASS_ASIX_REQ_READ_NODE_ID 0x13
#define UX_HOST_CLASS_ASIX_REQ_WRITE_NODE_ID 0x14
#define UX_HOST_CLASS_ASIX_REQ_WRITE_MULTICAST_FILTER 0x16
#define UX_HOST_CLASS_ASIX_REQ_TEST_REGISTER 0x17
#define UX_HOST_CLASS_ASIX_REQ_READ_PHY_ID 0x19
#define UX_HOST_CLASS_ASIX_REQ_READ_MEDIUM_STATUS 0x1a
#define UX_HOST_CLASS_ASIX_REQ_WRITE_MEDIUM_MODE 0x1b
#define UX_HOST_CLASS_ASIX_REQ_READ_MONITOR_MODE_STATUS 0x1c
#define UX_HOST_CLASS_ASIX_REQ_WRITE_MONITOR_MODE_STATUS 0x1d
#define UX_HOST_CLASS_ASIX_REQ_READ_GPIO_STATUS 0x1e
#define UX_HOST_CLASS_ASIX_REQ_WRITE_GPIO_STATUS 0x1f
#define UX_HOST_CLASS_ASIX_REQ_SW_RESET 0x20
#define UX_HOST_CLASS_ASIX_REQ_READ_SW_PHY_SELECT_STATUS 0x21
#define UX_HOST_CLASS_ASIX_REQ_WRITE_SW_PHY_SELECT_STATUS 0x22
/* Define ASIX Interrupt Packet format. */
#define UX_HOST_CLASS_ASIX_INTERRUPT_SIGNATURE_VALUE 0xA1
#define UX_HOST_CLASS_ASIX_INTERRUPT_SIGNATURE_OFFSET 0x00
#define UX_HOST_CLASS_ASIX_INTERRUPT_STATE_OFFSET 0x02
#define UX_HOST_CLASS_ASIX_INTERRUPT_STATE_PPLS 0x01
#define UX_HOST_CLASS_ASIX_INTERRUPT_STATE_SPLS 0x02
#define UX_HOST_CLASS_ASIX_INTERRUPT_STATE_FLE 0x04
#define UX_HOST_CLASS_ASIX_INTERRUPT_STATE_MDINT 0x08
#define UX_HOST_CLASS_ASIX_INTERRUPT_PHY_REG_VALUE_OFFSET 0x05
/* Define ASIX Class PHY ID Packet format. */
#define UX_HOST_CLASS_ASIX_PHY_ID_SECONDARY 0x00
#define UX_HOST_CLASS_ASIX_PHY_ID_PRIMARY 0x01
#define UX_HOST_CLASS_ASIX_PHY_ID_MASK 0x01f
#define UX_HOST_CLASS_ASIX_PHY_TYPE_SHIFT 0x05
#define UX_HOST_CLASS_ASIX_PHY_TYPE_MASK 0x07
/* Define ASIX Class GPIO Register. */
#define UX_HOST_CLASS_ASIX_GPIO_GPO0EN 0x01
#define UX_HOST_CLASS_ASIX_GPIO_GPO_0 0x02
#define UX_HOST_CLASS_ASIX_GPIO_GPO1EN 0x04
#define UX_HOST_CLASS_ASIX_GPIO_GPO_1 0x08
#define UX_HOST_CLASS_ASIX_GPIO_GPO2EN 0x10
#define UX_HOST_CLASS_ASIX_GPIO_GPO_2 0x20
#define UX_HOST_CLASS_ASIX_GPIO_RSE 0x80
/* Define ASIX Class Software reset Register. */
#define UX_HOST_CLASS_ASIX_SW_RESET_RR 0x01
#define UX_HOST_CLASS_ASIX_SW_RESET_RT 0x02
#define UX_HOST_CLASS_ASIX_SW_RESET_PRTE 0x04
#define UX_HOST_CLASS_ASIX_SW_RESET_PRL 0x08
#define UX_HOST_CLASS_ASIX_SW_RESET_BZ 0x10
#define UX_HOST_CLASS_ASIX_SW_RESET_IPRL 0x20
#define UX_HOST_CLASS_ASIX_SW_RESET_IPPD 0x40
/* Define ASIX Class Receive Control Register. */
#define UX_HOST_CLASS_ASIX_RXCR_PRO 0x0001
#define UX_HOST_CLASS_ASIX_RXCR_AMALL 0x0002
#define UX_HOST_CLASS_ASIX_RXCR_SEP 0x0004
#define UX_HOST_CLASS_ASIX_RXCR_AB 0x0008
#define UX_HOST_CLASS_ASIX_RXCR_AM 0x0010
#define UX_HOST_CLASS_ASIX_RXCR_AP 0x0020
#define UX_HOST_CLASS_ASIX_RXCR_SO 0x0080
/* 88772. */
#define UX_HOST_CLASS_ASIX_RXCR_MFB_2048 0x0000
#define UX_HOST_CLASS_ASIX_RXCR_MFB_4096 0x0100
#define UX_HOST_CLASS_ASIX_RXCR_MFB_8192 0x0200
#define UX_HOST_CLASS_ASIX_RXCR_MFB_16384 0x0300 /* Default. */
/* 88772B. */
#define UX_HOST_CLASS_ASIX_RXCR_RH1M 0x0100 /* Default 1. */
#define UX_HOST_CLASS_ASIX_RXCR_RH2M 0x0200 /* Default 0. */
#define UX_HOST_CLASS_ASIX_RXCR_RH3M 0x0400 /* Default 0. */
/* Define ASIX Class packet equivalences. */
#define UX_HOST_CLASS_ASIX_PACKET_SIZE 128
#define UX_HOST_CLASS_ASIX_NODE_ID_LENGTH 6
#define UX_HOST_CLASS_ASIX_RX_PACKET_LENGTH_MASK 0xFFF
/* Define ASIX PHY registers description. */
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR 0x00
#define UX_HOST_CLASS_ASIX_PHY_REG_BMSR 0x01
#define UX_HOST_CLASS_ASIX_PHY_REG_PHYIDR1 0x02
#define UX_HOST_CLASS_ASIX_PHY_REG_PHYIDR2 0x03
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR 0x04
#define UX_HOST_CLASS_ASIX_PHY_REG_ANLPAR 0x05
#define UX_HOST_CLASS_ASIX_PHY_REG_ANER 0x06
/* Define ASIX PHY BMCR registers description. */
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_RESET 0x8000
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_LOOPBACK_ENABLED 0x4000
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_SPEED_100MBS 0x2000
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_SPEED_10MBS 0x0000
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_AUTO_NEGOTIATION 0x1000
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_POWER_DOWN 0x0800
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_ISOLATE 0x0400
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_RESTART_NEG 0x0200
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_DUPLEX_MODE 0x0100
#define UX_HOST_CLASS_ASIX_PHY_REG_BMCR_COLLISION_TEST 0x0080
/* Define ASIX PHY PHYIDR1 register description. */
#define UX_HOST_CLASS_ASIX_PHY_REG_PHYIDR1_MDL_REV_SHIFT 0x00
#define UX_HOST_CLASS_ASIX_PHY_REG_PHYIDR1_MDL_REV_MASK 0x0f
#define UX_HOST_CLASS_ASIX_PHY_REG_PHYIDR1_VNDR_REV_SHIFT 0x04
#define UX_HOST_CLASS_ASIX_PHY_REG_PHYIDR1_VNDR_REV_MASK 0x2f
/* Define ASIX PHY ANAR register description. */
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_DEFAULT_SELECTOR 0x0001
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_10_HD 0x0020
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_10_FD 0x0040
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_TX_HD 0x0080
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_TX_FD 0x0100
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_T4 0x0200
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_PAUSE 0x0400
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_RF 0x1000
#define UX_HOST_CLASS_ASIX_PHY_REG_ANAR_ACK 0x2000
/* Define ASIX MEDIUM register description. */
#define UX_HOST_CLASS_ASIX_MEDIUM_FD 0x0002
#define UX_HOST_CLASS_ASIX_MEDIUM_BIT2 0x0004
#define UX_HOST_CLASS_ASIX_MEDIUM_BIT3 0x0000
#define UX_HOST_CLASS_ASIX_MEDIUM_RFC_ENABLED 0x0010
#define UX_HOST_CLASS_ASIX_MEDIUM_TFC_ENABLED 0x0020
#define UX_HOST_CLASS_ASIX_MEDIUM_RE_ENABLED 0x0100
#define UX_HOST_CLASS_ASIX_MEDIUM_PS 0x0200
#define UX_HOST_CLASS_ASIX_MEDIUM_SBP 0x0800
#define UX_HOST_CLASS_ASIX_MEDIUM_SM 0x1000
/* Define ASIX IPG default values register description. */
#define UX_HOST_CLASS_ASIX_PPG0_IPG1 0x0C15
#define UX_HOST_CLASS_ASIX_PPG2 0x000E
/* Define ASIX Reception States. */
#define UX_HOST_CLASS_ASIX_RECEPTION_STATE_STOPPED 0
#define UX_HOST_CLASS_ASIX_RECEPTION_STATE_STARTED 1
#define UX_HOST_CLASS_ASIX_RECEPTION_STATE_IN_TRANSFER 2
/* Define ASIX Class instance structure. */
typedef struct UX_HOST_CLASS_ASIX_STRUCT
{
struct UX_HOST_CLASS_ASIX_STRUCT
*ux_host_class_asix_next_instance;
UX_HOST_CLASS *ux_host_class_asix_class;
UX_DEVICE *ux_host_class_asix_device;
UX_ENDPOINT *ux_host_class_asix_bulk_in_endpoint;
UX_ENDPOINT *ux_host_class_asix_bulk_out_endpoint;
UX_ENDPOINT *ux_host_class_asix_interrupt_endpoint;
UX_INTERFACE *ux_host_class_asix_interface;
UINT ux_host_class_asix_instance_status;
UINT ux_host_class_asix_state;
UX_SEMAPHORE ux_host_class_asix_semaphore;
UX_SEMAPHORE ux_host_class_asix_interrupt_notification_semaphore;
UX_THREAD ux_host_class_asix_thread;
UCHAR *ux_host_class_asix_thread_stack;
ULONG ux_host_class_asix_notification_count;
ULONG ux_host_class_asix_primary_phy_id;
ULONG ux_host_class_asix_primary_phy_type;
ULONG ux_host_class_asix_secondary_phy_id;
ULONG ux_host_class_asix_secondary_phy_type;
ULONG ux_host_class_asix_model_revision_number;
ULONG ux_host_class_asix_vendor_model_number;
ULONG ux_host_class_asix_speed_selected;
ULONG ux_host_class_asix_device_state;
ULONG ux_host_class_asix_link_state;
NX_PACKET *ux_host_class_asix_xmit_queue;
#ifdef UX_HOST_CLASS_ASIX_PACKET_CHAIN_SUPPORT
UCHAR *ux_host_class_asix_xmit_buffer;
#endif
NX_PACKET *ux_host_class_asix_receive_queue;
UCHAR *ux_host_class_asix_receive_buffer;
NX_PACKET_POOL *ux_host_class_asix_packet_pool;
ULONG ux_host_class_asix_packet_available_min;
UCHAR ux_host_class_asix_node_id[UX_HOST_CLASS_ASIX_NODE_ID_LENGTH];
VOID (*ux_host_class_asix_device_status_change_callback)(struct UX_HOST_CLASS_ASIX_STRUCT *asix,
ULONG device_state);
VOID *ux_host_class_asix_network_handle;
} UX_HOST_CLASS_ASIX;
/* Define ASIX reception structure. */
typedef struct UX_HOST_CLASS_ASIX_RECEPTION_STRUCT
{
ULONG ux_host_class_asix_reception_state;
ULONG ux_host_class_asix_reception_block_size;
UCHAR *ux_host_class_asix_reception_data_buffer;
ULONG ux_host_class_asix_reception_data_buffer_size;
UCHAR *ux_host_class_asix_reception_data_head;
UCHAR *ux_host_class_asix_reception_data_tail;
VOID (*ux_host_class_asix_reception_callback)(struct UX_HOST_CLASS_ASIX_STRUCT *asix,
UINT status,
UCHAR *reception_buffer,
ULONG reception_size);
} UX_HOST_CLASS_ASIX_RECEPTION;
/* Define Asix Class function prototypes. */
UINT _ux_host_class_asix_activate(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_asix_configure(UX_HOST_CLASS_ASIX *asix);
UINT _ux_host_class_asix_deactivate(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_asix_endpoints_get(UX_HOST_CLASS_ASIX *asix);
UINT _ux_host_class_asix_entry(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_asix_read (UX_HOST_CLASS_ASIX *asix, UCHAR *data_pointer,
ULONG requested_length, ULONG *actual_length);
UINT _ux_host_class_asix_write(VOID *asix_class, NX_PACKET *packet);
VOID _ux_host_class_asix_interrupt_notification(UX_TRANSFER *transfer_request);
VOID _ux_host_class_asix_reception_callback (UX_TRANSFER *transfer_request);
VOID _ux_host_class_asix_thread(ULONG parameter);
VOID _ux_host_class_asix_transmission_callback (UX_TRANSFER *transfer_request);
UINT _ux_host_class_asix_setup(UX_HOST_CLASS_ASIX *asix);
/* Define Asix Class API prototypes. */
#define ux_host_class_asix_entry _ux_host_class_asix_entry
#define ux_host_class_asix_read _ux_host_class_asix_read
#define ux_host_class_asix_write _ux_host_class_asix_write
/* Determine if a C++ compiler is being used. If so, complete the standard
C conditional started above. */
#ifdef __cplusplus
}
#endif
#endif
|