~ubuntu-branches/ubuntu/lucid/ndiswrapper/lucid

« back to all changes in this revision

Viewing changes to driver/ndis.h

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2005-09-30 14:56:14 UTC
  • mfrom: (2.1.1 sarge)
  • Revision ID: james.westby@ubuntu.com-20050930145614-eh1a93tehp8nszrm
Tags: 1.1-4ubuntu2
debian/control: Update description to point out that the kernel source
package is not required with the standard Ubuntu kernel.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 *  Copyright (C) 2003-2004 Pontus Fuchs, Giridhar Pemmasani
 
2
 *  Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
3
3
 *
4
4
 *  This program is free software; you can redistribute it and/or modify
5
5
 *  it under the terms of the GNU General Public License as published by
18
18
 
19
19
#include "ntoskernel.h"
20
20
 
 
21
#define NDIS_DMA_24BITS 0
 
22
#define NDIS_DMA_32BITS 1
 
23
#define NDIS_DMA_64BITS 2
 
24
 
 
25
#ifdef CONFIG_X86_64
 
26
#define MAXIMUM_PROCESSORS  64
 
27
#else
 
28
#define MAXIMUM_PROCESSORS  32
 
29
#endif
 
30
 
21
31
typedef UINT NDIS_STATUS;
22
32
typedef UCHAR NDIS_DMA_SIZE;
23
 
 
24
 
typedef union packed ndis_phy_address {
25
 
        ULONGLONG quad;
26
 
        struct packed {
27
 
                ULONG low;
28
 
                ULONG high;
29
 
        } s;
30
 
} NDIS_PHY_ADDRESS;
31
 
 
32
 
struct packed ndis_sg_element {
33
 
        NDIS_PHY_ADDRESS address;
34
 
        UINT len;
35
 
        UINT reserved;
 
33
typedef LONG ndis_rssi;
 
34
typedef ULONG ndis_key_index;
 
35
typedef ULONG ndis_tx_power_level;
 
36
typedef ULONGULONG ndis_key_rsc;
 
37
typedef UCHAR ndis_rates[NDIS_MAX_RATES_EX];
 
38
typedef UCHAR mac_address[ETH_ALEN];
 
39
typedef ULONG ndis_fragmentation_threshold;
 
40
typedef ULONG ndis_rts_threshold;
 
41
typedef ULONG ndis_antenna;
 
42
typedef ULONG ndis_oid;
 
43
 
 
44
typedef uint64_t NDIS_PHY_ADDRESS;
 
45
 
 
46
struct ndis_sg_element {
 
47
        PHYSICAL_ADDRESS address;
 
48
        ULONG length;
 
49
        ULONG_PTR reserved;
36
50
};
37
51
 
38
 
struct packed ndis_sg_list {
39
 
        UINT len;
40
 
        UINT reserved;
 
52
struct ndis_sg_list {
 
53
        ULONG nent;
 
54
        ULONG_PTR reserved;
41
55
        struct ndis_sg_element *elements;
42
56
};
43
57
 
46
60
        UINT length;
47
61
};
48
62
 
49
 
struct ndis_buffer {
50
 
        struct ndis_buffer *next;
51
 
        UINT len;
52
 
        UINT offset;
53
 
        UCHAR *data;
54
 
};
55
 
 
56
 
enum mm_page_priority {
57
 
        LOW_PAGE_PRIORITY,
58
 
        NORMAL_PAGE_PRIORITY = 16,
59
 
        HIGH_PAGE_PRIORITY = 32
60
 
};
61
 
 
62
 
enum kinterrupt_mode {
63
 
        INTERRUT_MODE_LEVELSENSITIVE,
64
 
        INTERRUPT_MODE_LATCHED
65
 
};
 
63
struct ndis_buffer_pool {
 
64
        int max_descr;
 
65
        int num_allocated_descr;
 
66
        ndis_buffer *free_descr;
 
67
        KSPIN_LOCK lock;
 
68
};
 
69
 
 
70
#define fPACKET_WRAPPER_RESERVED                0x3F
 
71
#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO    0x40
 
72
#define fPACKET_ALLOCATED_BY_NDIS               0x80
66
73
 
67
74
enum ndis_per_packet_info {
68
 
        NDIS_TCPIP_CSUM_INFO,
69
 
        NDIS_IPSEC_INFO,
70
 
        NDIS_LARGE_SEND_INFO,
71
 
        NDIS_CLASS_HANDLE_INFO,
72
 
        NDIS_RSVD,
73
 
        NDIS_SCLIST_INFO,
74
 
        NDIS_IEEE8021Q_INFO,
75
 
        NDIS_ORIGINAL_PACKET_INFO,
76
 
        NDIS_PACKET_CANCELID,
77
 
        NDIS_MAX_PACKET_INFO
 
75
        TcpIpChecksumPacketInfo,
 
76
        IpSecPacketInfo,
 
77
        TcpLargeSendPacketInfo,
 
78
        ClassificationHandlePacketInfo,
 
79
        NdisReserved,
 
80
        ScatterGatherListPacketInfo,
 
81
        Ieee8021QInfo,
 
82
        OriginalPacketInfo,
 
83
        PacketCancelId,
 
84
        MaxPerPacketInfo
78
85
};
79
86
 
80
87
struct ndis_packet_extension {
81
 
        void *info[NDIS_MAX_PACKET_INFO];
 
88
        void *info[MaxPerPacketInfo];
82
89
};
83
90
 
84
91
struct ndis_packet_private {
85
92
        UINT nr_pages;
86
93
        UINT len;
87
 
        struct ndis_buffer *buffer_head;
88
 
        struct ndis_buffer *buffer_tail;
 
94
        ndis_buffer *buffer_head;
 
95
        ndis_buffer *buffer_tail;
89
96
        void *pool;
90
97
        UINT count;
91
98
        ULONG flags;
94
101
        USHORT oob_offset;
95
102
};
96
103
 
97
 
struct packed ndis_packet {
 
104
/* OOB data */
 
105
struct ndis_packet_oob_data {
 
106
        union {
 
107
                ULONGLONG time_to_tx;
 
108
                ULONGLONG time_txed;
 
109
        } oob_tx;
 
110
        ULONGLONG time_rxed;
 
111
        UINT header_size;
 
112
        UINT mediaspecific_size;
 
113
        void *mediaspecific;
 
114
        NDIS_STATUS status;
 
115
};
 
116
 
 
117
struct ndis_packet {
98
118
 
99
119
        struct ndis_packet_private private;
100
120
 
102
122
        union {
103
123
                /* for connectionless mininports */
104
124
                struct {
105
 
                        BYTE miniport_reserved[2 * sizeof(void *)];
106
 
                        BYTE wrapper_reserved[2 * sizeof(void *)];
 
125
                        UCHAR miniport_reserved[2 * sizeof(void *)];
 
126
                        UCHAR wrapper_reserved[2 * sizeof(void *)];
107
127
                } cl_reserved;
108
128
                /* for deserialized miniports */
109
129
                struct {
110
 
                        BYTE miniport_reserved_ex[3 * sizeof(void *)];
111
 
                        BYTE wrapper_reserved_ex[sizeof(void *)];
 
130
                        UCHAR miniport_reserved_ex[3 * sizeof(void *)];
 
131
                        UCHAR wrapper_reserved_ex[sizeof(void *)];
112
132
                } deserailized_reserved;
113
133
                struct {
114
 
