bin/74360: ndiscvt(8) generate a driver which doesn't match any hardware

Andrew Belashov bel at orel.ru
Thu Nov 25 00:20:37 PST 2004


>Number:         74360
>Category:       bin
>Synopsis:       ndiscvt(8) generate a driver which doesn't match any hardware
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Nov 25 08:20:32 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Andrew Belashov
>Release:        FreeBSD 5.3-RELEASE i386
>Organization:
JSC CenterTelecom
>Environment:

System: FreeBSD belnb.localdomain 5.3-RELEASE FreeBSD 5.3-RELEASE #15: Thu Nov
25 09:35:42 MSK 2004 bel at belnb.localdomain:/usr/obj/usr/src/sys/BELNBO i386

Machine: Fujitsu FMV-BIBLIO NU13 notebook
COMPEX iWavePort WL11B+ 11Mbps Wireless LAN PCMCIA Card (HERMES-II hardware)

>Description:

	Some Windows(R) drivers cause ndiscvt to generate a driver which
does not match any hardware if INF file use string assigment in vendor/device
IDs. For example, see [Agere Systems.NT.5.1] section and %C08% device
identificator.

>How-To-Repeat:

$ ndiscvt -i WLAGSALL.INF -s WLAGS48D.SYS -o ndis_driver_data.h

Generated ndis_driver_data.h does not have "#define NDIS_PCMCIA_DEV_TABLE".

--- WLAGSALL.INF begins here ---
;
; Copyright 2003, Agere Systems Inc
;

[Version]
Signature="$CHICAGO$"
Class=Net
Provider="Agere Systems"
DriverVer=08/25/2003, 7.82.0.542
ClassGUID={4d36e972-e325-11ce-bfc1-08002be10318}
Compatible=1
Catalogfile.NT=wlags2x.cat

[Manufacturer]
Agere="Agere Systems", NT.5.1

[ControlFlags]
ExcludeFromSelect = *

[Agere Systems]
%N08%=D08,PCMCIA\Agere_Systems-Wireless_PC_Card_Model_0110-C4ED

[Agere Systems.NT.5.1]
%N08%=DXP08,%C08%

[D08]
AddReg=AC,A98,A98P2,A98A,A9808
CopyFiles=C98DP2,C98SP2

[A9808]
HKR,,VendorDescription,,%N08%
HKR,Ndi,DeviceID,,%C08%

[D08.NT]
AddReg=AC,A2K,A2KP2,A2K08
CopyFiles=C2KDP2,C2KSP2
Characteristics=0x84
BusType=8

[D08.NT.Services]
AddService=wlags48d,2,SP2,EP2

[D08.NT.CoInstallers]
CopyFiles=CCIP2
AddReg=ACIP2

[A2K08]
HKR,,VendorDescription,,%N08%

[DXP08]
AddReg=AC,AXP,AXPP2,AXP08
DelReg=DRXPV
CopyFiles=CXPDP2,CXPSP2
Characteristics=0x84
BusType=8

[DXP08.Services]
AddService=wlags48d,2,SP2,EP2

[DXP08.CoInstallers]
CopyFiles=CCIP2
AddReg=ACIP2

[AXP08]
HKR,,VendorDescription,,%N08%

[S]
HKR,,Silent,,"0"

[AC]
HKR,,DriverMajor,,"7"
HKR,,DriverMinor,,"82"
HKR,,DriverEnable,,"1"
HKR,,Configured,,"1"
HKR,,DesiredSSID,,"Agere Systems"
HKR,Ndi\Interfaces,LowerRange,0,"ethernet"

[A98]
HKR,,LoadVxD,,1
HKR,,EnumPropPages,,"netdi.dll,EnumPropPages"
HKR,,IOBaseAddress,1,02,00,00,00
HKR,,InterruptNumber,1,04,00,00,00
HKR,,EnableIRQSharing,1,01,00,00,00
HKR,,OSType,,"2"
HKR,Ndi\Interfaces,DefLower,0,"ethernet"
HKR,Ndis,MajorNdisVersion,1,03
HKR,Ndis,MinorNdisVersion,1,0A

