Commit Graph

4179 Commits

Author SHA1 Message Date
Bill Paul
d8f2dda739 Add support for Windows/x86-64 binaries to Project Evil.
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.
2005-02-16 05:41:18 +00:00
Scott Long
febf4577c8 Add sys/dev/ieee488/ibfoo.c for hte pcii driver. Fixes the broken tinderbox
for the last few days.
2005-02-14 06:00:34 +00:00
David E. O'Brien
5af30068ff Barrow from kmod.mk and protect against adding -fno-strict-aliasing
when it is already in COPTFLAGS.
2005-02-13 05:58:40 +00:00
Marius Strobl
82ec256c67 Back out no longer necessary work-arounds added in rev. 1.59 for building
SBus-only kernels regarding ofw_machdep.c.
2005-02-12 19:19:20 +00:00
Ruslan Ermilov
f165cb7c5d Further embellish rev. 1.180: protect against -fno-strict-aliasing
being already in CFLAGS (as is the case with "make buildkernel").

NB: rev. 1.180 is only needed due to a broken setting of CFLAGS in
tinderbox.
2005-02-11 21:04:20 +00:00
Poul-Henning Kamp
1121c39497 Make non-SOFTUPDATES kernels compile again.
Integrate the stubfile into the main file now that license issues have been
long resolved.
2005-02-11 08:13:31 +00:00
Yoshihiro Takahashi
ff126c43cd Fix build error (s/wd80x3.c/if_ed_wd80x3.c/). 2005-02-11 03:44:03 +00:00
John-Mark Gurney
f80d282814 bump the Makefile config versions now that config is 600001...
Forgotten by:	des
2005-02-10 21:15:31 +00:00
Gleb Smirnoff
75737f3423 Add strspn() to libkern.
Ok'ed by:	rwatson
2005-02-10 20:39:39 +00:00
Warner Losh
969eaf2179 Break out obscure ISA cards into their own files, as well as ne2000
and wd80x3 support.  Make the obscure ISA cards optional, and add
those options to NOTES on i386 (note: the ifdef around the whole code
is for module building).  Tweak pc98 ed support to include wd80x3 too.
Add goo for alpha too.

The affected cards are the 3Com 3C503, HP LAN+ and SIC (whatever that
is).  I couldn't find any of these for sale on ebay, so they are
untested.  If you have one of these cards, and send it to me, I'll
ensure that you have no future problems with it...

Minor cleanups as well by using functions rather than cut and paste
code for some probing operations (where the function call overhead is
lost in the noise).

Remove use of kvtop, since they aren't required anymore.  This driver
needs to get its memory mapped act together, however, and use bus
space.  It doesn't right now.

This reduces the size of if_ed.ko from about 51k to 33k on my laptop.
2005-02-09 20:03:40 +00:00
David E. O'Brien
db0cd7e103 Emblish rev 1.180 to -fno-strict-alias w/-Os & -O3 also. 2005-02-09 07:34:22 +00:00
Bill Paul
b545a3b822 Next step on the road to IRPs: create and use an imitation of the
Windows DRIVER_OBJECT and DEVICE_OBJECT mechanism so that we can
simulate driver stacking.

In Windows, each loaded driver image is attached to a DRIVER_OBJECT
structure. Windows uses the registry to match up a given vendor/device
ID combination with a corresponding DRIVER_OBJECT. When a driver image
is first loaded, its DriverEntry() routine is invoked, which sets up
the AddDevice() function pointer in the DRIVER_OBJECT and creates
a dispatch table (based on IRP major codes). When a Windows bus driver
detects a new device, it creates a Physical Device Object (PDO) for
it. This is a DEVICE_OBJECT structure, with semantics analagous to
that of a device_t in FreeBSD. The Windows PNP manager will invoke
the driver's AddDevice() function and pass it pointers to the DRIVER_OBJECT
and the PDO.

