13521 Commits

Author SHA1 Message Date
Marius Strobl
99998ae585 Sync with openfirm(4) and check the return value of malloc() although
this isn't exactly necessary with M_WAITOK.
2005-05-19 15:23:17 +00:00
Marius Strobl
2ad154205f Update the names of some member variables in comments to refect reality.
Apparently this was forgotten when this code was derived from the BSD
openprom(4).
2005-05-19 15:22:16 +00:00
Marius Strobl
65fb49a994 - Try to not leak resources in the attach functions of the esp(4) SBus
front-end and the LSI64854 and NCR53C9x code in case one of these
  functions fails. Add detach functions to these parts and make esp(4)
  detachable.
- Revert rev. 1.7 of esp_sbus.c, since rev. 1.34 of sbus.c the clockfreq
  IVAR defaults to the per-child values.
- Merge ncr53c9x.c rev. 1.111 from NetBSD (partial):
  On reset, clear state flags and the msgout queue.
  In NetBSD code to notify the upper layer (i.e. CAM in FreeBSD) on reset
  was also added with this revision. This is believed to be not necessary
  in FreeBSD and was not merged.
  This makes ncr53c9x.c to be in sync with NetBSD up to rev. 1.114.
- Conditionalize the LSI64854 support on sbus(4) only instead of sbus(4)
  and esp(4) as it's also required for the 'dma', 'espdma' and 'ledma'
  busses/devices as well as the 'SUNW,bpp' device (printer port) which
  all hang off of sbus(4).
- Add a driver for the 'dma', 'espdma' and 'ledma' (pseudo-)busses/
  devices. These busses and devices actually represent the LSI64854 DMA
  engines for the ESP SCSI and LANCE Ethernet controllers found on the
  SBus of Ultra 1 and SBus add-on cards. With 'espdma' and 'ledma' the
  'esp' and 'le' devices hang off of the respective DMA bus instead of
  directly from the SBus. The 'dma' devices are either also used in this
  manner or on some add-on cards also as a companion device to an 'esp'
  device which also hangs off directly from the SBus. With the latter
  variant it's a bit tricky to glue the DMA engine to the core logic of
  the respective 'esp' device. With rev. 1.35 of sbus.c we are however
  guaranteed that such a 'dma' device is probed before the respective
  'esp' device which simplifies things a lot. [1]
- In the esp(4) SBus front-end read the part-unique ID code of Fast-SCSI
  capable chips the right way. This fixes erroneously detecting some
  chips as FAS366 when in fact they are not. Add explicit checks for the
  FAS100A, FAS216 and FAS236 variants instead treating all of these as
  ESP200. That way we can correctly set the respective Fast-SCSI config
  bits instead of driving them out of specs. This includes adding the
  FAS100A and FAS236 variants to the NCR53C9x core code. We probably
  still subsume some chip variants as ESP200 while in fact they are
  another variant which however shouldn't really matter as this will
  only happen when these chips are driven at 25MHz or less which implies
  not being able to run Fast-SCSI. [3]
- Add a workaround to the NCR53C9x interrupt handler which ignores the
  stray interrupt generated by FAS100A when doing path inquiry during
  boot and which otherwiese would trigger a panic.
- Add support for the 'esp' devices hanging off of a 'dma' or 'espdma'
  busses or which are companions of 'dma' devices to esp(4). In case of
  the variants that hang off of a DMA device this is a bit hackish as
  esp(4) then directly uses the softc of the respective parent to talk
  to the DMA engine. It might make sense to add an interface for this
  in order to implement this in a cleaner way however it's not yet clear
  how the requirements for the LANCE Ethernet controllers are and the
  hack works for now. [2]
  This effectively adds support for the onboard SCSI controller in
  Ultra 1 as well as most of the ESP-based SBus add-on cards to esp(4).
  With this the code for supporting the Performance Technologies SBS430
  SBus SCSI add-on cards is also largely in place the remaining bits
  were however omitted as it's unclear from the NetBSD how to couple
  the DMA engine and the core logic together for these cards.

Obtained from:	OpenBSD [1]
Obtained from:	NetBSD [2]
Clue from:	BSD/OS [3]
Reviewed by:	scottl (earlier version)
Tested with:	FSBE/S add-on card (FAS236), SSHA add-on card (ESP100A),
		Ultra 1 (onboard FAS100A), Ultra 2 (onboard FAS366)