[A98P2]
HKR,,DriverVariant,,"3"
HKR,,DevLoader,,*ndis
HKR,,DeviceVxDs,,wlags48c.sys
HKR,Ndi\Interfaces,DefUpper,0,"ndis3"
HKR,Ndi\Interfaces,UpperRange,0,"ndis3"
HKR,Ndi,NdiInstaller,,"wiags48c.dll,WV41NdiProc"
HKR,Ndis,LogDriverName,,"wlags48c"

[A98A]
HKR,,BusType,,8
HKR,Ndi,CardType,,"PCMCIA"

[A2K]
HKR,Ndi\Interfaces,UpperRange,0,"ndis5"
HKR,,NDT,,"1"
HKR,,OSType,,"8"

[A2KP2]
HKR,,DriverVariant,,"4"
HKR,Ndi,Service,0,"wlags48d"

[AXP]
HKR,,NDT,,"1"
HKR,,OSType,,"32"
HKR,Ndi\Interfaces,UpperRange,0,"ndis5"
HKR,Ndi\params\OwnChannel,ParamDesc,0,%1CH%
HKR,Ndi\params\OwnChannel,Type,0,enum
HKR,Ndi\params\OwnChannel,Default,0, 0
HKR,Ndi\params\OwnChannel\enum,0,0,%UD%
HKR,Ndi\params\OwnChannel\enum,1,0,"01"
HKR,Ndi\params\OwnChannel\enum,2,0,"02"
HKR,Ndi\params\OwnChannel\enum,3,0,"03"
HKR,Ndi\params\OwnChannel\enum,4,0,"04"
HKR,Ndi\params\OwnChannel\enum,5,0,"05"
HKR,Ndi\params\OwnChannel\enum,6,0,"06"
HKR,Ndi\params\OwnChannel\enum,7,0,"07"
HKR,Ndi\params\OwnChannel\enum,8,0,"08"
HKR,Ndi\params\OwnChannel\enum,9,0,"09"
HKR,Ndi\params\OwnChannel\enum,10,0,"10"
HKR,Ndi\params\OwnChannel\enum,11,0,"11"
HKR,Ndi\params\OwnChannel\enum,12,0,"12"
HKR,Ndi\params\OwnChannel\enum,13,0,"13"
HKR,Ndi\params\OwnChannel\enum,14,0,"14"
HKR,Ndi\params\PowerMode,ParamDesc,0,%2PM%
HKR,Ndi\params\PowerMode,Type,0,enum
HKR,Ndi\params\PowerMode,Default,0,0
HKR,Ndi\params\PowerMode\enum,2,0,%AUTO%
HKR,Ndi\params\PowerMode\enum,1,0,%ON%
HKR,Ndi\params\PowerMode\enum,0,0,%OFF%

[AXPP2]
HKR,,DriverVariant,,"4"
HKR,Ndi,Service,0,"wlags48d"

[C98DP2]
wlags48c.sys

[C2KDP2]
wlags48d.sys

[CXPDP2]
wlags48d.sys

[C98SP2]
wnags48c.cpl
wcags48c.exe
waags48c.dll
wnags.hlp
wnags.cnt
wuags48c.vxd
wiags48c.dll

[C2KSP2]
wnags48d.cpl
wcags48d.exe
waags48d.dll
wnags.hlp
wnags.cnt

[CXPSP2]
wnags48d.cpl
wcags48d.exe
waags48d.dll
wnags.hlp
wnags.cnt

[CCIP]
wdags48b.dll

[ACIP2]
HKR,,CoInstallers32,0x00010000,"wdags48d.dll,WLDeviceCoInstaller"

[CCIP2]
wdags48d.dll

[DRXPV]
HKR,Ndi\params

[SP2]
DisplayName=%SDP2%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\wlags48d.sys
LoadOrderGroup=NDIS

[EP2]
AddReg=ALP2

[ALP2]
HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\netevent.dll;%%SystemRoot%%\System32\drivers\wlags48d.sys"
HKR,,TypesSupported,0x00010001,7

[DestinationDirs]
DefaultDestDir=11
C98DP2=11
C2KDP2=12
CXPDP2=12
CCIP2=11
CCIP=11

[SourceDisksNames]
1 = %DISKID%,,,