The AddDevice() function then creates a new DRIVER_OBJECT structure of
its own. This is known as the Functional Device Object (FDO) and
corresponds roughly to a private softc instance. The driver uses
IoAttachDeviceToDeviceStack() to add this device object to the
driver stack for this PDO. Subsequent drivers (called filter drivers
in Windows-speak) can be loaded which add themselves to the stack.
When someone issues an IRP to a device, it travel along the stack
passing through several possible filter drivers until it reaches
the functional driver (which actually knows how to talk to the hardware)
at which point it will be completed. This is how Windows achieves
driver layering.

Project Evil now simulates most of this. if_ndis now has a modevent
handler which will use MOD_LOAD and MOD_UNLOAD events to drive the
creation and destruction of DRIVER_OBJECTs. (The load event also
does the relocation/dynalinking of the image.) We don't have a registry,
so the DRIVER_OBJECTS are stored in a linked list for now. Eventually,
the list entry will contain the vendor/device ID list extracted from
the .INF file. When ndis_probe() is called and detectes a supported
device, it will create a PDO for the device instance and attach it
to the DRIVER_OBJECT just as in Windows. ndis_attach() will then call
our NdisAddDevice() handler to create the FDO. The NDIS miniport block
is now a device extension hung off the FDO, just as it is in Windows.
The miniport characteristics table is now an extension hung off the
DRIVER_OBJECT as well (the characteristics are the same for all devices
handled by a given driver, so they don't need to be per-instance.)
We also do an IoAttachDeviceToDeviceStack() to put the FDO on the
stack for the PDO. There are a couple of fake bus drivers created
for the PCI and pccard buses. Eventually, there will be one for USB,
which will actually accept USB IRP.s

Things should still work just as before, only now we do things in
the proper order and maintain the correct framework to support passing
IRPs between drivers.

Various changes:

- corrected the comments about IRQL handling in subr_hal.c to more
  accurately reflect reality
- update ndiscvt to make the drv_data symbol in ndis_driver_data.h a
  global so that if_ndis_pci.o and/or if_ndis_pccard.o can see it.
- Obtain the softc pointer from the miniport block by referencing
  the PDO rather than a private pointer of our own (nmb_ifp is no
  longer used)
- implement IoAttachDeviceToDeviceStack(), IoDetachDevice(),
  IoGetAttachedDevice(), IoAllocateDriverObjectExtension(),
  IoGetDriverObjectExtension(), IoCreateDevice(), IoDeleteDevice(),
  IoAllocateIrp(), IoReuseIrp(), IoMakeAssociatedIrp(), IoFreeIrp(),
  IoInitializeIrp()
- fix a few mistakes in the driver_object and device_object definitions
- add a new module, kern_windrv.c, to handle the driver registration
  and relocation/dynalinkign duties (which don't really belong in
  kern_ndis.c).
- made ndis_block and ndis_chars in the ndis_softc stucture pointers
  and modified all references to it
- fixed NdisMRegisterMiniport() and NdisInitializeWrapper() so they
  work correctly with the new driver_object mechanism
- changed ndis_attach() to call NdisAddDevice() instead of ndis_load_driver()
  (which is now deprecated)
- used ExAllocatePoolWithTag()/ExFreePool() in lookaside list routines
  instead of kludged up alloc/free routines
- added kern_windrv.c to sys/modules/ndis/Makefile and files.i386.
2005-02-08 17:23:25 +00:00
Max Laier
c721916790 Fix sloppy use of "manpage", bump .Dd where applicable and rename RED to
Random Early Detection (not ... Drop) in order to be consistent with other
documentation on ALTQ

Pointed out by:	simon, ru, Brad Davis
2005-02-07 23:20:12 +00:00
Nate Lawson
aca8665972 Hook acpi_throttle(4) up to the build. It's currently part of acpi_perf.ko
although this may change.
2005-02-06 21:13:41 +00:00
Poul-Henning Kamp
df05d0fb93 Further elaborate the GPIB driver. We now support a minimal subset of
the ibfoo() API.
2005-02-06 15:22:23 +00:00
Nate Lawson
69bc96f231 Build cpufreq and acpi_perf on platforms that are likely to be able to
use them.
2005-02-05 21:01:09 +00:00
Gleb Smirnoff
f2a7ef4e00 Hook up ng_ipfw to kernel build. 2005-02-05 12:15:56 +00:00
Yoshihiro Takahashi
c94fa11fc4 cosmetic changes. 2005-02-04 15:34:52 +00:00
Yoshihiro Takahashi
328a9c4f3d The bs and wdc drivers are gone. 2005-02-04 15:29:54 +00:00
Yoshihiro Takahashi
2e047e2eb8 MFi386: revision 1.514. 2005-02-04 13:33:46 +00:00
Nate Lawson
335e4ff3cd Hook up the cpufreq framework, acpi_perf(4), and cpufreq(4) drivers. 2005-02-04 05:49:36 +00:00
Matthew N. Dodd
1f005b6723 - Split out PCI support.
- Add previously removed ISA support.

Submitted by:	David S. Madole <david AT madole.net>
2005-02-03 23:01:01 +00:00
Pawel Jakub Dawidek
f627315f1e - Move gets() function to libkern (I want to use it outside vfs_mount.c).
- Add buffer size limitations (overflow will not be possible anymore).
- Add 'visible' option, which will allow for passphrase reading in the
  future.
- Remove special treatment of '@' and '#', those two are only confusing.

Discussed with:	rwatson
MFC after:	2 weeks
2005-02-03 15:10:58 +00:00
Peter Grehan
bd985cab34 - remove NO_MODULES since they've been working for some time
- add -fno-omit-framepointer to CFLAGS if DDB is enabled so
  backtraces will still work when optimization is enabled.
  Stolen from Makefile.amd64.
2005-02-03 06:28:17 +00:00
Peter Grehan
55a5dcc8fe Don't lose the frame pointer for PPC modules: backtrace doesn't work. 2005-02-02 23:44:24 +00:00
Poul-Henning Kamp
83820457eb Add a IEEE488 driver for PCIIA compatible cards.
This driver implements "unaddressed listen only mode", which is what
printers and plotters commonly do on GP-IB busses.

This means that you can capture print/plot like output from your
instruments by configuring them as necessary (good luck!) and

	cat -u /dev/gpib0l > /tmp/somefile

Since there is no way to know when no more output is comming you
will have to ctrl-C the cat process when it is done (that is why
the -u is important).
2005-02-01 16:59:23 +00:00
Warner Losh
cf9a9fe79d Add required ing 2005-01-26 23:27:12 +00:00
Warner Losh
39ed0204bc Add -fno-strict-alias whenever someone is compiling with -O2,
unconditionally.
2005-01-26 21:35:55 +00:00
Warner Losh
daaea3952c Generally force -Werror for modules when not compiling with icc. This
has burned me for the last time.
2005-01-26 15:49:23 +00:00
David E. O'Brien
4d28b4d206 Embellish rev 1.61. If we're not building a debug kernel, use -O2 as before.
Submitted by:	ru
2005-01-22 00:58:34 +00:00
Bosko Milekic
e4eb384b47 Bring in MemGuard, a very simple and small replacement allocator
designed to help detect tamper-after-free scenarios, a problem more
and more common and likely with multithreaded kernels where race
conditions are more prevalent.

Currently MemGuard can only take over malloc()/realloc()/free() for
particular (a) malloc type(s) and the code brought in with this
change manually instruments it to take over M_SUBPROC allocations
as an example.  If you are planning to use it, for now you must:

	1) Put "options DEBUG_MEMGUARD" in your kernel config.
	2) Edit src/sys/kern/kern_malloc.c manually, look for
	   "XXX CHANGEME" and replace the M_SUBPROC comparison with
	   the appropriate malloc type (this might require additional
	   but small/simple code modification if, say, the malloc type
	   is declared out of scope).
	3) Build and install your kernel.  Tune vm.memguard_divisor
	   boot-time tunable which is used to scale how much of kmem_map
	   you want to allott for MemGuard's use.  The default is 10,
	   so kmem_size/10.

