Subversion Repositories Kolibri OS

Rev

Rev 5562 | Rev 6948 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5562 Rev 6717
Line 1... Line 1...
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                                 ;;
2
;;                                                                 ;;
3
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved.    ;;
3
;; Copyright (C) KolibriOS team 2004-2016. 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
;; i8255x (Intel eepro 100) driver for KolibriOS                   ;;
6
;; i8255x (Intel eepro 100) driver for KolibriOS                   ;;
7
;;                                                                 ;;
7
;;                                                                 ;;
8
;;    Written by hidnplayr@kolibrios.org                           ;;
8
;;    Written by hidnplayr@kolibrios.org                           ;;
Line 41... Line 41...
41
include '../struct.inc'
41
include '../struct.inc'
42
include '../macros.inc'
42
include '../macros.inc'
43
include '../fdo.inc'
43
include '../fdo.inc'
44
include '../netdrv.inc'
44
include '../netdrv.inc'
Line 45... Line 45...
45
 
45
 
-
 
46
; I/O registers
-
 
47
REG_SCB_STATUS          = 0
-
 
48
REG_SCB_CMD             = 2
-
 
49
REG_SCB_PTR             = 4
-
 
50
REG_PORT                = 8
-
 
51
REG_EEPROM              = 14
46
; Serial EEPROM
52
REG_MDI_CTRL            = 16
-
 
53
 
47
 
54
; Port commands
48
EE_SK           = 1 shl 0       ; serial clock
55
PORT_SOFT_RESET         = 0x0
-
 
56
PORT_SELF_TEST          = 0x1
49
EE_CS           = 1 shl 1       ; chip select
57
PORT_SELECTIVE_RESET    = 0x2
50
EE_DI           = 1 shl 2       ; data in
58
PORT_DUMP               = 0x3
51
EE_DO           = 1 shl 3       ; data out
59
PORT_DUMP_WAKEUP        = 0x7
Line -... Line 60...
-
 
60
PORT_PTR_MASK           = 0xfffffff0
-
 
61
 
-
 
62
; Serial EEPROM
-
 
63
EE_SK                   = 1 shl 0       ; serial clock
-
 
64
EE_CS                   = 1 shl 1       ; chip select
-
 
65
EE_DI                   = 1 shl 2       ; data in
52
EE_MASK         = EE_SK + EE_CS + EE_DI + EE_DO
66
EE_DO                   = 1 shl 3       ; data out
53
 
67
EE_MASK                 = EE_SK + EE_CS + EE_DI + EE_DO
54
; opcodes, first bit is start bit and must be 1
68
; opcodes, first bit is start bit and must be 1
55
EE_READ         = 110b
69
EE_READ                 = 110b
Line 56... Line 70...
56
EE_WRITE        = 101b
70
EE_WRITE                = 101b
57
EE_ERASE        = 111b
-
 
58
 
71
EE_ERASE                = 111b
59
; The SCB accepts the following controls for the Tx and Rx units:
72
 
60
 
73
; The SCB accepts the following controls for the Tx and Rx units:
61
CU_START        = 0x0010
74
CU_START                = 0x0010
62
CU_RESUME       = 0x0020
75
CU_RESUME               = 0x0020
63
CU_STATSADDR    = 0x0040
76
CU_STATSADDR            = 0x0040
64
CU_SHOWSTATS    = 0x0050        ; Dump statistics counters.
77
CU_SHOWSTATS            = 0x0050        ; Dump statistics counters.
65
CU_CMD_BASE     = 0x0060        ; Base address to add CU commands.
78
CU_CMD_BASE             = 0x0060        ; Base address to add CU commands.
66
CU_DUMPSTATS    = 0x0070        ; Dump then reset stats counters.
79
CU_DUMPSTATS            = 0x0070        ; Dump then reset stats counters.
67
 
80
 
68
RX_START        = 0x0001
81
RX_START                = 0x0001
69
RX_RESUME       = 0x0002
82
RX_RESUME               = 0x0002
70
RX_ABORT        = 0x0004
83
RX_ABORT                = 0x0004
71
RX_ADDR_LOAD    = 0x0006
84
RX_ADDR_LOAD            = 0x0006
72
RX_RESUMENR     = 0x0007
-
 
73
INT_MASK        = 0x0100
-
 
74
DRVR_INT        = 0x0200        ; Driver generated interrupt
-
 
75
 
-
 
76
REG_SCB_STATUS  = 0
-
 
77
REG_SCB_CMD     = 2
-
 