                        BYTE mac_reserved[4 * sizeof(void *)];
 
134
                        UCHAR mac_reserved[4 * sizeof(void *)];
115
135
                } mac_reserved;
116
136
        } u;
117
137
        ULONG_PTR reserved[2];
118
138
        UCHAR protocol_reserved[1];
119
139
 
120
 
        /* OOB data */
121
 
        union {
122
 
                ULONGLONG time_to_tx;
123
 
                ULONGLONG time_txed;
124
 
        } oob_tx;
125
 
        ULONGLONG time_rxed;
126
 
        UINT header_size;
127
 
        UINT mediaspecific_size;
128
 
        void *mediaspecific;
129
 
        NDIS_STATUS status;
130
 
 
 
140
        struct ndis_packet_oob_data oob_data;
131
141
        struct ndis_packet_extension extension;
132
142
 
 
143
        /* ndiswrapper specific info */
 
144
        struct ndis_packet *next;
 
145
        struct scatterlist *sg_list;
 
146
        unsigned int sg_ents;
133
147
        /* ndiswrapper-specific info */
134
 
        struct ndis_sg_list sg_list;
135
 
        /* since we haven't implemented sg, we use one dummy entry */
136
 
        struct ndis_sg_element sg_element;
137
 
        dma_addr_t dataphys;
138
 
        struct list_head recycle_list;
 
148
        struct ndis_sg_list ndis_sg_list;
 
149
        struct ndis_sg_element *ndis_sg_elements;
 
150
        /* RTL8180L overshoots past ndis_eg_elements (during
 
151
         * MiniportSendPackets) and overwrites what is below, if SG
 
152
         * DMA is used, so don't use ndis_sg_element in that
 
153
         * case. This structure is used only when SG is disabled */
 
154
        struct ndis_sg_element ndis_sg_element;
 
155
 
139
156
        unsigned char header[ETH_HLEN];
140
157
        unsigned char *look_ahead;
141
 
        unsigned int look_ahead_size;
142
 
};
143
 
 
144
 
enum ndis_pnp_event {
145
 
        NDIS_PNP_QUERY_REMOVED,
146
 
        NDIS_PNP_REMOVED,
147
 
        NDIS_PNP_SURPRISE_REMOVED,
148
 
        NDIS_PNP_QUERY_STOPPED,
149
 
        NDIS_PNP_STOPPED,
150
 
        NDIS_PNP_PROFILE_CHANGED,
151
 
        NDIS_PNP_MAXIMUM,
152
 
};
153
 
 
154
 
enum work_queue_type {
155
 
        CRITICAL_WORK_QUEUE,
156
 
        DELAYED_WORK_QUEUE,
157
 
        HYPER_CRITICAL_WORK_QUEUE,
158
 
        MAXIMUM_WORK_QUEUE
 
158
        UINT look_ahead_size;
 
159
};
 
160
 
 
161
struct ndis_packet_pool {
 
162
        int max_descr;
 
163
        int num_allocated_descr;
 
164
        struct ndis_packet *free_descr;
 
165
        KSPIN_LOCK lock;
 
166
};
 
167
 
 
168
enum ndis_device_pnp_event {
 
169
        NdisDevicePnPEventQueryRemoved,
 
170
        NdisDevicePnPEventRemoved,
 
171
        NdisDevicePnPEventSurpriseRemoved,
 
172
        NdisDevicePnPEventQueryStopped,
 
173
        NdisDevicePnPEventStopped,
 
174
        NdisDevicePnPEventPowerProfileChanged,
 
175
        NdisDevicePnPEventMaximum
159
176
};
160
177
 
161
178
enum ndis_request_type {
162
 
        NDIS_REQUEST_QUERY_INFORMATION,
163
 
        NDIS_REQUEST_SET_INFORMATION,
164
 
        NDIS_REQUEST_QUERY_STATISTICS,
165
 
        NDIS_REQUEST_OPEN,
166
 
        NDIS_REQUEST_CLOSE,
167
 
        NDIS_REQUEST_SEND,
168
 
        NDIS_REQUEST_TRANSFER_DATA,
169
 
        NDIS_REQUEST_RESET,
170
 
        NDIS_REQUEST_GENERIC1,
171
 
        NDIS_REQUEST_GENERIC2,
172
 
        NDIS_REQUEST_GENERIC3,
173
 
        NDIS_REQUEST_GENERIC4
 
179
        NdisRequestQueryInformation,
 
180
        NdisRequestSetInformation,
 
181
        NdisRequestQueryStatistics,
 
182
        NdisRequestOpen,
 
183
        NdisRequestClose,
 
184
        NdisRequestSend,
 
185
        NdisRequestTransferData,
 
186
        NdisRequestReset,
 
187
        NdisRequestGeneric1,
 
188
        NdisRequestGeneric2,
 
189
        NdisRequestGeneric3,
 
190
        NdisRequestGeneric4
174
191
};
175
192
 
176
193
struct ndis_request {
195
212
};
196
213
 
197
214
enum ndis_medium {
198
 
        NDIS_MEDIUM_802_3,
199
 
        NDIS_MEDIUM_802_5,
200
 
        NDIS_MEDIUM_FDDI,
201
 
        NDIS_MEDIUM_WAN,
202
 
        NDIS_MEDIUM_LOCALTALK,
203
 
        NDIS_MEDIUM_DIX,
204
 
        NDIS_MEDIUM_ARCNETRAW,
205
 
        NDIS_MEDIUM_ARCNET878_2,
206
 
        NDIS_MEDIUM_ATM,
207
 
        NDIS_MEDIUM_WIRELESSWAN,
208
 
        NDIS_MEDIUM_IRDA,
209
 
        NDIS_MEDIUM_BPC,
210
 
        NDIS_MEDIUM_COWAN,
211
 
        NDIS_MEDIUM_1394,
212
 
        NDIS_MEDIUM_MAX
 
215
        NdisMedium802_3,
 
216
        NdisMedium802_5,
 
217
        NdisMediumFddi,
 
218
        NdisMediumWan,
 
219
        NdisMediumLocalTalk,
 
220
        NdisMediumDix,
 
221
        NdisMediumArcnetRaw,
 
222
        NdisMediumArcnet878_2,
 
223
        NdisMediumAtm,
 
224
        NdisMediumWirelessWan,
 
225
        NdisMediumIrda,
 
226
        NdisMediumBpc,
 
227
        NdisMediumCoWan,
 
228
        NdisMedium1394,
 
229
        NdisMediumMax
213
230
};
214
231
 
215
232
enum ndis_phys_medium {
216
 
        NDIS_PHYSICAL_MEDIUM_UNSPECIFIED,
217
 
        NDIS_PHYSICAL_MEDIUM_WIRELESSLAN,
218
 
        NDIS_PHYSICAL_MEDIUM_CABLEMODEM,
219
 
        NDIS_PHYSICAL_MEDIUM_PHONELINE,
220
 
        NDIS_PHYSICAL_MEDIUM_POWERLINE,
221
 
        NDIS_PHYSICAL_MEDIUM_DSL,
222
 
        NDIS_PHYSICAL_MEDIUM_FIBRECHANNEL,
223
 
        NDIS_PHYSICAL_MEDIUM_1394,
224
 
        NDIS_PHYSICAL_MEDIUM_WIRELESSWAN,
225
 
