freebsd-skq/sys/conf
Bill Paul c854fc1092 Commit the first cut of Project Evil, also known as the NDISulator.
Yes, it's what you think it is. Yes, you should run away now.

This is a special compatibility module for allowing Windows NDIS
miniport network drivers to be used with FreeBSD/x86. This provides
_binary_ NDIS compatibility (not source): you can run NDIS driver
code, but you can't build it. There are three main parts:

sys/compat/ndis: the NDIS compat API, which provides binary
compatibility functions for many routines in NDIS.SYS, HAL.dll
and ntoskrnl.exe in Windows (these are the three modules that
most NDIS miniport drivers use). The compat module also contains
a small PE relocator/dynalinker which relocates the Windows .SYS
image and then patches in our native routines.

sys/dev/if_ndis: the if_ndis driver wrapper. This module makes
use of the ndis compat API and can be compiled with a specially
prepared binary image file (ndis_driver_data.h) containing the
Windows .SYS image and registry key information parsed out of the
accompanying .INF file. Once if_ndis.ko is built, it can be loaded
and unloaded just like a native FreeBSD kenrel module.

usr.sbin/ndiscvt: a special utility that converts foo.sys and foo.inf
into an ndis_driver_data.h file that can be compiled into if_ndis.o.
Contains an .inf file parser graciously provided by Matt Dodd (and
mercilessly hacked upon by me) that strips out device ID info and
registry key info from a .INF file and packages it up with a binary
image array. The ndiscvt(8) utility also does some manipulation of
the segments within the .sys file to make life easier for the kernel
loader. (Doing the manipulation here saves the kernel code from having
to move things around later, which would waste memory.)

ndiscvt is only built for the i386 arch. Only files.i386 has been
updated, and none of this is turned on in GENERIC. It should probably
work on pc98. I have no idea about amd64 or ia64 at this point.

This is still a work in progress. I estimate it's about %85 done, but
I want it under CVS control so I can track subsequent changes. It has
been tested with exactly three drivers: the LinkSys LNE100TX v4 driver
(Lne100v4.sys), the sample Intel 82559 driver from the Windows DDK
(e100bex.sys) and the Broadcom BCM43xx wireless driver (bcmwl5.sys). It
still needs to have a net80211 stuff added to it. To use it, you would
do something like this:

# cd /sys/modules/ndis
# make; make load
# cd /sys/modules/if_ndis
# ndiscvt -i /path/to/foo.inf -s /path/to/foo.sys -o ndis_driver_data.h
# make; make load
# sysctl -a | grep ndis

All registry keys are mapped to sysctl nodes. Sometimes drivers refer
to registry keys that aren't mentioned in foo.inf. If this happens,
the NDIS API module creates sysctl nodes for these keys on the fly so
you can tweak them.

An example usage of the Broadcom wireless driver would be:

# sysctl hw.ndis0.EnableAutoConnect=1
# sysctl hw.ndis0.SSID="MY_SSID"
# sysctl hw.ndis0.NetworkType=0 (0 for bss, 1 for adhoc)
# ifconfig ndis0 <my ipaddr> netmask 0xffffff00 up

Things to be done:

- get rid of debug messages
- add in ndis80211 support
- defer transmissions until after a status update with
  NDIS_STATUS_CONNECTED occurs