78
REG_SCB_PTR     = 4
-
 
79
REG_PORT        = 8
85
RX_RESUMENR             = 0x0007
80
REG_EEPROM      = 14
86
INT_MASK                = 0x0100
81
REG_MDI_CTRL    = 16
87
DRVR_INT                = 0x0200        ; Driver generated interrupt
82
 
88
 
83
PHY_100a        = 0x000003E0
89
PHY_100a                = 0x000003E0
84
PHY_100c        = 0x035002A8
90
PHY_100c                = 0x035002A8
85
PHY_82555_tx    = 0x015002A8
91
PHY_82555_tx            = 0x015002A8
86
PHY_nsc_tx      = 0x5C002000
92
PHY_nsc_tx              = 0x5C002000
87
PHY_82562_et    = 0x033002A8
93
PHY_82562_et            = 0x033002A8
88
PHY_82562_em    = 0x032002A8
94
PHY_82562_em            = 0x032002A8
89
PHY_82562_ek    = 0x031002A8
95
PHY_82562_ek            = 0x031002A8
Line 90... Line 96...
90
PHY_82562_eh    = 0x017002A8
96
PHY_82562_eh            = 0x017002A8
91
PHY_82552_v     = 0xd061004d
97
PHY_82552_v             = 0xd061004d
92
PHY_unknown     = 0xFFFFFFFF
98
PHY_unknown             = 0xFFFFFFFF
93
 
99
 
Line 316... Line 322...
316
; Fill in the direct call addresses into the struct
322
; Fill in the direct call addresses into the struct
Line 317... Line 323...
317
 
323
 
318
        mov     [ebx + device.reset], reset
324
        mov     [ebx + device.reset], reset
319
        mov     [ebx + device.transmit], transmit
325
        mov     [ebx + device.transmit], transmit
320
        mov     [ebx + device.unload], unload
326
        mov     [ebx + device.unload], unload
Line 321... Line 327...
321
        mov     [ebx + device.name], my_service
327
        mov     [ebx + device.name], devicename
Line 322... Line 328...
322
 
328
 
323
; save the pci bus and device numbers
329
; save the pci bus and device numbers
Line 336... Line 342...
336
; We've found the io address, find IRQ now
342
; We've found the io address, find IRQ now
Line 337... Line 343...
337
 
343
 
338
        invoke  PciRead8, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.interrupt_line
344
        invoke  PciRead8, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.interrupt_line
Line 339... Line 345...
339
        mov     [ebx + device.irq_line], al
345
        mov     [ebx + device.irq_line], al
340
 
346
 
Line 341... Line 347...
341
        DEBUGF  1,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
347
        DEBUGF  1,"Hooking into device, devfn:%x, bus:%x, irq:%x, addr:%x\n",\
Line 342... Line -...
342
        [ebx + device.pci_dev]:1,[ebx + device.pci_bus]:1,[ebx + device.irq_line]:1,[ebx + device.io_addr]:4
-
 
343
 
-
 
344
; Ok, the eth_device structure is ready, let's probe the device
-
 
345
 
-
 
346
        pushf
-
 
347
        cli                     ; disable ints untilm initialisation is done
-
 
348
 
-
 
349
        call    probe                                                   ; this function will output in eax
348
        [ebx + device.pci_dev]:2,[ebx + device.pci_bus]:2,[ebx + device.irq_line]:2,[ebx + device.io_addr]:4
350
        test    eax, eax
349
 
351
        jnz     .err                                                    ; If an error occured, exit
350
; Ok, the eth_device structure is ready, let's probe the device
Line -... Line 351...
-
 
351
 
352
 
352
        mov     eax, [devices]                                          ; Add the device structure to our device list
-
 
353
        mov     [device_list+4*eax], ebx                                ; (IRQ handler uses this list to find device)
Line 353... Line 354...
353
        mov     eax, [devices]                                          ; Add the device structure to our device list
354
        inc     [devices]                                               ;
354
        mov     [device_list+4*eax], ebx                                ; (IRQ handler uses this list to find device)
355
 
Line 355... Line 356...
355
        inc     [devices]                                               ;
356
        call    probe                                                   ; this function will output in eax
Line 373... Line 374...
373
        mov     eax, edi                                                ; Application wants it in eax instead
374
        mov     eax, edi                                                ; Application wants it in eax instead
374
        DEBUGF  2,"Kernel says: %u\n", eax
375
        DEBUGF  2,"Kernel says: %u\n", eax
375
        ret
376
        ret
Line 376... Line 377...
376
 