        NDIS_PHYSICAL_MEDIUM_MAX,
 
233
        NdisPhysicalMediumUnspecified,
 
234
        NdisPhysicalMediumWirelessLan,
 
235
        NdisPhysicalMediumCableModem,
 
236
        NdisPhysicalMediumPhoneLine,
 
237
        NdisPhysicalMediumPowerLine,
 
238
        NdisPhysicalMediumDSL,
 
239
        NdisPhysicalMediumFibreChannel,
 
240
        NdisPhysicalMedium1394,
 
241
        NdisPhysicalMediumWirelessWan,
 
242
        NdisPhysicalMediumMax
 
243
};
 
244
 
 
245
enum ndis_pm_state {
 
246
        NdisDeviceStateUnspecified = 0,
 
247
        NdisDeviceStateD0,
 
248
        NdisDeviceStateD1,
 
249
        NdisDeviceStateD2,
 
250
        NdisDeviceStateD3,
 
251
        NdisDeviceStateMaximum
226
252
};
227
253
 
228
254
typedef void (*ndis_isr_handler)(unsigned int *taken, unsigned int *callme,
258
284
        UINT (*query)(void *ctx, UINT oid, char *buffer,
259
285
                      UINT buflen, UINT *written, UINT *needed) STDCALL;
260
286
 
261
 
        void * ReconfigureHandler;
 
287
        void *reconfig;
262
288
        INT (*reset)(INT *needs_set, void *ctx) STDCALL;
263
289
 
264
290
        /* Send one packet */
297
323
 
298
324
        /* NDIS 5.1 extensions */
299
325
        void *cancel_send_packets;
300
 
        void (*pnp_event_notify)(void *ctx, enum ndis_pnp_event, void *inf_buf,
301
 
                                 ULONG inf_buf_len) STDCALL;
 
326
        void (*pnp_event_notify)(void *ctx, enum ndis_device_pnp_event,
 
327
                                 void *inf_buf, ULONG inf_buf_len) STDCALL;
302
328
        void (*adapter_shutdown)(void *ctx) STDCALL;
303
329
        void *reserved1;
304
330
        void *reserved2;
307
333
 
308
334
};
309
335
 
310
 
#ifdef CONFIG_DEBUG_SPINLOCK
311
 
#define NDIS_SPINLOCK(lock) (lock)->lock
312
 
#else
313
 
#define NDIS_SPINLOCK(lock) (struct wrap_spinlock *)(lock)
314
 
#endif
315
 
 
316
336
struct ndis_spinlock {
317
 
        KSPIN_LOCK lock;
318
 
        KIRQL use_bh;
 
337
        KSPIN_LOCK klock;
 
338
        KIRQL irql;
 
339
};
 
340
 
 
341
union ndis_rw_lock_refcount {
 
342
        UINT ref_count;
 
343
        UCHAR cache_line[16];
 
344
};
 
345
 
 
346
struct ndis_rw_lock {
 
347
        union {
 
348
                struct {
 
349
                        KSPIN_LOCK klock;
 
350
                        void *context;
 
351
                } s;
 
352
                UCHAR reserved[16];
 
353
        } u;
 
354
    union ndis_rw_lock_refcount ref_count[MAXIMUM_PROCESSORS];
319
355
};
320
356
 
321
357
struct handle_ctx_entry {
392
428
};
393
429
 
394
430
struct ndis_binary_data {
395
 
        unsigned short len;
 
431
        USHORT len;
396
432
        void *buf;
397
433
};
398
434
 
408
444
struct ndis_config_param {
409
445
        enum ndis_config_param_type type;
410
446
        union {
411
 
                unsigned long intval;
412
 
                struct ustring ustring;
 
447
                ULONG intval;
 
448
                struct unicode_string ustring;
413
449
                struct ndis_binary_data binary_data;
414
450
        } data;
415
451
};
432
468
 *
433
469
 */
434
470
struct ndis_driver {
 
471
        CSHORT type;
 
472
        CSHORT size;
 
473
        void *dev_object;
 
474
        ULONG flags;
 
475
        void *driver_start;
 
476
        ULONG driver_size;
 
477
        void *driver_section;
 
478
        void *driver_extension;
 
479
        struct ustring *driver_name;
 
480
        void *hardware_database;
 
481
        void *fast_io_dispatch;
 
482
        void *driver_init;
 
483
        void *driver_start_io;
 
484
        void (*driver_unload)(struct ndis_driver *driver) STDCALL;
 
485
        void *major_func[IRP_MJ_MAXIMUM_FUNCTION + 1];
 
486
 
 
487
        /* rest is ndiswrapper specific info */
 
488
        void *entry;
435
489
        struct list_head list;
436
490
        char name[MAX_NDIS_SETTING_NAME_LEN];
437
491
        char version[MAX_NDIS_SETTING_VALUE_LEN];
438
492
 
439
 
        struct list_head files;
440
 
 
441
493
        int bustype;
442
494
 
443
 
        union {
444
 
                struct pci_driver pci;
445
 
                struct usb_driver usb;
446
 
        } driver;
447
 
        union {
448
 
                struct pci_device_id *pci;
449
 
                struct usb_device_id *usb;
450
 
        } idtable;
451
 
 
452
 
        int nr_devices;
453
 
        struct ndis_device **devices;
454
 
 
455
495
        unsigned int num_pe_images;
456
496
        struct pe_image pe_images[MAX_PE_IMAGES];
457
497
 
458
 
        int nr_bin_files;
459
 
        struct ndis_bin_file **bin_files;
 
498
        int num_bin_files;
 
499
        struct ndis_bin_file *bin_files;
460
500
 
461
 
        int started;
462
 