- Create smarter lookaside list support
- Split off if_ndis_pci.c and if_ndis_pccard.c attachments
- Make sure PCMCIA support works
- Fix ndiscvt to properly parse PCMCIA device IDs from INF files
- write ndisapi.9 man page
2003-12-11 22:34:37 +00:00
..
defines
files Remote meteor driver. It hasn't compiled in over 3 years. If someone 2003-12-07 04:41:11 +00:00
files.alpha Hook-up the uart(4) driver to the build. For a detailed description 2003-09-06 23:23:26 +00:00
files.amd64 Move the ia32_sigtramp.S file back under amd64/. This interfaces closely 2003-12-11 01:09:51 +00:00
files.i386 Commit the first cut of Project Evil, also known as the NDISulator. 2003-12-11 22:34:37 +00:00
files.ia64 Assimilate ia64 back into the fold with the common freebsd32/ia32 code. 2003-12-11 01:05:09 +00:00
files.pc98 The dgb driver is redundant with the digi driver in the tree. It uses 2003-12-07 04:18:52 +00:00
files.powerpc Hook grackle system controller/heathrow interrupt controller to PPC build. 2003-06-28 08:53:49 +00:00
files.sparc64 Copy ukbdmap.h rules from .i386. 2003-11-17 04:38:14 +00:00
kern.mk Add PowerPC CFLAGS. 2003-12-07 09:56:30 +00:00
kern.post.mk Turns out that building modules with the kernel opt files is 2003-11-25 04:12:43 +00:00
kern.pre.mk Moved $FreeBSD$ to the beginning of the file. 2003-11-05 12:20:16 +00:00
kmod_syms.awk Our awk does not implement the ARGIND variable, so we were attempting 2002-08-06 19:31:04 +00:00
kmod.mk o Remove @- from the ln and change it to a -sf. This was bogus, and 2003-11-19 05:08:27 +00:00
ldscript.alpha Use the new freebsd output format from Binutils 2.13.1. 2002-10-11 19:38:04 +00:00
ldscript.amd64 Sync up with the files in the hammer branch in the p4 tree to get basic 2003-05-01 02:59:24 +00:00
ldscript.i386 Align the .ctors section correctly. 2003-12-03 07:40:03 +00:00
ldscript.ia64 Load the kernel at a 64M instead of 5M. The advantage of this is that 2003-09-06 05:15:36 +00:00
ldscript.powerpc Page align the data segment. 2001-10-08 10:43:34 +00:00
ldscript.sparc64 Use the same SEARCH_DIR as other platforms. 2003-06-07 18:23:50 +00:00
majors Remote meteor driver. It hasn't compiled in over 3 years. If someone 2003-12-07 04:41:11 +00:00
majors.awk Add necessary awk magic to create a table of major numbers allocated 2003-02-27 08:52:11 +00:00
Makefile.alpha Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
Makefile.amd64 Stop this warning: 2003-09-30 03:49:09 +00:00
Makefile.i386 Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
Makefile.ia64 Revamp of the syscall path, exception and context handling. The 2003-05-16 21:26:42 +00:00
Makefile.pc98 Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
Makefile.powerpc Remove duplicate script for locore.o 2003-12-09 15:48:20 +00:00
Makefile.sparc64 Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
makeLINT.mk Implemented "nooption" and "nomakeoption" config(8) tokens. 2003-02-26 23:36:59 +00:00
makeLINT.sed Implemented "nooption" and "nomakeoption" config(8) tokens. 2003-02-26 23:36:59 +00:00
newvers.sh HEAD is at 5.2-CURRENT now 2003-12-07 03:56:12 +00:00
NOTES Remote meteor driver. It hasn't compiled in over 3 years. If someone 2003-12-07 04:41:11 +00:00
options Remote meteor driver. It hasn't compiled in over 3 years. If someone 2003-12-07 04:41:11 +00:00
options.alpha Add option NO_SIO to work-around the hardcoded dependency on sio(4). 2003-08-25 03:43:08 +00:00
options.amd64 Initial landing of SMP support for FreeBSD/amd64. 2003-11-17 08:58:16 +00:00
options.i386 The DEV_ACPI option is no longer used, so g/c it. 2003-12-10 19:30:42 +00:00
options.ia64 Add LOG2_ID_PAGE_SIZE to the mix of options on ia64. 2003-09-09 18:30:20 +00:00
options.pc98 MFi386: revision 1.201. 2003-11-15 12:31:02 +00:00
options.powerpc Options that go into homonymous headers shouldn't specify the header name. 2003-04-12 09:40:37 +00:00
options.sparc64 Hook syscons and the creator driver up to the sparc64. This compiles but 2003-08-24 01:54:06 +00:00
systags.sh