377
 
377
; If an error occured, remove all allocated data and exit (returning -1 in eax)
-
 
378
 
378
; If an error occured, remove all allocated data and exit (returning -1 in eax)
379
  .err:
379
  .err:
Line 380... Line 380...
380
        invoke  KernelFree, ebx
380
        invoke  KernelFree, ebx
381
 
381
 
Line 421... Line 421...
421
 
421
 
Line 422... Line 422...
422
        DEBUGF  1,"Probing\n"
422
        DEBUGF  1,"Probing\n"
423
 
423
 
424
; Make the device a bus master
424
; Make the device a bus master
425
        invoke  PciRead32, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.command
425
        invoke  PciRead32, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.command
Line 426... Line 426...
426
        or      al, PCI_CMD_MASTER
426
        or      al, PCI_CMD_MASTER or PCI_CMD_PIO
427
        invoke  PciWrite32, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.command, eax
427
        invoke  PciWrite32, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.command, eax
Line 450... Line 450...
450
        or      eax, -1
450
        or      eax, -1
451
        ret
451
        ret
Line 452... Line 452...
452
 
452
 
Line 453... Line -...
453
  .found:
-
 
454
 
-
 
455
        call    ee_get_width
-
 
456
        call    MAC_read_eeprom
-
 
457
 
-
 
Line 458... Line 453...
458
        ;;; TODO: detect phy
453
  .found:
459
 
454
 
460
 
455
 
Line 478... Line 473...
478
        ret
473
        ret
479
  @@:
474
  @@:
Line 480... Line 475...
480
 
475
 
Line 481... Line 476...
481
        DEBUGF  1,"Resetting\n"
476
        DEBUGF  1,"Resetting\n"
482
 
477
 
Line 483... Line 478...
483
;---------------
478
;----------------
-
 
479
; Selective reset
-
 
480
 
-
 
481
        set_io  [ebx + device.io_addr], 0
-
 
482
        set_io  [ebx + device.io_addr], REG_EEPROM
-
 
483
        mov     eax, PORT_SELECTIVE_RESET
-
 
484
        out     dx, eax
-
 
485
 
-
 
486
        mov     esi, 1
-
 
487
        invoke  Sleep
-
 
488
 
484
; reset the card
489
;-----------
485
 
490
; Soft reset
486
        set_io  [ebx + device.io_addr], 0
491
 
Line 487... Line 492...
487
        set_io  [ebx + device.io_addr], REG_PORT
492
        set_io  [ebx + device.io_addr], REG_PORT
-
 
493
        mov     eax, PORT_SOFT_RESET
-
 
494
        out     dx, eax
-
 
495
 
-
 
496
        mov     esi, 10
-
 
497
        invoke  Sleep
-
 
498
 
-
 
499
;-------------
-
 
500
; Read PHY IDs
488
        xor     eax, eax        ; Software Reset
501
 
-
 
502
        mov     cx, 1
-
 
503
        mov     dx, MII_PHYSID1
-
 
504
        call    mdio_read
-
 
505
        DEBUGF  1, "PHY ID1: 0x%x\n", ax
-
 
506
 
-
 
507
        mov     cx, 1
-
 
508
        mov     dx, MII_PHYSID2
-
 
509
        call    mdio_read
-
 
510
        DEBUGF  1, "PHY ID2: 0x%x\n", ax
-
 
511
 
-
 
512
;---------------------
Line 489... Line 513...
489
        out     dx, eax
513
; Read MAC from eeprom
490
 
514
 
Line 491... Line 515...
491
        mov     esi, 10
515
        call    ee_get_width
Line 808... Line 832...
808
        jnz     .nextdevice
832
        jnz     .nextdevice
809
  .nothing:
833
  .nothing:
810
        pop     edi esi ebx
834
        pop     edi esi ebx
811
        xor     eax, eax
835
        xor     eax, eax
Line 812... Line 836...
812
 
836
 
Line 813... Line 837...
813
        ret                                     ; If no device was found, abort (The irq was probably for a device, not registered to this driver)
837
        ret                                         ; If no device was found, abort (The irq was probably for a device, not registered to this driver)
Line 814... Line 838...
814
 
838
 
Line 989... Line 1013...
989
        or      esi, EE_READ shl 29
1013
        or      esi, EE_READ shl 29
Line 990... Line 1014...
990
 
1014
 
991
        movzx   ecx, [ebx + device.ee_bus_width]
1015
        movzx   ecx, [ebx + device.ee_bus_width]