ToDo:
	1) Bring in a memguard(9) man page.
	2) Better instrumentation (e.g., boot-time) of MemGuard taking
	   over malloc types.
	3) Teach UMA about MemGuard to allow MemGuard to override zone
	   allocations too.
	4) Improve MemGuard if necessary.

This work is partly based on some old patches from Ian Dowse.
2005-01-21 18:09:17 +00:00
Olivier Houchard
949bf67b27 Add a new make option, ARM_BIG_ENDIAN, to compile big endian kernels. 2005-01-19 16:43:43 +00:00
Warner Losh
9e88c30274 MFp4: fix a minor formatting inconsistancy 2005-01-19 01:40:02 +00:00
David E. O'Brien
9196a9005e While we're building kernels -g (ie, makeoptions DEBUG=-g), use -O as it
provides truer debugger stack traces.  For those that want to stick with
-O2 kernel builds, one should probably add -fno-optimize-sibling-calls
so that each stack frame as a frame pointer.
It is semi-promissed by the Release Engineers that when RELENG_6 is
created we go back to -O2.

Desired by:	scottl, jhb
2005-01-18 03:32:53 +00:00
Ruslan Ermilov
1b7525eb4b If USER of HOSTNAME is set to an empty value, use the fallback value.
Submitted by:	marck
2005-01-15 13:25:41 +00:00
Tom Rhodes
d6e822b2e4 Give up on trying to please everyone and restore 1.64 with regards to
dealing with sudo users.
2005-01-14 18:13:56 +00:00
John Baldwin
27dc7a9203 Allow the dragon and snake screen savers to be statically compiled into a
kernel and add them to NOTES.