2005-05-19 14:51:10 +00:00
Takanori Watanabe
b4b4c81522 Use General definition for general notify. 2005-05-19 09:13:26 +00:00
Alan Cox
66f27aca69 Convert to the faster bus_dmamap_load_mbuf_sg() interface.
MFC after: 1 week
2005-05-18 07:45:08 +00:00
Paul Saab
7caeec6a13 Support passthru ioctl commands from 32bit binaries. 2005-05-18 05:31:34 +00:00
Søren Schmidt
d78c6e89ae Make certain the the 48bit flag is reset if we dont translate LBA. 2005-05-17 12:31:54 +00:00
Maksim Yevmenkin
b4b485a5d8 Dont clear all flags in vkbd_clear_state_locked(). Clear only COMPOSE flag.
MFC after:	3 days
2005-05-16 17:21:10 +00:00
Bill Paul
02fa4220cd Correct type for workitem routines. 2005-05-16 16:50:52 +00:00
Søren Schmidt
ae337d1ee5 longer used (contents added to sys/ata.h) 2005-05-16 13:39:49 +00:00
Søren Schmidt
6667b30d15 Change the way ioctls are issue to ATA.
The most prominent part is that its now possible to issue ata_requests
directly to say acd0, instead of going through the cumbersome /dev/ata
device.
2005-05-16 13:07:27 +00:00
Warner Losh
ce86397a98 Add convenience functions to get port and interface. 2005-05-16 06:58:43 +00:00
Warner Losh
6b1fe67d59 Print a warning once when trying to bring up interface before firmware load. 2005-05-15 21:02:51 +00:00
Yoshihiro Takahashi
f4acf7e936 Remove old epson note support. 2005-05-15 09:07:42 +00:00
Yoshihiro Takahashi
6959aa373c - Add color tables for 16 colors mode and 8 colors mode, use a different
table on the pc98 console.
- Remove old epson note support.
2005-05-15 09:07:04 +00:00
Yoshihiro Takahashi
8763b97d37 - Mask an underline attribute on the pc98 console. It enables to use the same
color on the pc98 and the others.
- Remove old epson note support.
2005-05-15 08:59:00 +00:00
Yoshihiro Takahashi
b4d6f74dce Remove the ADJUST_CLOCK ioctl on pc98. It's not used at all. 2005-05-15 07:35:49 +00:00
Bill Paul
433d61bb56 Add support for NdisMEthIndicateReceive() and MiniportTransferData().
The Ralink RT2500 driver uses this API instead of NdisMIndicateReceivePacket().

Drivers use NdisMEthIndicateReceive() when they know they support
802.3 media and expect to hand their packets only protocols that want
to deal with that particular media type. With this API, the driver does
not manage its own NDIS_PACKET/NDIS_BUFFER structures. Instead, it
lets bound protocols have a peek at the data, and then they supply
an NDIS_PACKET/NDIS_BUFFER combo to the miniport driver, into which
it copies the packet data.

Drivers use NdisMIndicateReceivePacket() to allow their packets to
be read by any protocol, not just those bound to 802.3 media devices.

To make this work, we need an internal pool of NDIS_PACKETS for
receives. Currently, we check to see if the driver exports a
MiniportTransferData() method in its characteristics structure,
and only allocate the pool for drivers that have this method.

This should allow the RT2500 driver to work correctly, though I
still have to fix ndiscvt(8) to parse its .inf file properly.

Also, change kern_ndis.c:ndis_halt_nic() to reap timers before
acquiring NDIS_LOCK(), since the reaping process might entail sleeping
briefly (and we can't sleep with a lock held).
2005-05-15 04:27:59 +00:00
Yoshihiro Takahashi
914ee8ba4b Fix my copyright. 2005-05-14 10:51:16 +00:00
Yoshihiro Takahashi
dfe1941a9c cosmetic change. 2005-05-14 10:26:31 +00:00
Yoshihiro Takahashi
b22bf66063 - Move bus dependent defines to {isa,cbus}_dmareg.h.
- Use isa/isareg.h rather than <arch>/isa/isa.h.

Tested on: i386, pc98
2005-05-14 10:14:56 +00:00
Yoshihiro Takahashi
24072ca35b - Move timerreg.h to <arch>/include and split i8253 specific defines into
i8253reg.h, and add some defines to control a speaker.
- Move PPI related defines from i386/isa/spkr.c into ppireg.h and use them.
- Move IO_{PPI,TIMER} defines into ppireg.h and timerreg.h respectively.
- Use isa/isareg.h rather than <arch>/isa/isa.h.

Tested on: i386, pc98
2005-05-14 09:10:02 +00:00
Søren Schmidt
265da99ce9 Cleanup comments 2005-05-13 10:25:19 +00:00
Søren Schmidt
bb8a0cf2cf Fix more ATAPI breakage.
Apparently some devices are very picky on details :)
2005-05-13 07:58:05 +00:00
Nate Lawson
a6761eb377 If there is a problem during probe, be sure to free up any resources
allocated for it.  The normal exit case handles this correctly so we
use it as well for errors.