        unsigned int dev_registered;
 
501
        atomic_t users;
463
502
        struct miniport_char miniport_char;
464
503
};
465
504
 
 
505
struct ndis_handle;
 
506
 
466
507
/*
467
508
 * There is one of these per handeled device-id
468
509
 *
472
513
        int bustype;
473
514
        int vendor;
474
515
        int device;
475
 
        int pci_subvendor;
476
 
        int pci_subdevice;
477
 
        int fuzzy;
 
516
        int subvendor;
 
517
        int subdevice;
478
518
 
479
519
        struct ndis_driver *driver;
 
520
        char driver_name[MAX_DRIVER_NAME_LEN];
 
521
        struct ndis_handle *handle;
 
522
        char conf_file_name[MAX_DRIVER_NAME_LEN];
480
523
};
481
524
 
482
525
struct ndis_wireless_stats {
495
538
        LARGE_INTEGER fcs_err;
496
539
};
497
540
 
 
541
enum ndis_status_type {
 
542
        Ndis802_11StatusType_Authentication,
 
543
        Ndis802_11StatusType_PMKID_CandidateList,
 
544
        Ndis802_11StatusType_MediaStreamMode,
 
545
        Ndis802_11StatusType_RadioState,
 
546
};
 
547
 
 
548
struct ndis_status_indication
 
549
{
 
550
        enum ndis_status_type status_type;
 
551
};
 
552
 
 
553
enum ndis_radio_status {
 
554
        Ndis802_11RadioStatusOn,
 
555
        Ndis802_11RadioStatusHardwareOff,
 
556
        Ndis802_11RadioStatusSoftwareOff,
 
557
};
 
558
 
 
559
struct ndis_radio_status_indication
 
560
{
 
561
        enum ndis_status_type status_type;
 
562
        enum ndis_radio_status radio_state;
 
563
};
 
564
 
498
565
enum wrapper_work {
499
 
        WRAPPER_LINK_STATUS,
500
 
        SET_OP_MODE,
 
566
        LINK_STATUS_CHANGED,
 
567
        SET_INFRA_MODE,
501
568
        SET_ESSID,
502
569
        SET_PACKET_FILTER,
503
570
        COLLECT_STATS,
521
588
 
522
589
struct encr_info {
523
590
        struct encr_key {
524
 
                unsigned int length;
525
 
                unsigned char key[NDIS_ENCODING_TOKEN_MAX];
 
591
                ULONG length;
 
592
                UCHAR key[NDIS_ENCODING_TOKEN_MAX];
526
593
        } keys[MAX_ENCR_KEYS];
527
 
        int active;
528
 
};
529
 
 
530
 
struct packed ndis_essid {
531
 
        unsigned int length;
532
 
        char essid[NDIS_ESSID_MAX_SIZE];
533
 
};
534
 
 
535
 
struct packed ndis_encr_key {
536
 
        unsigned long struct_size;
537
 
        unsigned long index;
538
 
        unsigned long length;
539
 
        unsigned char key[NDIS_ENCODING_TOKEN_MAX];
540
 
};
541
 
 
542
 
enum auth_mode {
543
 
        AUTHMODE_OPEN,
544
 
        AUTHMODE_RESTRICTED,
545
 
        AUTHMODE_AUTO,
546
 
        AUTHMODE_WPA,
547
 
        AUTHMODE_WPAPSK,
548
 
        AUTHMODE_WPANONE,
549
 
        AUTHMODE_WPA2,
550
 
        AUTHMODE_WPA2PSK,
551
 
};
552
 
 
553
 
enum encr_mode {
554
 
        ENCR1_ENABLED,
555
 
        ENCR_DISABLED,
556
 
        ENCR1_NOKEY,
557
 
        ENCR1_NO_SUPPORT,
558
 
        ENCR2_ENABLED,
559
 
        ENCR2_ABSENT,
560
 
        ENCR3_ENABLED,
561
 
        ENCR3_ABSENT,
562
 
};
563
 
 
564
 
enum op_mode {
565
 
        NDIS_MODE_ADHOC,
566
 
        NDIS_MODE_INFRA,
567
 
        NDIS_MODE_AUTO
 
594
        unsigned short tx_key_index;
 
595
};
 
596
 
 
597
struct ndis_essid {
 
598
        ULONG length;
 
599
        UCHAR essid[NDIS_ESSID_MAX_SIZE];
 
600
};
 
601
 
 
602
enum network_infrastructure {
 
603
        Ndis802_11IBSS,
 
604
        Ndis802_11Infrastructure,
 
605
        Ndis802_11AutoUnknown,
 
606
        Ndis802_11InfrastructureMax
 
607
};
 
608
 
 
609
enum authentication_mode {
 
610
        Ndis802_11AuthModeOpen,
 
611
        Ndis802_11AuthModeShared,
 
612
        Ndis802_11AuthModeAutoSwitch,
 
613
        Ndis802_11AuthModeWPA,
 
614
        Ndis802_11AuthModeWPAPSK,
 
615
        Ndis802_11AuthModeWPANone,
 
616
        Ndis802_11AuthModeWPA2,
 
617
        Ndis802_11AuthModeWPA2PSK,
 
618
        Ndis802_11AuthModeMax
 
619
};
 
620
 
 
621
enum encryption_status {
 
622
        Ndis802_11WEPEnabled,
 
623
        Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
 
624
        Ndis802_11WEPDisabled,
 
625
        Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
 
626
        Ndis802_11WEPKeyAbsent,
 
627
        Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
 
628
        Ndis802_11WEPNotSupported,
 
629
        Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
 
630
        Ndis802_11Encryption2Enabled,
 
631
        Ndis802_11Encryption2KeyAbsent,
 
632
        Ndis802_11Encryption3Enabled,
 
633
        Ndis802_11Encryption3KeyAbsent
568
634
};
569
635
 
570
636
struct ndis_timer {
581
647
        struct ndis_miniport_timer *next;
582
648
};
583
649
 
584
 
struct packed ndis_resource_entry {
 
650
#pragma pack(push,4)
 
651
struct ndis_resource_entry {
585
652
        UCHAR type;
586
653
        UCHAR share;
587
654
        USHORT flags;
623
690
                } device_specific_data;
624
691
        } u;
625
692
};
 
693
#pragma pack(pop)
626
694
 
627
 
struct packed ndis_resource_list {
 
695
struct ndis_resource_list {
628
696
        USHORT version;
629
697
        USHORT revision;
630
698
        ULONG length;
637
705
 
638
706
struct ndis_bind_paths {
639
707
        UINT number;
640
 
        struct ustring paths[1];
 
708
        struct unicode_string paths[1];
641
709
};
642
710
 
643
711
struct ndis_reference {
671
739
        void *arcdb;
672
740
};
673
741
 
 
742
enum ndis_interface_type {
 
743
        NdisInterfaceInternal,
 
744
        NdisInterfaceIsa,
 
745
        NdisInterfaceEisa,
 
746
        NdisInterfaceMca,
 
747
        NdisInterfaceTurboChannel,
 
748
        NdisInterfacePci,
 
749
        NdisInterfacePcMcia,
 
750
};
 
751
 
674
752
/*
675
753
 * This is the per device struct. One per PCI-device exists.
676
754
 *
678
756
 * directly via macros, so it's important that they are at the correct
679
757
 * position hence the paddings.
680
758
 */
681
 
struct packed ndis_handle {
 
759
/* This is called NDIS_MINIPORT_BLOCK in NDIS; however, when using it
 
760
 * in Ndis functions, it is passed as void *handle. To avoid
 
761
 * unnecessary typecasting, we declare it as ndis_handle */
 
762
struct ndis_handle {
682
763
        void *signature;
683
764
        struct ndis_handle *next;
684
765
        struct ndis_driver *driver;
685
766
        void *adapter_ctx;
686
 
        struct ustring name;
 
767
        struct unicode_string name;
687
768
        struct ndis_bind_paths *bindpaths;
688
769
        void *openqueue;
689
770
        struct ndis_reference reference;
692
773
        UCHAR lock_acquired;
693
774
        UCHAR pmode_opens;
694
775
        UCHAR assigned_cpu;
695
 
        KSPIN_LOCK lock;
 
776
        KSPIN_LOCK kspin_lock;
696
777
        enum ndis_request_type *mediarequest;
697
778
        struct ndis_miniport_interrupt *interrupt;
698
779
        ULONG flags;
708
789
        ULONG pnp_capa;
709
790
        void *resources;
710
791
        struct ndis_timer wakeup_dpc_timer;
711
 
        struct ustring basename;
712
 
        struct ustring symlink_name;
 
792
        struct unicode_string basename;
 
793
        struct unicode_string symlink_name;
713
794
        ULONG ndis_hangcheck_interval;
714
795
        USHORT hanghcheck_ticks;
715
796
        USHORT hangcheck_tick;
721
802
        void *send_resource_avail;
722
803
        void *reset_complete;
723
804
 
724
 
        ULONG media_type;
725
 
        UINT bus_number;
726
 
        UINT bus_type;
727
 
        UINT adapter_type;
 
805
        enum ndis_medium media_type;
 
806
        ULONG bus_number;
 
807
        enum ndis_interface_type bus_type;
 
808
        enum ndis_interface_type adapter_type;
728
809
        struct device_object *device_obj;
729
810
        struct device_object *phys_device_obj;
730
811
        struct device_object *next_device_obj;
734
815
        void *setinfobuf;
735
816
        USHORT setinfo_buf_len;
736
817
        USHORT max_send_pkts;
737
 
        UINT fake_status;
 
818
        NDIS_STATUS fake_status;
738
819
        void *lock_handler;
739
 
