summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ndiscvt/inf.c
Commit message (Collapse)AuthorAgeFilesLines
* MFC r288120: Fix crash on parsing some inf filesamdmi32015-10-061-0/+6
|
* Integrate the NDIS USB support code to CURRENT.weongyo2008-12-271-0/+120
| | | | | | | | | | | | | | | | | | | | | | | | Now the NDISulator supports NDIS USB drivers that it've tested with devices as follows: - Anygate XM-142 (Conexant) - Netgear WG111v2 (Realtek) - U-Khan UW-2054u (Marvell) - Shuttle XPC Accessory PN20 (Realtek) - ipTIME G054U2 (Ralink) - UNiCORN WL-54G (ZyDAS) - ZyXEL G-200v2 (ZyDAS) All of them succeeded to attach and worked though there are still some problems that it's expected to be solved. To use NDIS USB support, you should rebuild and install ndiscvt(8) and if you encounter a problem to attach please set `hw.ndisusb.halt' to 0 then retry. I expect no changes of the NDIS code for PCI, PCMCIA devices. Obtained from: //depot/projects/ndisusb/...
* handle .INF files for PCMCIA correctly that specify multiple entries inweongyo2008-06-181-7/+13
| | | | | | their [Manufacturer] sections and prevent a case that NDIS_PCI_DEV_TABLE definition was always emitted that it's only emitted once if a .INF file is for PCI.
* If the .inf file did not have a Default entry for the registry key then writethompsa2008-04-151-1/+3
| | | | out a blank value and close the brackets on the ndis_regvals array.
* Update ndiscvt to handle .INF files that specify multiple entries inwpaul2005-05-151-8/+56
| | | | their [Manufacturer] sections.
* Re-staticize a few functions I un-staticized for debugging purposeswpaul2005-02-161-2/+2
| | | | | on amd64 and accidentally forgot to put back. (Have I mentioned that gdb on amd64 needs work? It does. Boy howdy.)
* Add support for Windows/x86-64 binaries to Project Evil.wpaul2005-02-161-5/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ville-Pertti Keinonen (will at exomi dot comohmygodnospampleasekthx) deserves a big thanks for submitting initial patches to make it work. I have mangled his contributions appropriately. The main gotcha with Windows/x86-64 is that Microsoft uses a different calling convention than everyone else. The standard ABI requires using 6 registers for argument passing, with other arguments on the stack. Microsoft uses only 4 registers, and requires the caller to leave room on the stack for the register arguments incase the callee needs to spill them. Unlike x86, where Microsoft uses a mix of _cdecl, _stdcall and _fastcall, all routines on Windows/x86-64 uses the same convention. This unfortunately means that all the functions we export to the driver require an intermediate translation wrapper. Similarly, we have to wrap all calls back into the driver binary itself. The original patches provided macros to wrap every single routine at compile time, providing a secondary jump table with a customized wrapper for each exported routine. I decided to use a different approach: the call wrapper for each function is created from a template at runtime, and the routine to jump to is patched into the wrapper as it is created. The subr_pe module has been modified to patch in the wrapped function instead of the original. (On x86, the wrapping routine is a no-op.) There are some minor API differences that had to be accounted for: - KeAcquireSpinLock() is a real function on amd64, not a macro wrapper around KfAcquireSpinLock() - NdisFreeBuffer() is actually IoFreeMdl(). I had to change the whole NDIS_BUFFER API a bit to accomodate this. Bugs fixed along the way: - IoAllocateMdl() always returned NULL - kern_windrv.c:windrv_unload() wasn't releasing private driver object extensions correctly (found thanks to memguard) This has only been tested with the driver for the Broadcom 802.11g chipset, which was the only Windows/x86-64 driver I could find.
* Add preliminary support for PCMCIA devices in addition to PCI/cardbus.wpaul2004-03-071-8/+154
| | | | | | | | | | | | if_ndis.c has been split into if_ndis_pci.c and if_ndis_pccard.c. The ndiscvt(8) utility should be able to parse device info for PCMCIA devices now. The ndis_alloc_amem() has moved from kern_ndis.c to if_ndis_pccard.c so that kern_ndis.c no longer depends on pccard. NOTE: this stuff is not guaranteed to work 100% correctly yet. So far I have been able to load/init my PCMCIA Cisco Aironet 340 card, but it crashes in the interrupt handler. The existing support for PCI/cardbus devices should still work as before.
* Some Windows .INF files are deliberately sabotaged to prevent them fromwpaul2004-01-271-1/+22
| | | | | | | | | | | | | | | | | | | | | | | loading on a particular version of Windows. For example, a .INF file for a Windows 2000 driver may have an empty [foo.NT.5.1] section which will be ingored on Win2K (whose .INF parser won't look for sections decorated with .NT.5.1) in favor of a [foo] section. Likewise, a WinXP file will have an empty [foo] section which will be ignored in favor of [foo.NT.5.1]. The problem is, we can handle both Win2K and WinXP drivers, and we don't want to exclude either one. As a workaround, we try to pretend we are WinXP by default and search for sections decorated with .NT.5.1, but if we don't turn up any records, we assume that maybe we're being fooled by a sabotaged .INF file and make one more pass looking for undecorated sections instead. This allows us to parse the .INF files for both the Win2K and the WinXP Centrino wireless drivers. I'd give anything for 5 minutes alone in a room with whoever wrote Microsoft's .INF file parser. Just 5 minutes. That's all.
* Deal with keys with descriptions that have empty fields in some ofwpaul2004-01-231-4/+12
| | | | | | | | their lines. Properly discard PCMCIA device declarations. I plan to support PCMCIA cards, but they don't work yet, and it appears some .INF files declare both PCI and PCMCIA device instances.
* Yet another inf file handling tweak: when checking for Ndi\Params\foowpaul2004-01-131-2/+2
| | | | | | | | keys, don't just do a substring match on "Ndi\Params". Instead, check explicitly for strings that begin with "Ndi\Params". Why? Because it's possible to create your own keys with different paths, like "PROSetNdi\NdiExt\Params" which is what Intel does in their PRO/1000 driver's .INF file.
* Tweak ndiscvt to support yet another flavor of .INF files (look forwpaul2004-01-031-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | the NTx86 section decoration). subr_ndis.c: correct the behavior of ndis_query_resources(): if the caller doesn't provide enough space to return the resources, tell it how much it needs to provide and return an error. subr_hal.c & subr_ntoskrnl.c: implement/stub a bunch of new routines; ntoskrnl: KefAcquireSpinLockAtDpcLevel KefReleaseSpinLockFromDpcLevel MmMapLockedPages InterlockedDecrement InterlockedIncrement IoFreeMdl KeInitializeSpinLock HAL: KfReleaseSpinLock KeGetCurrentIrql KfAcquireSpinLock Lastly, correct spelling of "_aullshr" in the ntoskrnl functable.
* Handle WinNT .inf files with a $windows nt$ signature but no .NT decoratedwpaul2004-01-021-1/+9
| | | | | | AddReg sections. Also insert extra newline after emitting device name overrides.
* Clean up ndiscvt a bit (leaving out the -i flag didn't work) and addwpaul2004-01-021-1/+29
| | | | | | | | | | | | | | | | | | copyrights to the inf parser files. Add a -n flag to ndiscvt to allow the user to override the default device name of NDIS devices. Instead of "ndis0, ndis1, etc..." you can have "foo0, foo1, etc..." This allows you to have more than one kind of NDIS device in the kernel at the same time. Convert from printf() to device_printf() in if_ndis.c, kern_ndis.c and subr_ndis.c. Create UMA zones for ndis_packet and ndis_buffer structs allocated on transmit. The zones are created and destroyed in the modevent handler in kern_ndis.c. printf() and UMA changes submitted by green@freebsd.org
* Remember to use stringcvt() to expand %foo% strings in registry values inwpaul2003-12-301-1/+1
| | | | | | dump_defaultinfo(). Noticed by: green@freebsd.org
* Deal with the duplicate sysctl leaf problem. A .inf file may containwpaul2003-12-181-32/+26
| | | | | | | | | | | | | | | | | | definitions for more than one device (usually differentiated by the PCI subvendor/subdevice ID). Each device also has its own tree of registry keys. In some cases, each device has the same keys, but sometimes each device has a unique tree but with overlap. Originally, I just had ndiscvt(8) dump out all the keys it could find, and we would try to apply them to every device we could find. Now, each key has an index number that matches it to a device in the device ID list. This lets us create just the keys that apply to a particular device. I also added an extra field to the device list to hold the subvendor and subdevice ID. Some devices are generic, i.e. there is no subsystem definition. If we have a device that doesn't match a specific subsystem value and we have a generic entry, we use the generic entry.
* Support yet another variant of WinXP .INF files.wpaul2003-12-131-5/+11
|
* Attempt to handle WinXP .INF files. Also, in dump_regvals(), handlewpaul2003-12-121-9/+36
| | | | | | | | | | | | the case where there's an entry in the manufacturer's device list but no corresponding installation section (and hence no AddReg assignments), i.e. if dev = find_assign(sname, "AddReg"); returns NULL, then don't try to dereference dev. There is a fundamental problem with the handling of .INF files that contain definitions for multiple devices: right now we dump all the AddReg sections that we find, but don't distinguish what device they belong to. This often results in duplicate keys.
* Fix handling of .INF files with more than one PCI ID defined.wpaul2003-12-111-2/+3
|
* Commit the ndiscvt(8) utility too. (Missed it in the last import.)wpaul2003-12-111-0/+484
OpenPOWER on IntegriCloud