MFC after:	2 weeks
2005-01-13 15:55:34 +00:00
Tom Rhodes
fc3ec7491f Improve previous commit with regards to the user check.
Submitted by:	nectar
2005-01-13 00:21:38 +00:00
Tom Rhodes
3952015f40 Reflect reality when a sudo user builds/installs a kernel. [1]
/* -> /*- for copyright notices. [2]

[1]:
PR:		41317
Submitted by:	marck (original version)

[2]:
Discussed with:	imp
2005-01-12 21:28:25 +00:00
Pawel Jakub Dawidek
560cb85703 Connect SHSEC GEOM class to the build. 2005-01-11 18:18:40 +00:00
SUZUKI Shinsuke
017bee7424 KAME-IPSEC has already supports TCP_SIGNATURE(IPv4) 2005-01-11 04:24:17 +00:00
Warner Losh
2948a1cb52 sort more things alphabetically 2005-01-10 05:11:40 +00:00
Warner Losh
1307b81e55 Sort entries.
Remove a couple of 'card' lines that were somehow missed when OLDCARD was
desupported.
2005-01-10 04:40:23 +00:00
Warner Losh
54c387fff6 Sort entires better. 2005-01-10 04:38:58 +00:00
Peter Grehan
fded756e72 Modules on PPC need to be compiled with -mlongcall to get around
the +/-64k blr offset limitation. With gcc bug #12769 fixed, it's
time to put enable this.
2005-01-06 06:26:11 +00:00
John Baldwin
34341a712f Typo. 2005-01-05 22:33:11 +00:00
Warner Losh
2c4b22495d Minor nits in formatting continued lines 2005-01-04 10:22:11 +00:00
Warner Losh
6588195770 cnw as a pccard device was commented out, so uncomment it so LINT will build. 2005-01-04 10:21:06 +00:00
Warner Losh
c35aafff95 Remove last vestiges of old wd driver. ata works well on pc98 and
there was no objection on the pc98 list when I asked if it could be
removed a while ago.
2005-01-04 06:25:24 +00:00
Warner Losh
944d0f0ff2 move all the card entries to files.pc98
style change: regularize tabbing
2005-01-04 06:07:25 +00:00