        struct ustring *adapter_instance_name;
 
820
        struct unicode_string *adapter_instance_name;
740
821
        void *timer_queue;
741
822
        UINT mac_options;
742
823
        void *pending_req;
772
853
        /* keep a barrier in cases of over-stepping */
773
854
        char barrier[200];
774
855
 
775
 
        int device_type;
776
856
        union {
777
857
                struct pci_dev *pci;
778
858
                struct usb_device *usb;
782
862
        struct usb_interface *intf;
783
863
#endif
784
864
        struct net_device *net_dev;
785
 
//      void *adapter_ctx;
786
865
        void *shutdown_ctx;
787
866
 
788
867
        struct work_struct irq_work;
797
876
        struct ndis_device *device;
798
877
 
799
878
        struct work_struct xmit_work;
800
 
        struct wrap_spinlock xmit_ring_lock;
801
879
        struct ndis_packet *xmit_ring[XMIT_RING_SIZE];
802
880
        struct ndis_packet **xmit_array;
803
881
        unsigned int xmit_ring_start;
804
882
        unsigned int xmit_ring_pending;
805
883
        unsigned int max_send_packets;
 
884
        KSPIN_LOCK xmit_lock;
806
885
 
807
886
        unsigned char send_ok;
808
 
        struct wrap_spinlock send_packet_done_lock;
 
887
        KSPIN_LOCK send_packet_done_lock;
809
888
 
810
889
        struct semaphore ndis_comm_mutex;
811
890
        wait_queue_head_t ndis_comm_wq;
813
892
        int ndis_comm_done;
814
893
 
815
894
        int serialized;
816
 
        int use_scatter_gather;
 
895
        int use_sg_dma;
817
896
        int map_count;
818
897
        int multicast_list_size;
819
898
        char *multicast_list;
838
917
        struct ndis_essid essid;
839
918
 
840
919
        unsigned long capa;
841
 
        enum auth_mode auth_mode;
842
 
        enum encr_mode encr_mode;
843
 
        enum op_mode op_mode;
 
920
        enum authentication_mode auth_mode;
 
921
        enum encryption_status encr_mode;
 
922
        enum network_infrastructure infrastructure_mode;
844
923
 
845
924
        mac_address mac;
846
925
 
847
926
        /* List of initialized timers */
848
927
        struct list_head timers;
849
 
        struct wrap_spinlock timers_lock;
 
928
        KSPIN_LOCK timers_lock;
850
929
 
851
930
        struct proc_dir_entry *procfs_iface;
852
931
 
854
933
        unsigned long wrapper_work;
855
934
 
856
935
        unsigned long attributes;
857
 
        struct list_head handle_list;
858
 
};
859
 
 
860
 
enum ndis_pm_state {
861
 
        NDIS_PM_STATE_D0 = 1,
862
 
        NDIS_PM_STATE_D1 = 2,
863
 
        NDIS_PM_STATE_D2 = 3,
864
 
        NDIS_PM_STATE_D3 = 4,
865
 
};
866
 
 
 
936
        struct ndis_resource_list *pci_resources;
 
937
 
 
938
};
 
939
 
 
940
struct ndis_packet *allocate_ndis_packet(void);
 
941
void free_ndis_packet(struct ndis_packet *packet);
867
942
STDCALL void NdisMIndicateReceivePacket(struct ndis_handle *handle,
868
943
                                        struct ndis_packet **packets,
869
944
                                        UINT nr_packets);
870
945
STDCALL void NdisMSendComplete(struct ndis_handle *handle,
871
 
                               struct ndis_packet *packet,
872
 
                               NDIS_STATUS status);
 
946
                               struct ndis_packet *packet, NDIS_STATUS status);
873
947
STDCALL void NdisMSendResourcesAvailable(struct ndis_handle *handle);
874
948
STDCALL void NdisMIndicateStatus(struct ndis_handle *handle,
875
949
                                 NDIS_STATUS status, void *buf, UINT len);
880
954
                                         NDIS_STATUS status);
881
955
STDCALL void NdisMResetComplete(struct ndis_handle *handle, NDIS_STATUS status,
882
956
                                BOOLEAN address_reset);
883
 
STDCALL ULONG NDIS_BUFFER_TO_SPAN_PAGES(struct ndis_buffer *buffer);
 
957
STDCALL ULONG NDIS_BUFFER_TO_SPAN_PAGES(ndis_buffer *buffer);
884
958
STDCALL BOOLEAN NdisWaitEvent(struct ndis_event *event, UINT timeout);
885
959
STDCALL void NdisSetEvent(struct ndis_event *event);
886
960
STDCALL void NdisMDeregisterInterrupt(struct ndis_irq *ndis_irq);
887
961
STDCALL void EthRxIndicateHandler(void *adapter_ctx, void *rx_ctx,
888
 
                                  char *header1,
889
 
                                  char *header, UINT header_size,
890
 
                                  void *look_ahead,
 
962
                                  char *header1, char *header,
 
963
                                  UINT header_size, void *look_ahead,
891
964
                                  UINT look_ahead_size, UINT packet_size);
892
965
STDCALL void EthRxComplete(struct ndis_handle *handle);
893
966
STDCALL void NdisMTransferDataComplete(struct ndis_handle *handle,
894
967
                                       struct ndis_packet *packet,
895
 
                                       NDIS_STATUS status,
896
 
                                       UINT bytes_txed);
 
968
                                       NDIS_STATUS status, UINT bytes_txed);
897
969
STDCALL void NdisWriteConfiguration(NDIS_STATUS *status,
898
970
                                    struct ndis_handle *handle,
899
 
                                    struct ustring *key,
 
971
                                    struct unicode_string *key,
900
972
                                    struct ndis_config_param *val);
901
973
 
902
 
STDCALL NT_STATUS RtlUnicodeStringToAnsiString(struct ustring *dst,
903
 
                                               struct ustring *src,
904
 
                                               BOOLEAN dup);
905
 
STDCALL NT_STATUS RtlAnsiStringToUnicodeString(struct ustring *dst,
906
 
                                               struct ustring *src,
907
 
                                               BOOLEAN dup);
908
 
STDCALL void RtlInitAnsiString(struct ustring *dst, CHAR *src);
909
 
STDCALL void RtlFreeUnicodeString(struct ustring *string);
910
 
STDCALL void RtlFreeAnsiString(struct ustring *string);
911
 
 
912
974
void *get_sp(void);
913
975
int ndis_init(void);
914
976
void ndis_exit_handle(struct ndis_handle *handle);
915
977
void ndis_exit(void);
916
978
 
917
 
void usb_init(void);
 
979
int usb_init(void);
 
980
void usb_exit(void);
 
981
void usb_cleanup(void);
 
982
 
 
983
int load_pe_images(struct pe_image[], int n);
918
984
 
919
985
int ndiswrapper_procfs_init(void);
920
986
int ndiswrapper_procfs_add_iface(struct ndis_handle *handle);
921
987
void ndiswrapper_procfs_remove_iface(struct ndis_handle *handle);
922
988
void ndiswrapper_procfs_remove(void);
923
989
 
 
990
int misc_funcs_init(void);
 
991
void misc_funcs_exit_handle(struct ndis_handle *handle);
 
992
void misc_funcs_exit(void);
 
993
void *wrap_kmalloc(size_t size, int flags);
 
994
void wrap_kfree(void *ptr);
 
995
void wrapper_init_timer(struct ktimer *ktimer, void *handle);
 
996
int wrapper_set_timer(struct wrapper_timer *wrapper_timer,
 
997
                      unsigned long expires, unsigned long repeat,
 
998
                      struct kdpc *kdpc);
 
