isp_iid_set/isp_iid for fibre channel- this is because we now
fake a port database entry for ourselves. Add the additional loop
states between LOOP_PDB_RCVD and LOOP_READY.
Change and comment on a wad of Fibre Channel isp_control functions.
Change and comment on some of the ISPASYNC Fibre Channel events.
Add was_fabric_dev/fabric_dev tags to our local FC database structure
(so we can see rapidly whether something was a fabric device but is
now gone).
Add a tag which says what role this adapter should take. It can take
on the value of None, Target, Initiator or Both. None is useful for
warm failover purposes. Remove the ISP_CFG_NOINIT silliness since
a role of "None" does this.
Add a isp_lastmbxcmd tag to store the opcode for the last mailbox
command used.
to report the mailbox command that times out. Fix isp_unswizzle_sns_rsp
which for reasons *I* find obscurer just doesn't work correctly on sparc64
with words past 128. I have no idea why this *does* work on SparcLinux.
and depending on role, make sure link is up, scan the fabric (if we're
connected to a fabric), scan the local loop (if appropriate), merge
the results into the local port database then, check once again
to make sure we have f/w at FW_READY state and the the loopstate
is LOOP_READY.
Remove ISP2100_FABRIC defines- we always handle fabric now. Insert
isp_getmap helper function (for getting Loop Position map). Make
sure we (for our own benefit) mark req_state_flags with RQSF_GOT_SENSE
for Fibre Channel if we got sense data- the !*$)!*$)~*$)*$ Qlogic
f/w doesn't do so. Add ISPCTL_SCAN_FABRIC, ISPCTL_SCAN_LOOP, ISPCTL_SEND_LIP,
and ISPCTL_GET_POSMAP isp_control functions. Correctly send async notifications
upstream for changes in the name server, changes in the port database, and
f/w crashes. Correctly set topology when we get a ASYNC_PTPMODE event.
When resetting the Qlogic 2X00 units, reset the FPM (Fibre Protocol
Module) and FBM (Fibre Buffer Modules). Also remember to clear the
semaphore registers. Tell the RISC processor to not halt on FPM
parity errors.
Finally, use a new tag in the softc to store the opcode for the
last mailbox command used so we can report which opcode timed
out.
Major stuff:
Quite massively redo how we handle Loop events- we've now added several
intermediate states between LOOP_PDB_RCVD and LOOP_READY. This allows us
a lot finer control about how we scan fabric, whether we go further
than scanning fabric, how we look at the local loop, and whether we
merge entries at the level or not. This is the next to last step for
moving managing loop state out of the core module entirely (whereupon
loop && fabric events will simply freeze the command queue and a thread
will run to figure out what's changed and *it* will re-enable the queu).
This fine amount of control also gets us closer to having an external
policy engine decide which fabric devices we really want to log into.
Throw out the ISP_CFG_NOINIT silliness and instead go to the use of
adapter 'roles' to see whether one completes initialization or not
(mostly for Fibre Channel). The ultimate intent, btw, of all of this
is to have a warm standby adapter for failover reasons. Because
we do roles now, setting of Target Capable Class 3 service parameters
in the ICB for the 2x00 cards reflects from role. Also, in isp_start,
if we're not supporting an initiator role, we bounce outgoing commands
with a Selection Timeout error. Also clean out the TOGGLE_TMODE
goop for FC- there is no toggling of target mode like there is
for parallel SCSI cards.
Do more cleanup with respect to using target ids 0..125 in F-port
topologies. Also keep track of things which *were* fabric devices
so that when you rescan the fabric you can notify the outer layers
when fabric devices go away.
Only force a LOGOUT for fabric devices if they're still logged in
(i.e., you cat their Port Database entry. Clean up the Get All Next
scanning.
Original calculation (bits += (ri_stride - ri_emustride) / 2) was
incorrect because stride may be wider than visible width.
Fix in 1.33 (bits += (ri_width - ri_emustride) / 2) was incorrect
because units do not match; "bits" and "ri_emustride" are in bytes,
but "width" is in pels. Works by accident for 8bpp displays.
Change to bits += ((ri_width * bpp / 8) - ri_emustride) / 2
to correctly account for visible width and bpp.
for proper console text handling (especially in-line insertion) on
8-bit displays.
From Christian Groessler <cpg@aladdin.de>.
Tested on 32-bit TGA by me.
- run request sense command without disconnect
- don't restart the script before siop_scsicmd_end has been called if the
cmd didn't complete with good status.
- reserve slot 0 for request sense, to make sure it'll be sent first.
places into the CIS reading code.
The card in question has IO8 only enabled in its CIS info and is apparently
not able to keep up with quick reads. It words fine in a pcmcia slot but
panics(!) the kernel in a TI 1250 cardbus slot. This may be a failure of
the pci cardbus code when initializing this bridge. When finding (and
fixing) that, we should back this change out.
The card I am testing with is not broken, I have multiple versions of it
(AVM Fritz! pcmcia ISDN card), all work fine on windows and all cause
us to panic because of bogus CIS info read.
XXX - panicing because of bogus CIS data is probably another error.
errno otherwise). Actually use that return value to avoid installing an
interrupt handler (possibly sharing an interrupt with other cards!) and
initialising the softc with bogus/half baked values.
configuration (assignment of bus numbers, BARs, timer values,
interrupt lines, etc.).
The interface must be called from m.d. code prior to probing the bus.
It is meant to be called once for each primary (bus == 0) PCI bus in
the system. It will configure any busses behind PCI-PCI bridges.
Section 9 man page for pci_configure_bus() will come soon.
In the meantime, sample usage is in arch/sandpoint/sandpoint/mainbus.c.
[ Reviewed by thorpej ]
- Make sure to pass iface properly to usbd_set_interface().
- Call usbd_set_interface before calling usbd_get_interface_descriptor().
It seems no one have tested this device. Anyway, my In-System ISD110
USB-IDE adapter does not work in this way..
higher symmetry between cs4280.c and cs4281.c.
Also fix the problem rebooting from Windows. Relevant patch is contributed
from Shingo WATANABE <nabe@nabechan.org>.
established.
XXX real fix: make enable/disable for real and invoke them when needed.
XXX This has to wait until the layer 1 <-> layer 2 interface is
XXX restructured.
transmit jobs. The previous logic occasionally, under heavy
load, would attempt to sync and unload DMA maps that weren't
currently in use, and also occasionally leaked mbufs under
heavy load.
Yay, NFS now works pretty well on my Dreamcast.
it causes assertions to fail in the PCI bounce buffer code. On
other platforms, it causes the address of the next packet to
be mis-calculated, leading to packet loss.
- I tested only ROLAND UM-1 and YAMAHA UX256.
These are not conforming to USB-MIDI spec, however these are
similar to USB-MIDI.
- Since I've not yet seen the "genuine" USB-MIDI device,
I cannot test such devices although I wrote the codes for it.
TODO:
- clean up the codes.
- umidi(4) manpage.
- /dev/rmidi? is working well, but /dev/music seems not working correctly.
- protect the buffer even though ointr occur until exiting
from hw_if->output().
- allow this function to send multiple bytes to hw_if->output()
at the same time. it's necessary for umidi.
This change makes PCMCIA cards work again on my machine.
Unfortunately, some of the DELAY_MS() are called when the current
process is not the cardbus thread, that is, on interrupt contexts.
I confirmed these are actually used in interrupt context and replaced
them with delay()s. However, I haven't confirmed other DELAY_MS()s
are always on the cardbus thread.
This shall be a temporary fix. The driver needs being rewritten
not to use such delay()s, of course.
if we are requested range of multicast address or too many multicast address,
program multicast filter to receive all multicast address. And set/clear
IFF_ALLMULTI flag properly.
when doing a reconstruct or a copyback. If we don't, junk might be
there, and that could cause the component to be not correctly
autoconfigured on reboot. Thanks to Simon Burge for helping track this down.
This is not unprecedented, as we do it in >100 places in the tree.
If you disagree with this philosophy, take it to tech-kern for a discussion
FIRST before reverting; TNF, not one particular person, owns this file.
This adds support for EtherExpress/16 cards with 16k of RAM, and in the
process adds general support for PIO mode on these cards. This entails
changing the way the i82586 driver handles bus barriers, since it doesn't
allow for strange cases like this.
This has been tested on the i386 port with the 'ix' driver in both
16KB (which was the source of the problem) and 32KB modes, as well
as with the 'ef' driver. I've tested it (briefly) with 'ei' on arm26
as well. In theory, drivers other than 'ix' should follow precisely the
same code paths as before.
Because zeroing them causes zero division panic with devices which don't
support 8kHz mulaw, and the effect of this line was to force calling
audio_calcwater even when unnecessary.
The only thing stopping us from getting totally rid of the evil
USBD_NO_TSLEEP hack is the (broken) assumption in the MII driver that
registers can be read and written without a process context.
USB device discovery, now it can also perform (short) tasks for device
drivers that need a process context, but don't have one.
This is not pretty, but better than using busy-wait in an interrupt context.
* Get rid of `#ifdef FreeBSD'; they seem to maintain their own version.
* Change watchdog code (from FreeBSD).
* Get rid of the horrible USBD_NO_TSLEEP hack.
* Repair some const damage.
o Add NAKAGAWA METAL's LNT-10TN card.
o Add KINGSTON KNE-PC2 ethernet card.
o Add RATOC REX_R280 card.
o Add $FreeBSD$ id.
I've not added these cards the their respective drivers, however.
- video base register value brings different scanline starting address
of framebuffer depending on VRAM chip column size.
many other issues left unsolved.
- text rendered in incorrect colours.
- acceleration codes should be reimplemented from scratch.
the link level name for the interface (ifp->if_sadl) is allocated
before ifp->if_addrlen is initialized, which could lead to allocating
too little space for the link level address.
Do this by splitting allocation of the link level name out of
if_attach() and into if_alloc_sadl(), which is normally called
by functions like ether_ifattach(). Network interfaces which
don't have a link-specific attach routine must call if_alloc_sadl()
themselves (example: gif).
Link level names are freed by if_free_sadl(), which can be called
from e.g. ether_ifdetach(). Drivers never need call if_free_sadl()
themselves as if_detach() will do it if it is not already done.
While here, add the ability to pass an AF_LINK address to
SIOCSIFADDR in ether_ioctl() (this is what caused me to notice
the problem that the above fixes).
than the preivous code. It can show readable characters on screen.
Tested only with 32bpp model of PMAGD opion card. Need more work for 8bpp.
- 2D accelleration will be revamped to ultilize SFBplus features.
- there seems much mulfunctionness in 32bpp codes of /sys/dev/rasops/.
Need to rectify every corners.
and place the definition in <machine/types.h>. This can now be used
as a flag to indicate whether or not <machine/intr.h> can be included
to get the generic soft interrupt API.
Paul Kranenburg, many thanks !): the control register I/O is 4 byte long
although only one is used, but the control register is at offset 2, and not
0 as expected by IC code. Use bus_space_subregion() to get a handle which
points to the control register, and is one byte long.
cause interrupts). This works around a problem on sparc64, where
interrupts without installed handler seem to cause heavy lossage (and
interrupts are already enabled at this stage of autoconfiguration).
Furthermore, it uses Avisions scanner-over-SCSI protocol (but that's
not visible in the driver).
Thanks to Lloyd Parkes for testing and debugging and to Jukka Marin for
testing.
XXX This driver should be extended to handle Microtek scanners as well.
XXX I think we should have if_ne_pcmcia.c try to allocate I/O addresses
around 0x300 or we'll end up with a lot of quirks for NE2k based
cards which have bad CIS's.