Line 992... Line 1016...
992
        add     ecx, 3
1016
        add     ecx, 3
993
 
1017
 
994
        mov     al, EE_CS
1018
        mov     ax, 0x4800 + EE_CS
Line 995... Line 1019...
995
        out     dx, al
1019
        out     dx, ax
996
        call    udelay
1020
        call    udelay
Line 997... Line 1021...
997
 
1021
 
998
;-----------------------
1022
;-----------------------
999
; Write this to the chip
1023
; Write this to the chip
1000
 
1024
 
1001
  .loop:
1025
  .loop:
1002
        mov     al, EE_CS + EE_SK
1026
        mov     al, EE_CS
1003
        shl     esi, 1
1027
        shl     esi, 1
1004
        jnc     @f
1028
        jnc     @f
Line 1005... Line 1029...
1005
        or      al, EE_DI
1029
        or      al, EE_DI
1006
       @@:
1030
       @@:
1007
        out     dx, al
1031
        out     dx, al
Line 1008... Line 1032...
1008
        call    udelay
1032
        call    udelay
Line 1019... Line 1043...
1019
        xor     esi, esi
1043
        xor     esi, esi
1020
        mov     ecx, 16
1044
        mov     ecx, 16
Line 1021... Line 1045...
1021
 
1045
 
1022
  .loop2:
1046
  .loop2:
1023
        shl     esi, 1
1047
        shl     esi, 1
-
 
1048
        mov     al, EE_CS
-
 
1049
        out     dx, al
-
 
1050
        call    udelay
-
 
1051
 
1024
        mov     al, EE_CS + EE_SK
1052
        or      al, EE_SK
1025
        out     dx, al
1053
        out     dx, al
Line 1026... Line 1054...
1026
        call    udelay
1054
        call    udelay
1027
 
1055
 
1028
        in      al, dx
1056
        in      al, dx
1029
        test    al, EE_DO
1057
        test    al, EE_DO
1030
        jz      @f
1058
        jz      @f
Line 1031... Line -...
1031
        inc     esi
-
 
1032
       @@:
-
 
1033
 
-
 
1034
        mov     al, EE_CS
-
 
1035
        out     dx, al
1059
        inc     esi
Line 1036... Line 1060...
1036
        call    udelay
1060
       @@:
1037
 
1061
 
Line 1038... Line 1062...
1038
        loop    .loop2
1062
        loop    .loop2
1039
 
1063
 
1040
;-----------------------
-
 
Line 1041... Line 1064...
1041
; de-activate the eeprom
1064
;-----------------------
1042
 
1065
; de-activate the eeprom
Line 1067... Line 1090...
1067
        or      esi, EE_WRITE shl 29
1090
        or      esi, EE_WRITE shl 29
Line 1068... Line 1091...
1068
 
1091
 
1069
        movzx   ecx, [ebx + device.ee_bus_width]
1092
        movzx   ecx, [ebx + device.ee_bus_width]
Line 1070... Line 1093...
1070
        add     ecx, 3
1093
        add     ecx, 3
1071
 
1094
 
Line 1072... Line 1095...
1072
        mov     al, EE_CS       ; enable chip
1095
        mov     ax, 0x4800 + EE_CS       ; enable chip
1073
        out     dx, al
1096
        out     dx, ax
Line 1074... Line 1097...
1074
 
1097
 
1075
;-----------------------
1098
;-----------------------
1076
; Write this to the chip
1099
; Write this to the chip
1077
 
1100
 
1078
  .loop:
1101
  .loop:
1079
        mov     al, EE_CS + EE_SK
1102
        mov     al, EE_CS
1080
        shl     esi, 1
1103
        shl     esi, 1
1081
        jnc     @f
1104
        jnc     @f
Line 1082... Line 1105...
1082
        or      al, EE_DI
1105
        or      al, EE_DI
1083
       @@:
1106
       @@:
1084
        out     dx, al
1107
        out     dx, al
Line 1085... Line 1108...
1085
        call    udelay
1108
        call    udelay
Line 1094... Line 1117...
1094
; Now write the data to eeprom
1117
; Now write the data to eeprom
Line 1095... Line 1118...
1095
 
1118
 
Line 1096... Line 1119...
1096
        mov     ecx, 16
1119
        mov     ecx, 16
1097
 
1120
 
1098
  .loop2:
1121
  .loop2:
1099
        mov     al, EE_CS + EE_SK
1122
        mov     al, EE_CS
1100
        shl     di, 1
1123
        shl     di, 1
1101
        jnc     @f