999
void wrapper_cancel_timer(struct wrapper_timer *wrapper_timer, char *canceled);
 
1000
 
924
1001
void packet_recycler(void *param);
925
1002
int stricmp(const char *s1, const char *s2);
926
 
int string_to_mac(unsigned char *mac, unsigned char *string, int string_len);
 
1003
void dump_bytes(const char *where, const u8 *ip);
 
1004
 
 
1005
/* Required OIDs */
 
1006
#define OID_GEN_SUPPORTED_LIST                  0x00010101
 
1007
#define OID_GEN_HARDWARE_STATUS                 0x00010102
 
1008
#define OID_GEN_MEDIA_SUPPORTED                 0x00010103
 
1009
#define OID_GEN_MEDIA_IN_USE                    0x00010104
 
1010
#define OID_GEN_MAXIMUM_LOOKAHEAD               0x00010105
 
1011
#define OID_GEN_MAXIMUM_FRAME_SIZE              0x00010106
 
1012
#define OID_GEN_LINK_SPEED                      0x00010107
 
1013
#define OID_GEN_TRANSMIT_BUFFER_SPACE           0x00010108
 
1014
#define OID_GEN_RECEIVE_BUFFER_SPACE            0x00010109
 
1015
#define OID_GEN_TRANSMIT_BLOCK_SIZE             0x0001010A
 
1016
#define OID_GEN_RECEIVE_BLOCK_SIZE              0x0001010B
 
1017
#define OID_GEN_VENDOR_ID                       0x0001010C
 
1018
#define OID_GEN_VENDOR_DESCRIPTION              0x0001010D
 
1019
#define OID_GEN_CURRENT_PACKET_FILTER           0x0001010E
 
1020
#define OID_GEN_CURRENT_LOOKAHEAD               0x0001010F
 
1021
#define OID_GEN_DRIVER_VERSION                  0x00010110
 
1022
#define OID_GEN_MAXIMUM_TOTAL_SIZE              0x00010111
 
1023
#define OID_GEN_PROTOCOL_OPTIONS                0x00010112
 
1024
#define OID_GEN_MAC_OPTIONS                     0x00010113
 
1025
#define OID_GEN_MEDIA_CONNECT_STATUS            0x00010114
 
1026
#define OID_GEN_MAXIMUM_SEND_PACKETS            0x00010115
 
1027
#define OID_GEN_VENDOR_DRIVER_VERSION           0x00010116
 
1028
#define OID_GEN_SUPPORTED_GUIDS                 0x00010117
 
1029
#define OID_GEN_NETWORK_LAYER_ADDRESSES         0x00010118      /* Set only */
 
1030
#define OID_GEN_TRANSPORT_HEADER_OFFSET         0x00010119      /* Set only */
 
1031
#define OID_GEN_MACHINE_NAME                    0x0001021A
 
1032
#define OID_GEN_RNDIS_CONFIG_PARAMETER          0x0001021B      /* Set only */
 
1033
#define OID_GEN_VLAN_ID                         0x0001021C
 
1034
 
 
1035
/* Optional OIDs. */
 
1036
#define OID_GEN_MEDIA_CAPABILITIES              0x00010201
 
1037
#define OID_GEN_PHYSICAL_MEDIUM                 0x00010202
 
1038
 
 
1039
/* Required statistics OIDs. */
 
1040
#define OID_GEN_XMIT_OK                         0x00020101
 
1041
#define OID_GEN_RCV_OK                          0x00020102
 
1042
#define OID_GEN_XMIT_ERROR                      0x00020103
 
1043
#define OID_GEN_RCV_ERROR                       0x00020104
 
1044
#define OID_GEN_RCV_NO_BUFFER                   0x00020105
 
1045
 
 
1046
/* Optional OID statistics */
 
1047
#define OID_GEN_DIRECTED_BYTES_XMIT             0x00020201
 
1048
#define OID_GEN_DIRECTED_FRAMES_XMIT            0x00020202
 
1049
#define OID_GEN_MULTICAST_BYTES_XMIT            0x00020203
 
1050
#define OID_GEN_MULTICAST_FRAMES_XMIT           0x00020204
 
1051
#define OID_GEN_BROADCAST_BYTES_XMIT            0x00020205
 
1052
#define OID_GEN_BROADCAST_FRAMES_XMIT           0x00020206
 
1053
#define OID_GEN_DIRECTED_BYTES_RCV              0x00020207
 
1054
#define OID_GEN_DIRECTED_FRAMES_RCV             0x00020208
 
1055
#define OID_GEN_MULTICAST_BYTES_RCV             0x00020209
 
1056
#define OID_GEN_MULTICAST_FRAMES_RCV            0x0002020A
 
1057
#define OID_GEN_BROADCAST_BYTES_RCV             0x0002020B
 
1058
#define OID_GEN_BROADCAST_FRAMES_RCV            0x0002020C
 
1059
#define OID_GEN_RCV_CRC_ERROR                   0x0002020D
 
1060
#define OID_GEN_TRANSMIT_QUEUE_LENGTH           0x0002020E
 
1061
#define OID_GEN_GET_TIME_CAPS                   0x0002020F
 
1062
#define OID_GEN_GET_NETCARD_TIME                0x00020210
 
1063
#define OID_GEN_NETCARD_LOAD                    0x00020211
 
1064
#define OID_GEN_DEVICE_PROFILE                  0x00020212
 
1065
 
 
1066
/* 802.3 (ethernet) OIDs */
 
1067
#define OID_802_3_PERMANENT_ADDRESS             0x01010101
 
1068
#define OID_802_3_CURRENT_ADDRESS               0x01010102
 
1069
#define OID_802_3_MULTICAST_LIST                0x01010103
 
1070
#define OID_802_3_MAXIMUM_LIST_SIZE             0x01010104
 
1071
#define OID_802_3_MAC_OPTIONS                   0x01010105
 
1072
#define NDIS_802_3_MAC_OPTION_PRIORITY          0x00000001
 
1073
#define OID_802_3_RCV_ERROR_ALIGNMENT           0x01020101
 
1074
#define OID_802_3_XMIT_ONE_COLLISION            0x01020102
 
1075
#define OID_802_3_XMIT_MORE_COLLISIONS          0x01020103
 
1076
#define OID_802_3_XMIT_DEFERRED                 0x01020201
 
1077
#define OID_802_3_XMIT_MAX_COLLISIONS           0x01020202
 
1078
#define OID_802_3_RCV_OVERRUN                   0x01020203
 
1079
#define OID_802_3_XMIT_UNDERRUN                 0x01020204
 
1080
#define OID_802_3_XMIT_HEARTBEAT_FAILURE        0x01020205
 
1081
#define OID_802_3_XMIT_TIMES_CRS_LOST           0x01020206
 
1082
#define OID_802_3_XMIT_LATE_COLLISIONS          0x01020207
 
1083
 
 
1084
/* PnP and power management OIDs */
 
1085
#define OID_PNP_CAPABILITIES                    0xFD010100
 
1086
#define OID_PNP_SET_POWER                       0xFD010101
 
1087
#define OID_PNP_QUERY_POWER                     0xFD010102
 
1088
#define OID_PNP_ADD_WAKE_UP_PATTERN             0xFD010103
 
1089
#define OID_PNP_REMOVE_WAKE_UP_PATTERN          0xFD010104
 
1090
#define OID_PNP_WAKE_UP_PATTERN_LIST            0xFD010105
 
1091
#define OID_PNP_ENABLE_WAKE_UP                  0xFD010106
 