Submitted by:	pjd
Obtained from:	Coverity Prevent
2005-05-12 22:35:08 +00:00
Yoshihiro Takahashi
77bcc9ce35 Move the pc98 keymap define into pckbdtables.h because it should be used
only on the pckbd driver.
2005-05-12 13:39:31 +00:00
Alexander Kabaev
59195c3a3d Plug a potential memory leak.
Noticed by: Coverity Prevent analysis tool.
2005-05-11 18:53:14 +00:00
Søren Schmidt
c46e1f5333 Add new Intel PCI ID's for the ICH7 chips (untested). 2005-05-11 18:29:15 +00:00
Søren Schmidt
d81c813f10 Add support for AHCI compliant ATA devices.
For now just support the Intel ICH6 as that the HW at hand.

Sponsored by:	pair.com
2005-05-11 16:10:08 +00:00
Warner Losh
3ecc7feefc Take out Giant in uhub_child_* in giant. There's one place where we
could sleep which I think can lead to races.  However, there are fewer
with this code than without it.

Submitted by: Hans Petter Selasky
2005-05-11 15:21:22 +00:00
Søren Schmidt
d0968d7845 Add back one line that got deleted in the last commit.
Change the comment there so it better describes whats going on.

This should fix the boot problems of late.
2005-05-11 14:36:26 +00:00
Søren Schmidt
faca873f76 Fix ATAPI DMA. We need to set the proper flags for DMA modes. 2005-05-11 12:41:35 +00:00
Matt Jacob
b49c46747a Fix some incorrectly swapped fields in an ICB.
Access a PCI register with correct width.

Obtained from:	Dmitry Valeryevich Trikoz
2005-05-11 03:00:50 +00:00
Matt Jacob
547725be50 Refactor isp_prt declaration so that platform
requirements can stay in platform files.
2005-05-11 00:22:17 +00:00
Yoshihiro Takahashi
d1725ef7ff Change a directory layout for pc98.
- Move MD files into <arch>/<arch>.
  - Move bus dependent files into <arch>/<bus>.
Rename some files to more suitable names.

Repo-copied by:	peter
Discussed with:	imp
2005-05-10 12:02:18 +00:00
Philip Paeps
18d92cd86c Sync with Linux acpi4asus, adding support for loads of new models.
MFC after:	3 days
2005-05-09 12:51:48 +00:00
Philip Paeps
caac49960b Add support for Asus V6V[1] and W1N notebooks.
Submitted by:	Jean-Sébastien Pédron <jspedron@club-internet.fr> [1]
MFC after:	3 days
2005-05-09 08:43:49 +00:00
Mark Santcroos
8518ed9ecd Simplify the ACPI taskqueue implementation. Use a thread queue type instead
of swi. This allows us to use the taskqueue_thread_* functions instead of
rolling our own. It also avoids a double trip through the queue.

Submitted by:	njl
Reviewed by:	sam
2005-05-09 07:34:04 +00:00
Yoshihiro Takahashi
b416ebde05 Move if_wl_i82586.h into sys/dev/wl. 2005-05-09 04:47:58 +00:00
Bill Paul
239a676456 More fixes for multibus drivers. When calling out to the match
function in if_ndis_pci.c and if_ndis_pccard.c, provide the bustype
too so the stubs can ignore devlists that don't concern them.
2005-05-08 23:19:20 +00:00
Bill Paul
6169e4d097 Fix support for Windows drivers that support both PCI and PCMCIA devices at
the same time.

Fix if_ndis_pccard.c so that it sets sc->ndis_dobj and sc->ndis_regvals.

Correct IMPORT_SFUNC() macros for the READ_PORT_BUFFER_xxx() routines,
which take 3 arguments, not 2.