1124
        jnc     @f
1102
        or      al, EE_DI
1125
        or      al, EE_DI
1103
       @@:
1126
       @@:
Line 1104... Line 1127...
1104
        out     dx, al
1127
        out     dx, al
1105
        call    udelay
1128
        call    udelay
1106
 
1129
 
Line 1107... Line 1130...
1107
        and     al, not EE_SK
1130
        or      al, EE_SK
Line 1125... Line 1148...
1125
ee_get_width:
1148
ee_get_width:
Line 1126... Line 1149...
1126
 
1149
 
1127
        set_io  [ebx + device.io_addr], 0
1150
        set_io  [ebx + device.io_addr], 0
Line 1128... Line 1151...
1128
        set_io  [ebx + device.io_addr], REG_EEPROM
1151
        set_io  [ebx + device.io_addr], REG_EEPROM
1129
 
1152
 
1130
        mov     al, EE_CS      ; activate eeprom
1153
        mov     ax, 0x4800 + EE_CS      ; activate eeprom
Line 1131... Line 1154...
1131
        out     dx, al
1154
        out     dx, ax
1132
        call    udelay
1155
        call    udelay
1133
 
1156
 
1134
        mov     si, EE_READ shl 13
1157
        mov     si, EE_READ shl 13
1135
        xor     ecx, ecx
1158
        xor     ecx, ecx
1136
  .loop:
1159
  .loop:
1137
        mov     al, EE_CS + EE_SK
1160
        mov     al, EE_CS
1138
        shl     si, 1
1161
        shl     si, 1
1139
        jnc     @f
1162
        jnc     @f
1140
        or      al, EE_DI
1163
        or      al, EE_DI
Line 1141... Line 1164...
1141
       @@:
1164
       @@:
1142
        out     dx, al
1165
        out     dx, ax
1143
        call    udelay
1166
        call    udelay
Line 1144... Line 1167...
1144
 
1167
 
Line 1145... Line 1168...
1145
        and     al, not EE_SK
1168
        or      al, EE_SK
Line 1154... Line 1177...
1154
        in      al, dx
1177
        in      al, dx
1155
        test    al, EE_DO
1178
        test    al, EE_DO
1156
        jnz     .loop
1179
        jnz     .loop
Line 1157... Line 1180...
1157
 
1180
 
1158
        xor     al, al
1181
        xor     al, al
Line 1159... Line 1182...
1159
        out     dx, al          ; de-activate eeprom
1182
        out     dx, al                  ; de-activate eeprom
1160
 
1183
 
1161
        sub     cl, 3           ; dont count the opcode bits
1184
        sub     cl, 3                   ; dont count the opcode bits
Line 1162... Line 1185...
1162
        mov     [ebx + device.ee_bus_width], cl
1185
        mov     [ebx + device.ee_bus_width], cl
Line 1163... Line 1186...
1163
        DEBUGF  1, "Eeprom width=%u bit\n", ecx
1186
        DEBUGF  1, "Eeprom width=%u bit\n", ecx
1164
 
1187
 
1165
        ret
-
 
1166
 
1188
        ret
1167
  .give_up:
1189
 
Line 1168... Line 1190...
1168
        DEBUGF  2, "Eeprom not found!\n"
1190
  .give_up:
Line 1169... Line 1191...
1169
 
1191
        DEBUGF  2, "Eeprom not found!\n"
Line 1193... Line 1215...
1193
mdio_read:
1215
mdio_read:
Line 1194... Line 1216...
1194
 
1216
 
Line 1195... Line 1217...
1195
        DEBUGF  1,"MDIO read\n"
1217
        DEBUGF  1,"MDIO read\n"
1196
 
-
 
1197
        shl     ecx, 21                 ; PHY addr
-
 
1198
        shl     edx, 16                 ; PHY reg addr
1218
 
-
 
1219
        shl     ecx, 21                 ; PHY addr
1199
 
1220
        mov     eax, ecx
1200
        mov     eax, ecx
1221
        shl     edx, 16                 ; PHY reg addr
Line 1201... Line 1222...
1201
        or      eax, edx
1222
        or      eax, edx
1202
        or      eax, 10b shl 26         ; read opcode
1223
        or      eax, 10b shl 26         ; read opcode
Line 1211... Line 1232...
1211
        test    eax, 1 shl 28           ; ready bit
1232
        test    eax, 1 shl 28           ; ready bit
1212
        jz      .wait
1233
        jz      .wait
Line 1213... Line 1234...
1213
 
1234
 