1092
 
 
1093
/* PnP/PM Statistics (Optional). */
 
1094
#define OID_PNP_WAKE_UP_OK                      0xFD020200
 
1095
#define OID_PNP_WAKE_UP_ERROR                   0xFD020201
 
1096
 
 
1097
/* The following bits are defined for OID_PNP_ENABLE_WAKE_UP */
 
1098
#define NDIS_PNP_WAKE_UP_MAGIC_PACKET           0x00000001
 
1099
#define NDIS_PNP_WAKE_UP_PATTERN_MATCH          0x00000002
 
1100
#define NDIS_PNP_WAKE_UP_LINK_CHANGE            0x00000004
 
1101
 
 
1102
/* 802.11 OIDs */
 
1103
#define OID_802_11_BSSID                        0x0D010101
 
1104
#define OID_802_11_SSID                         0x0D010102
 
1105
#define OID_802_11_NETWORK_TYPES_SUPPORTED      0x0D010203
 
1106
#define OID_802_11_NETWORK_TYPE_IN_USE          0x0D010204
 
1107
#define OID_802_11_TX_POWER_LEVEL               0x0D010205
 
1108
#define OID_802_11_RSSI                         0x0D010206
 
1109
#define OID_802_11_RSSI_TRIGGER                 0x0D010207
 
1110
#define OID_802_11_INFRASTRUCTURE_MODE          0x0D010108
 
1111
#define OID_802_11_FRAGMENTATION_THRESHOLD      0x0D010209
 
1112
#define OID_802_11_RTS_THRESHOLD                0x0D01020A
 
1113
#define OID_802_11_NUMBER_OF_ANTENNAS           0x0D01020B
 
1114
#define OID_802_11_RX_ANTENNA_SELECTED          0x0D01020C
 
1115
#define OID_802_11_TX_ANTENNA_SELECTED          0x0D01020D
 
1116
#define OID_802_11_SUPPORTED_RATES              0x0D01020E
 
1117
#define OID_802_11_DESIRED_RATES                0x0D010210
 
1118
#define OID_802_11_CONFIGURATION                0x0D010211
 
1119
#define OID_802_11_STATISTICS                   0x0D020212
 
1120
#define OID_802_11_ADD_WEP                      0x0D010113
 
1121
#define OID_802_11_REMOVE_WEP                   0x0D010114
 
1122
#define OID_802_11_DISASSOCIATE                 0x0D010115
 
1123
#define OID_802_11_POWER_MODE                   0x0D010216
 
1124
#define OID_802_11_BSSID_LIST                   0x0D010217
 
1125
#define OID_802_11_AUTHENTICATION_MODE          0x0D010118
 
1126
#define OID_802_11_PRIVACY_FILTER               0x0D010119
 
1127
#define OID_802_11_BSSID_LIST_SCAN              0x0D01011A
 
1128
#define OID_802_11_WEP_STATUS                   0x0D01011B
 
1129
#define OID_802_11_ENCRYPTION_STATUS            OID_802_11_WEP_STATUS
 
1130
#define OID_802_11_RELOAD_DEFAULTS              0x0D01011C
 
1131
#define OID_802_11_ADD_KEY                      0x0D01011D
 
1132
#define OID_802_11_REMOVE_KEY                   0x0D01011E
 
1133
#define OID_802_11_ASSOCIATION_INFORMATION      0x0D01011F
 
1134
#define OID_802_11_TEST                         0x0D010120
 
1135
#define OID_802_11_CAPABILITY                   0x0D010122
 
1136
#define OID_802_11_PMKID                        0x0D010123
 
1137
 
 
1138
#define NDIS_STATUS_SUCCESS             0
 
1139
#define NDIS_STATUS_PENDING             0x00000103
 
1140
#define NDIS_STATUS_NOT_RECOGNIZED      0x00010001
 
1141
#define NDIS_STATUS_NOT_COPIED          0x00010002
 
1142
#define NDIS_STATUS_NOT_ACCEPTED        0x00010003
 
1143
#define NDIS_STATUS_CALL_ACTIVE         0x00010007
 
1144
#define NDIS_STATUS_ONLINE              0x40010003
 
1145
#define NDIS_STATUS_RESET_START         0x40010004
 
1146
#define NDIS_STATUS_RESET_END           0x40010005
 
1147
#define NDIS_STATUS_RING_STATUS         0x40010006
 
1148
#define NDIS_STATUS_CLOSED              0x40010007
 
1149
#define NDIS_STATUS_WAN_LINE_UP         0x40010008
 
1150
#define NDIS_STATUS_WAN_LINE_DOWN       0x40010009
 
1151
#define NDIS_STATUS_WAN_FRAGMENT        0x4001000A
 
1152
#define NDIS_STATUS_MEDIA_CONNECT       0x4001000B
 
1153
#define NDIS_STATUS_MEDIA_DISCONNECT    0x4001000C
 
1154
#define NDIS_STATUS_HARDWARE_LINE_UP    0x4001000D
 
1155
#define NDIS_STATUS_HARDWARE_LINE_DOWN  0x4001000E
 
1156
#define NDIS_STATUS_INTERFACE_UP        0x4001000F
 
1157
#define NDIS_STATUS_INTERFACE_DOWN      0x40010010
 
1158
#define NDIS_STATUS_MEDIA_BUSY          0x40010011
 
1159
#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION   0x40010012
 
1160
#define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
 
1161
#define NDIS_STATUS_LINK_SPEED_CHANGE   0x40010013
 
1162
#define NDIS_STATUS_WAN_GET_STATS       0x40010014
 
1163
#define NDIS_STATUS_WAN_CO_FRAGMENT     0x40010015
 
1164
#define NDIS_STATUS_WAN_CO_LINKPARAMS   0x40010016
 
1165
#define NDIS_STATUS_NOT_RESETTABLE      0x80010001
 
1166
#define NDIS_STATUS_SOFT_ERRORS         0x80010003
 
1167
#define NDIS_STATUS_HARD_ERRORS         0x80010004
 
1168
#define NDIS_STATUS_BUFFER_OVERFLOW     0x80000005
 
1169
#define NDIS_STATUS_FAILURE             0xC0000001
 
1170
#define NDIS_STATUS_INVALID_PARAMETER 0xC000000D
 
1171
#define NDIS_STATUS_RESOURCES           0xC000009A
 
1172
#define NDIS_STATUS_CLOSING             0xC0010002
 
1173
#define NDIS_STATUS_BAD_VERSION         0xC0010004
 
1174
#define NDIS_STATUS_BAD_CHARACTERISTICS 0xC0010005
 
1175
#define NDIS_STATUS_ADAPTER_NOT_FOUND   0xC0010006
 
1176
#define NDIS_STATUS_OPEN_FAILED         0xC0010007
 
1177
#define NDIS_STATUS_DEVICE_FAILED       0xC0010008
 
1178
#define NDIS_STATUS_MULTICAST_FULL      0xC0010009
 
1179
#define NDIS_STATUS_MULTICAST_EXISTS    0xC001000A
 
1180
#define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B
 
1181
#define NDIS_STATUS_REQUEST_ABORTED     0xC001000C
 
1182
#define NDIS_STATUS_RESET_IN_PROGRESS   0xC001000D
 
1183
#define NDIS_STATUS_CLOSING_INDICATING  0xC001000E
 
1184
#define NDIS_STATUS_BAD_VERSION         0xC0010004
 
1185
#define NDIS_STATUS_NOT_SUPPORTED       0xC00000BB
 
