pci_dev_funcorder() that have the following signatures:
int pci_bus_devorder(pci_chipset_tag_t pc, int bus, char list[32]);
int pci_dev_funcorder(pci_chipset_tag_t pc, int bus, int device, char list[8]);
they control the order of PCI bus probe at the device and function level,
by filling in a value from 0 to 31 for pci_bus_devorder() or 0 to 7 for
pci_dev_funcorder, with a value of -1 to signify no more entries.
when device properties arrive, these will be replaced with some facility
based on properties (design/implementation unknown currently.)
to last time.
It turns out that in fact, sparc64 was *not* working. There is a discussion
within the tech-kern@netbsd.org mail list as of just prior to this date
that contains the details.
Suffice to say that for sparc64 we have to add back in the usage
of BUS_DMA_COHERENT again to the call to bus_dmamap_load_raw. PK
added the usage of bus_dmamap_load_raw- which agrees with the
man page description of it- but now does not match what the
original BusDma author seems to think it's supposed to do.
While we're at it, do a specific set of steps for setting up and,
if necessary, tearing down, mailbox dma mappings.
right thing, don't use the illegal and "just worked by chance" addition
of BUS_DMA_COHERENT to bus_dmamap_load_raw. There still is a necessity
to add to the architecture to allow one to hint that this should be
a cache coherent mapping.
Fix offset argument to be zero for flushing data tranfers. Kudos to Izumi
for spotting this.
use interrupting mailbox commands for isp_init. Set default HBA role.
Rename request/response dma maps to be more consistent with PCI version.
Enable bus_dmamap_sync on request queue- we already do this for response
queue- better do it for the request queue as well.
Checked to be working against a Sparc10.
for the ICB firmware options meant- *I* had taken it to
mean that if you set it, Node Name would be ignored and
derived from Port Name. Actually, it meant the opposite.
As a consequence- change ICBOPT_USE_PORTNAME to the
define ICBOPT_BOTH_WWNS- makes more sense.
remove all (legacy) "i4b_" prefixes outside of sys/netisdn.
Prefix all card specific driver support files with the basename
of the driver bus attachement file.
Renamed here:
i4b_isic_isa.c -> isic_isa.c
i4b_avm_a1.c -> isic_isa_avm_a1.c
i4b_daic_isa.c -> daic_isa.c
i4b_itk_ix1.c -> isic_isa_itk_ix1.c
i4b_tel_s08.c -> isic_isa_tel_s08.c
i4b_tel_s016.c -> isic_isa_tel_s016.c
i4b_tel_s0163.c -> isic_isa_tel_s0163.c
i4b_usr_sti.c -> isic_isa_usr_sti.c
remove all (legacy) "i4b_" prefixes outside of sys/netisdn.
Prefix all card specific driver support files with the basename
of the driver bus attachement file.
Renamed here:
i4b_isic_pcmcia.c -> isic_pcmcia.c
i4b_isic_pcmcia.h -> isic_pcmcia.h
i4b_avm_fritz_pcmcia.c -> isic_pcmcia_avm_fritz.c
i4b_elsa_isdnmc.c -> isic_pcmcia_elsa_isdnmc.c
i4b_elsa_mcall.c -> isic_pcmcia_elsa_mcall.c
i4b_sbspeedstar2.c -> isic_pcmcia_sbspeedstar2.c
remove all (legacy) "i4b_" prefixes outside of sys/netisdn.
Prefix all card specific driver support files with the basename
of the driver bus attachement file.
Renamed here:
pci_isic.h -> isic_pci.h
pci_isic.c -> isic_pci.c
i4b_avm_fritz_pci.c -> isic_pci_avm_fritz_pci.c
i4b_elsa_qs1p.c -> isic_pci_elsa_qs1p.c
remove all (legacy) "i4b_" prefixes outside of sys/netisdn.
Prefix all card specific driver support files with the basename
of the driver bus attachement file.
Renamed here:
isapnp_isic.c -> isic_isapnp.c
i4b_ctx_s0P.c -> isic_isapnp_ctx_s0P.c
i4b_drn_ngo.c -> isic_isapnp_drn_ngo.c
i4b_dynalink.c -> isic_isapnp_dynalink.c
i4b_elsa_qs1i.c -> isic_isapnp_elsa_qs1i.c
i4b_siemens_isurf.c -> isic_isapnp_siemens_isurf.c
i4b_sws.c -> isic_isapnp_sws.c
i4b_tel_s0P.c -> isic_isapnp_tel_s0P.c
Don't allocate one large io range, this fails about every time on real
pcmcia buses (not attached to pci/cardbus bridges) because of other
devices interfering in that range. Use the bogusly small region for
now, which works purely by chance (map granularity) on cardbus bridges
too (more or less).
XXX - make this map three different, small regions after layer1 <-> layer2
XXX interface has been brought in shape.
OFW_PCI_PHYS_HI_DEVICE() - extract PCI device from phys_hi
OFW_PCI_PHYS_HI_FUNCTION() - extract PCI function from phys_hi
and the definition of `struct ofw_pci_register'.
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.