This fixes it so that the Windows driver for my Cisco Aironet 340 PCMCIA
card works again. (Yes, I know the an(4) driver supports this card natively,
but it's the only PCMCIA device I have with a Windows XP driver.)
2005-05-08 23:07:51 +00:00
Marcel Moolenaar
9f0974f96d In uart_cnprobe(), fill in the cn_name field of the consdev structure.
The core console code checks this field when a console is added and
emits a warning if it's empty. In practice the warning is harmless for
uart(4), because the cn_name is filled in as soon as the device name is
known; which is when the device is enumerated.
To avoid the warning, to avoid possible complications caused by emitting
the warning without there (possibly) being a console selected yet and to
avoid complications when the UART isn't found during bus enumeration, we
just preset the cn_name field here to the name of the driver.
2005-05-08 20:25:09 +00:00
Bill Paul
971aba5809 Avoid trying to queue up an interrupt handler DPC if the driver
hasn't called NdisMRegisterInterrupt() yet.
2005-05-08 09:36:16 +00:00
Christian Brueffer
162bc322c8 Fix typo in a comment. 2005-05-08 08:54:23 +00:00
Bill Paul
a6e6c501af Minor correction to the logic for selecting the proper device index. 2005-05-08 02:06:57 +00:00
Eric Anholt
172c411091 Staticize some symbols that are each only used in one corresponding .c file.
PR:		kern/43610
Submitted by:	Matt Emmerton, matt at gsicomp dot on dot ca
2005-05-06 20:53:34 +00:00
Colin Percival
c340af03a0 Correct improper permissions on /dev/iir. The earlier permissions
of 0644 allowed for people to do Evil Things via ioctl(2).

Security: FreeBSD-SA-05:06.iir
2005-05-06 02:33:46 +00:00
Bill Paul
eb31d50cc7 Avoid sleeping with mutex held in kern_ndis.c.
Remove unused fields from ndis_miniport_block.

Fix a bug in KeFlushQueuedDpcs() (we weren't calculating the kq pointer
correctly).

In if_ndis.c, clear the IFF_RUNNING flag before calling ndis_halt_nic().

Add some guards in kern_ndis.c to avoid letting anyone invoke ndis_get_info()
or ndis_set_info() if the NIC isn't fully initialized. Apparently, mdnsd
will sometimes try to invoke the ndis_ioctl() routine at exactly the
wrong moment (to futz with its multicast filters) when the interface
comes up, and can trigger a crash unless we guard against it.
2005-05-05 06:14:59 +00:00
Bill Paul
9b307fe2be This commit makes a bunch of changes, some big, some not so big.
- Remove the old task threads from kern_ndis.c and reimplement them in
  subr_ntoskrnl.c, in order to more properly emulate the Windows DPC
  API. Each CPU gets its own DPC queue/thread, and each queue can
  have low, medium and high importance DPCs. New APIs implemented:
  KeSetTargetProcessorDpc(), KeSetImportanceDpc() and KeFlushQueuedDpcs().
  (This is the biggest change.)

- Fix a bug in NdisMInitializeTimer(): the k_dpc pointer in the
  nmt_timer embedded in the ndis_miniport_timer struct must be set
  to point to the DPC, also embedded in the struct. Failing to do
  this breaks dequeueing of DPCs submitted via timers, and in turn
  breaks cancelling timers.

- Fix a bug in KeCancelTimer(): if the timer is interted in the timer
  queue (i.e. the timeout callback is still pending), we have to both
  untimeout() the timer _and_ call KeRemoveQueueDpc() to nuke the DPC
  that might be pending. Failing to do this breaks cancellation of
  periodic timers, which always appear to be inserted in the timer queue.

- Make use of the nmt_nexttimer field in ndis_miniport_timer: keep a
  queue of pending timers and cancel them all in ndis_halt_nic(), prior
  to calling MiniportHalt(). Also call KeFlushQueuedDpcs() to make sure
  any DPCs queued by the timers have expired.

- Modify NdisMAllocateSharedMemory() and NdisMFreeSharedMemory() to keep
  track of both the virtual and physical addresses of the shared memory
  buffers that get handed out. The AirGo MIMO driver appears to have a bug
  in it: for one of the segments is allocates, it returns the wrong
  virtual address. This would confuse NdisMFreeSharedMemory() and cause
  a crash. Why it doesn't crash Windows too I have no idea (from reading
  the documentation for NdisMFreeSharedMemory(), it appears to be a violation
  of the API).

- Implement strstr(), strchr() and MmIsAddressValid().

- Implement IoAllocateWorkItem(), IoFreeWorkItem(), IoQueueWorkItem() and
  ExQueueWorkItem(). (This is the second biggest change.)

- Make NdisScheduleWorkItem() call ExQueueWorkItem(). (Note that the
  ExQueueWorkItem() API is deprecated by Microsoft, but NDIS still uses
  it, since NdisScheduleWorkItem() is incompatible with the IoXXXWorkItem()
  API.)

- Change if_ndis.c to use the NdisScheduleWorkItem() interface for scheduling
  tasks.

With all these changes and fixes, the AirGo MIMO driver for the Belkin
F5D8010 Pre-N card now works. Special thanks to Paul Robinson
(paul dawt robinson at pwermedia dawt net) for the loan of a card
for testing.
2005-05-05 03:56:09 +00:00
Doug White
2eb15b9375 Backout part of rev 1.71, which breaks the interfaces on IBM/Intel blade
servers.

PR:		kern/68445
MFC after:	7 days
2005-05-05 03:37:27 +00:00