1186
#define NDIS_STATUS_INVALID_PACKET      0xC001000F
 
1187
#define NDIS_STATUS_OPEN_LIST_FULL      0xC0010010
 
1188
#define NDIS_STATUS_ADAPTER_NOT_READY   0xC0010011
 
1189
#define NDIS_STATUS_ADAPTER_NOT_OPEN    0xC0010012
 
1190
#define NDIS_STATUS_NOT_INDICATING      0xC0010013
 
1191
#define NDIS_STATUS_INVALID_LENGTH      0xC0010014
 
1192
#define NDIS_STATUS_INVALID_DATA        0xC0010015
 
1193
#define NDIS_STATUS_BUFFER_TOO_SHORT    0xC0010016
 
1194
#define NDIS_STATUS_INVALID_OID         0xC0010017
 
1195
#define NDIS_STATUS_ADAPTER_REMOVED     0xC0010018
 
1196
#define NDIS_STATUS_UNSUPPORTED_MEDIA   0xC0010019
 
1197
#define NDIS_STATUS_GROUP_ADDRESS_IN_USE        0xC001001A
 
1198
#define NDIS_STATUS_FILE_NOT_FOUND      0xC001001B
 
1199
#define NDIS_STATUS_ERROR_READING_FILE  0xC001001C
 
1200
#define NDIS_STATUS_ALREADY_MAPPED      0xC001001D
 
1201
#define NDIS_STATUS_RESOURCE_CONFLICT   0xC001001E
 
1202
#define NDIS_STATUS_NO_CABLE            0xC001001F
 
1203
#define NDIS_STATUS_INVALID_SAP         0xC0010020
 
1204
#define NDIS_STATUS_SAP_IN_USE          0xC0010021
 
1205
#define NDIS_STATUS_INVALID_ADDRESS     0xC0010022
 
1206
#define NDIS_STATUS_VC_NOT_ACTIVATED    0xC0010023
 
1207
#define NDIS_STATUS_DEST_OUT_OF_ORDER   0xC0010024
 
1208
#define NDIS_STATUS_VC_NOT_AVAILABLE    0xC0010025
 
1209
#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE      0xC0010026
 
1210
#define NDIS_STATUS_INCOMPATABLE_QOS    0xC0010027
 
1211
#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED      0xC0010028
 
1212
#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION     0xC0010029
 
1213
#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR       0xC0011000
 
1214
#define NDIS_STATUS_INVALID_DEVICE_REQUEST      0xC0000010
 
1215
#define NDIS_STATUS_NETWORK_UNREACHABLE         0xC000023C
 
1216
 
 
1217
/* Event codes */
 
1218
 
 
1219
#define EVENT_NDIS_RESOURCE_CONFLICT    0xC0001388
 
1220
#define EVENT_NDIS_OUT_OF_RESOURCE      0xC0001389
 
1221
#define EVENT_NDIS_HARDWARE_FAILURE     0xC000138A
 
1222
#define EVENT_NDIS_ADAPTER_NOT_FOUND    0xC000138B
 
1223
#define EVENT_NDIS_INTERRUPT_CONNECT    0xC000138C
 
1224
#define EVENT_NDIS_DRIVER_FAILURE       0xC000138D
 
1225
#define EVENT_NDIS_BAD_VERSION          0xC000138E
 
1226
#define EVENT_NDIS_TIMEOUT              0x8000138F
 
1227
#define EVENT_NDIS_NETWORK_ADDRESS      0xC0001390
 
1228
#define EVENT_NDIS_UNSUPPORTED_CONFIGURATION    0xC0001391
 
1229
#define EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER   0xC0001392
 
1230
#define EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER      0xC0001393
 
1231
#define EVENT_NDIS_BAD_IO_BASE_ADDRESS  0xC0001394
 
1232
#define EVENT_NDIS_RECEIVE_SPACE_SMALL  0x40001395
 
1233
#define EVENT_NDIS_ADAPTER_DISABLED     0x80001396
 
1234
#define EVENT_NDIS_IO_PORT_CONFLICT     0x80001397
 
1235
#define EVENT_NDIS_PORT_OR_DMA_CONFLICT 0x80001398
 
1236
#define EVENT_NDIS_MEMORY_CONFLICT      0x80001399
 
1237
#define EVENT_NDIS_INTERRUPT_CONFLICT   0x8000139A
 
1238
#define EVENT_NDIS_DMA_CONFLICT         0x8000139B
 
1239
#define EVENT_NDIS_INVALID_DOWNLOAD_FILE_ERROR  0xC000139C
 
1240
#define EVENT_NDIS_MAXRECEIVES_ERROR    0x8000139D
 
1241
#define EVENT_NDIS_MAXTRANSMITS_ERROR   0x8000139E
 
1242
#define EVENT_NDIS_MAXFRAMESIZE_ERROR   0x8000139F
 
1243
#define EVENT_NDIS_MAXINTERNALBUFS_ERROR        0x800013A0
 
1244
#define EVENT_NDIS_MAXMULTICAST_ERROR   0x800013A1
 
1245
#define EVENT_NDIS_PRODUCTID_ERROR      0x800013A2
 
1246
#define EVENT_NDIS_LOBE_FAILUE_ERROR    0x800013A3
 
1247
#define EVENT_NDIS_SIGNAL_LOSS_ERROR    0x800013A4
 
1248
#define EVENT_NDIS_REMOVE_RECEIVED_ERROR        0x800013A5
 
1249
#define EVENT_NDIS_TOKEN_RING_CORRECTION        0x400013A6
 
1250
#define EVENT_NDIS_ADAPTER_CHECK_ERROR  0xC00013A7
 
1251
#define EVENT_NDIS_RESET_FAILURE_ERROR  0x800013A8
 
1252
#define EVENT_NDIS_CABLE_DISCONNECTED_ERROR     0x800013A9
 
1253
#define EVENT_NDIS_RESET_FAILURE_CORRECTION     0x800013AA
 
1254
 
 
1255
/* packet filter bits used by NDIS_OID_PACKET_FILTER */
 
1256
#define NDIS_PACKET_TYPE_DIRECTED               0x00000001
 
1257
#define NDIS_PACKET_TYPE_MULTICAST              0x00000002
 
1258
#define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004
 
1259
#define NDIS_PACKET_TYPE_BROADCAST              0x00000008
 
1260
#define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010
 
1261
#define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020
 
1262
#define NDIS_PACKET_TYPE_SMT                    0x00000040
 
1263
#define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080
 
1264
#define NDIS_PACKET_TYPE_GROUP                  0x00001000
 
1265
#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000
 
1266
#define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000
 
1267
#define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000
 
1268
 
 
1269
/* memory allocation flags */
 
1270
#define NDIS_MEMORY_CONTIGUOUS                  0x00000001
 
1271
#define NDIS_MEMORY_NONCACHED                   0x00000002
 
1272
 
 
1273
/* Atrribute flags to NdisMSetAtrributesEx */
 
1274
#define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT    0x00000001
 
1275
#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT   0x00000002
 
1276
#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
 
1277
#define NDIS_ATTRIBUTE_BUS_MASTER               0x00000008
 
1278
#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER      0x00000010
 
1279
#define NDIS_ATTRIBUTE_DESERIALIZE              0x00000020
 
1280
#define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND       0x00000040
 
1281
#define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK       0x00000080
 
1282
#define NDIS_ATTRIBUTE_NOT_CO_NDIS              0x00000100
 
1283
#define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS    0x00000200
927
1284
 
928
1285
#endif /* NDIS_H */