[SourceDisksFiles]
wlags48.sys=1
wlags48b.sys=1
wcags48.exe=1
wcags48b.exe=1
waags48.dll=1
waags48b.dll=1
wdags48b.dll=1
wnags48.cpl=1
wnags48b.cpl=1
wuags48.vxd=1
wiags48.dll=1
wfags48b.sys=1
wlags51.sys=1
wlags51b.sys=1
wcags51.exe=1
wcags51b.exe=1
waags51.dll=1
waags51b.dll=1
wdags51b.dll=1
wnags51.cpl=1
wnags51b.cpl=1
wuags51.vxd=1
wiags51.dll=1
wlags48c.sys=1
wlags48d.sys=1
wcags48c.exe=1
wcags48d.exe=1
waags48c.dll=1
waags48d.dll=1
wdags48d.dll=1
wnags48c.cpl=1
wnags48d.cpl=1
wuags48c.vxd=1
wiags48c.dll=1
wnags.hlp=1
wnags.cnt=1

[Strings]
1CH="1. Channel"
2PM="2. Card Power Management"
UD="Use default channel"
OFF="Off"
ON="On"
AUTO="Auto"

DISKID="Wireless Disk"

N08="Wireless PC Card Model 0110"

C08="PCMCIA\Agere_Systems-Wireless_PC_Card_Model_0110-C4ED"

SDP2="Agere Wireless PCCard Service"
--- WLAGSALL.INF ends here ---

>Fix:

	Try following patch:

--- ndiscvt.patch begins here ---
--- usr.sbin/ndiscvt/inf.c.orig	Sun Mar  7 05:49:06 2004
+++ usr.sbin/ndiscvt/inf.c	Thu Nov 25 09:30:34 2004
@@ -233,7 +233,7 @@ dump_pci_id(const char *s)
 static void
 dump_deviceids_pci()
 {
-	struct assign *manf, *dev;
+	struct assign *manf, *dev, *devid;
 	struct section *sec;
 	struct assign *assign;
 	char xpsec[256];
@@ -258,8 +258,8 @@ dump_deviceids_pci()
 
 	TAILQ_FOREACH(assign, &ah, link) {
 		if (assign->section == sec) {
-			dev = find_assign("strings", assign->key);
-			if (strcasestr(assign->vals[1], "PCI") != NULL) {
+			devid = find_assign("strings", assign->vals[1]);
+			if (strcasestr(devid->vals[0], "PCI") != NULL) {
 				found++;
 				break;
 			}
@@ -285,9 +285,10 @@ retry:
 	TAILQ_FOREACH(assign, &ah, link) {
 		if (assign->section == sec) {
 			dev = find_assign("strings", assign->key);
+			devid = find_assign("strings", assign->vals[1]);
 			/* Emit device IDs. */
-			if (strcasestr(assign->vals[1], "PCI") != NULL)
-				dump_pci_id(assign->vals[1]);
+			if (strcasestr(devid->vals[0], "PCI") != NULL)
+				dump_pci_id(devid->vals[0]);
 			else
 				continue;
 			/* Emit device description */
@@ -312,7 +313,7 @@ retry:
 static void
 dump_deviceids_pcmcia()
 {
-	struct assign *manf, *dev;
+	struct assign *manf, *dev, *devid;
 	struct section *sec;
 	struct assign *assign;
 	char xpsec[256];
@@ -337,8 +338,8 @@ dump_deviceids_pcmcia()
 
 	TAILQ_FOREACH(assign, &ah, link) {
 		if (assign->section == sec) {
-			dev = find_assign("strings", assign->key);
-			if (strcasestr(assign->vals[1], "PCMCIA") != NULL) {
+			devid = find_assign("strings", assign->vals[1]);
+			if (strcasestr(devid->vals[0], "PCMCIA") != NULL) {
 				found++;
 				break;
 			}
@@ -364,9 +365,10 @@ retry:
 	TAILQ_FOREACH(assign, &ah, link) {
 		if (assign->section == sec) {
 			dev = find_assign("strings", assign->key);
+			devid = find_assign("strings", assign->vals[1]);
 			/* Emit device IDs. */
-			if (strcasestr(assign->vals[1], "PCMCIA") != NULL)
-				dump_pcmcia_id(assign->vals[1]);
+			if (strcasestr(devid->vals[0], "PCMCIA") != NULL)
+				dump_pcmcia_id(devid->vals[0]);
 			else
 				continue;
 			/* Emit device description */
--- ndiscvt.patch ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list