Line -... Line 1235...
-
 
1235
        ret
-
 
1236
 
1214
        ret
1237
 
1215
 
1238
 
1216
; ax = data
1239
; ax = data
Line 1217... Line 1240...
1217
; cx = phy addr
1240
; cx = phy addr
Line 1243... Line 1266...
1243
        test    eax, 1 shl 28           ; ready bit
1266
        test    eax, 1 shl 28           ; ready bit
1244
        jz      .wait
1267
        jz      .wait
Line 1245... Line 1268...
1245
 
1268
 
Line 1246... Line -...
1246
        ret
-
 
1247
 
-
 
1248
read_mac:
-
 
1249
 
-
 
1250
        ret
-
 
Line 1251... Line 1269...
1251
 
1269
        ret
1252
 
1270
 
Line 1253... Line 1271...
1253
 
1271
 
1254
align 4
1272
align 4
1255
MAC_read_eeprom:
1273
mac_read_eeprom:
Line 1268... Line 1286...
1268
 
1286
 
Line 1269... Line -...
1269
 
-
 
1270
        ret
-
 
1271
 
-
 
1272
 
-
 
1273
align 4
-
 
1274
MAC_write:
-
 
1275
 
-
 
1276
;;;;
-
 
1277
 
-
 
1278
        ret
-
 
1279
 
1287
 
Line 1280... Line 1288...
1280
 
1288
        ret
1281
 
1289
 
Line 1295... Line 1303...
1295
                db 0, 0x2e, 0, 0x60, 0, 0xf2, 0x48, 0, 0x40, 0xf2
1303
                db 0, 0x2e, 0, 0x60, 0, 0xf2, 0x48, 0, 0x40, 0xf2
1296
                db 0x80, 0x3f, 0x05                                     ; 22 bytes total
1304
                db 0x80, 0x3f, 0x05                                     ; 22 bytes total
Line 1297... Line 1305...
1297
 
1305
 
1298
 
-
 
1299
device_id_list:
1306
 
1300
 
1307
device_id_list:
1301
        dw 0x1029
1308
dw 0x1029
1302
        dw 0x1030
1309
dw 0x1030
1303
        dw 0x1031
1310
dw 0x1031
1304
        dw 0x1032
1311
dw 0x1032
1305
        dw 0x1033
1312
dw 0x1033
1306
        dw 0x1034
1313
dw 0x1034
1307
        dw 0x1038
1314
dw 0x1038
1308
        dw 0x1039
1315
dw 0x1039
1309
        dw 0x103A
1316
dw 0x103A
1310
        dw 0x103B
1317
dw 0x103B
1311
        dw 0x103C
1318
dw 0x103C
1312
        dw 0x103D
1319
dw 0x103D
1313
        dw 0x103E
1320
dw 0x103E
1314
        dw 0x1050
1321
dw 0x1050
1315
        dw 0x1051
1322
dw 0x1051
1316
        dw 0x1052
1323
dw 0x1052
1317
        dw 0x1053
1324
dw 0x1053
1318
        dw 0x1054
1325
dw 0x1054
1319
        dw 0x1055
1326
dw 0x1055
1320
        dw 0x1056
1327
dw 0x1056
1321
        dw 0x1057
1328
dw 0x1057
1322
        dw 0x1059
1329
dw 0x1059
1323
        dw 0x1064
1330
dw 0x1064
1324
        dw 0x1065
1331
dw 0x1065
1325
        dw 0x1066
1332
dw 0x1066
1326
        dw 0x1067
1333
dw 0x1067
1327
        dw 0x1068
1334
dw 0x1068
1328
        dw 0x1069
1335
dw 0x1069
1329
        dw 0x106A
1336
dw 0x106A
1330
        dw 0x106B
1337
dw 0x106B
1331
        dw 0x1091
1338
dw 0x1091
1332
        dw 0x1092
1339
dw 0x1092
1333
        dw 0x1093
1340
dw 0x1093
1334
        dw 0x1094
1341
dw 0x1094
1335
        dw 0x1095
1342
dw 0x1095
1336
        dw 0x10fe
1343
dw 0x10fe
1337
        dw 0x1209
1344
dw 0x1209
1338
        dw 0x1229
1345
dw 0x1229
1339
        dw 0x2449
1346
dw 0x2449
1340
        dw 0x2459
1347
dw 0x2459
Line 1341... Line 1348...
1341
        dw 0x245D
1348
dw 0x245D
Line 1342... Line 1349...
1342
        dw 0x27DC
1349
dw 0x27DC