unifdef old interface support out to prevent false positives.
Suggested by: jeffr, obrien, and others
This commit is contained in:
parent
31c81e4bed
commit
f7744c2d67
@ -65,26 +65,12 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
|
||||
/*
|
||||
* Only use the BUS stuff for PCI under FreeBSD 4 and later versions.
|
||||
* Note that the old BUS stuff also works for FreeBSD 4 and spares
|
||||
* about 1 KB for the driver object file.
|
||||
*/
|
||||
#if __FreeBSD_version >= 400000
|
||||
#define FreeBSD_Bus_Dma_Abstraction
|
||||
#define FreeBSD_Bus_Io_Abstraction
|
||||
#define FreeBSD_Bus_Space_Abstraction
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Driver configuration options.
|
||||
*/
|
||||
#include "opt_sym.h"
|
||||
#include <dev/sym/sym_conf.h>
|
||||
|
||||
#ifndef FreeBSD_Bus_Io_Abstraction
|
||||
#include "ncr.h" /* To know if the ncr has been configured */
|
||||
#endif
|
||||
|
||||
#include <sys/systm.h>
|
||||
#include <sys/malloc.h>
|
||||
@ -92,17 +78,14 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/lock.h>
|
||||
#include <sys/mutex.h>
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
#include <sys/module.h>
|
||||
#include <sys/bus.h>
|
||||
#endif
|
||||
|
||||
#include <sys/proc.h>
|
||||
|
||||
#include <dev/pci/pcireg.h>
|
||||
#include <dev/pci/pcivar.h>
|
||||
|
||||
#ifdef FreeBSD_Bus_Space_Abstraction
|
||||
#include <machine/bus_memio.h>
|
||||
/*
|
||||
* Only include bus_pio if needed.
|
||||
@ -112,13 +95,10 @@ __FBSDID("$FreeBSD$");
|
||||
#ifdef SYM_CONF_IOMAPPED
|
||||
#include <machine/bus_pio.h>
|
||||
#endif
|
||||
#endif
|
||||
#include <machine/bus.h>
|
||||
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
#include <machine/resource.h>
|
||||
#include <sys/rman.h>
|
||||
#endif
|
||||
|
||||
#include <cam/cam.h>
|
||||
#include <cam/cam_ccb.h>
|
||||
@ -469,7 +449,6 @@ typedef struct m_link { /* Link between free memory chunks */
|
||||
struct m_link *next;
|
||||
} m_link_s;
|
||||
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
typedef struct m_vtob { /* Virtual to Bus address translation */
|
||||
struct m_vtob *next;
|
||||
bus_dmamap_t dmamap; /* Map for this chunk */
|
||||
@ -482,10 +461,8 @@ typedef struct m_vtob { /* Virtual to Bus address translation */
|
||||
#define VTOB_HASH_MASK (VTOB_HASH_SIZE-1)
|
||||
#define VTOB_HASH_CODE(m) \
|
||||
((((m_addr_t) (m)) >> MEMO_CLUSTER_SHIFT) & VTOB_HASH_MASK)
|
||||
#endif
|
||||
|
||||
typedef struct m_pool { /* Memory pool of a given kind */
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
bus_dma_tag_t dev_dmat; /* Identifies the pool */
|
||||
bus_dma_tag_t dmat; /* Tag for our fixed allocations */
|
||||
m_addr_t (*getp)(struct m_pool *);
|
||||
@ -497,10 +474,6 @@ typedef struct m_pool { /* Memory pool of a given kind */
|
||||
int nump;
|
||||
m_vtob_s *(vtob[VTOB_HASH_SIZE]);
|
||||
struct m_pool *next;
|
||||
#else
|
||||
#define M_GETP() get_pages()
|
||||
#define M_FREEP(p) free_pages(p)
|
||||
#endif /* FreeBSD_Bus_Dma_Abstraction */
|
||||
struct m_link h[MEMO_CLUSTER_SHIFT - MEMO_SHIFT + 1];
|
||||
} m_pool_s;
|
||||
|
||||
@ -624,14 +597,6 @@ static void __sym_mfree(m_pool_s *mp, void *ptr, int size, char *name)
|
||||
/*
|
||||
* Default memory pool we donnot need to involve in DMA.
|
||||
*/
|
||||
#ifndef FreeBSD_Bus_Dma_Abstraction
|
||||
/*
|
||||
* Without the `bus dma abstraction', all the memory is assumed
|
||||
* DMAable and a single pool is all what we need.
|
||||
*/
|
||||
static m_pool_s mp0;
|
||||
|
||||
#else
|
||||
/*
|
||||
* With the `bus dma abstraction', we use a separate pool for
|
||||
* memory we donnot need to involve in DMA.
|
||||
@ -658,7 +623,6 @@ static m_pool_s mp0 = {0, 0, ___mp0_getp, ___mp0_freep};
|
||||
static m_pool_s mp0 = {0, 0, ___mp0_getp};
|
||||
#endif
|
||||
|
||||
#endif /* FreeBSD_Bus_Dma_Abstraction */
|
||||
|
||||
/*
|
||||
* Actual memory allocation routine for non-DMAed memory.
|
||||
@ -685,20 +649,6 @@ static void sym_mfree(void *ptr, int size, char *name)
|
||||
/*
|
||||
* DMAable pools.
|
||||
*/
|
||||
#ifndef FreeBSD_Bus_Dma_Abstraction
|
||||
/*
|
||||
* Without `bus dma abstraction', all the memory is DMAable, and
|
||||
* only a single pool is needed (vtophys() is our friend).
|
||||
*/
|
||||
#define __sym_calloc_dma(b, s, n) sym_calloc(s, n)
|
||||
#define __sym_mfree_dma(b, p, s, n) sym_mfree(p, s, n)
|
||||
#ifdef __alpha__
|
||||
#define __vtobus(b, p) alpha_XXX_dmamap((vm_offset_t)(p))
|
||||
#else /*__i386__, __sparc64__*/
|
||||
#define __vtobus(b, p) vtophys(p)
|
||||
#endif
|
||||
|
||||
#else
|
||||
/*
|
||||
* With `bus dma abstraction', we use a separate pool per parent
|
||||
* BUS handle. A reverse table (hashed) is maintained for virtual
|
||||
@ -873,7 +823,6 @@ static m_addr_t __vtobus(bus_dma_tag_t dev_dmat, void *m)
|
||||
return vp ? vp->baddr + (((m_addr_t) m) - a) : 0;
|
||||
}
|
||||
|
||||
#endif /* FreeBSD_Bus_Dma_Abstraction */
|
||||
|
||||
/*
|
||||
* Verbs for DMAable memory handling.
|
||||
@ -987,7 +936,6 @@ struct sym_nvram {
|
||||
* later kernel versions.
|
||||
*/
|
||||
|
||||
#ifdef FreeBSD_Bus_Space_Abstraction
|
||||
|
||||
#if defined(SYM_CONF_IOMAPPED)
|
||||
|
||||
@ -1014,79 +962,6 @@ struct sym_nvram {
|
||||
#define OUTRAM_OFF(o, a, l) \
|
||||
bus_space_write_region_1(np->ram_tag, np->ram_bsh, o, (a), (l))
|
||||
|
||||
#else /* not defined FreeBSD_Bus_Space_Abstraction */
|
||||
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
#error "BIG ENDIAN support requires bus space kernel interface"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Access to the chip IO registers and on-chip RAM.
|
||||
* We use legacy MMIO and IO interface for FreeBSD 3.X versions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Define some understable verbs for IO and MMIO.
|
||||
*/
|
||||
#define io_read8(p) scr_to_cpu(inb((p)))
|
||||
#define io_read16(p) scr_to_cpu(inw((p)))
|
||||
#define io_read32(p) scr_to_cpu(inl((p)))
|
||||
#define io_write8(p, v) outb((p), cpu_to_scr(v))
|
||||
#define io_write16(p, v) outw((p), cpu_to_scr(v))
|
||||
#define io_write32(p, v) outl((p), cpu_to_scr(v))
|
||||
|
||||
#ifdef __alpha__
|
||||
|
||||
#define mmio_read8(a) readb(a)
|
||||
#define mmio_read16(a) readw(a)
|
||||
#define mmio_read32(a) readl(a)
|
||||
#define mmio_write8(a, b) writeb(a, b)
|
||||
#define mmio_write16(a, b) writew(a, b)
|
||||
#define mmio_write32(a, b) writel(a, b)
|
||||
#define memcpy_to_pci(d, s, n) memcpy_toio((u32)(d), (void *)(s), (n))
|
||||
|
||||
#else /*__i386__, __sparc64__*/
|
||||
|
||||
#define mmio_read8(a) scr_to_cpu((*(volatile unsigned char *) (a)))
|
||||
#define mmio_read16(a) scr_to_cpu((*(volatile unsigned short *) (a)))
|
||||
#define mmio_read32(a) scr_to_cpu((*(volatile unsigned int *) (a)))
|
||||
#define mmio_write8(a, b) (*(volatile unsigned char *) (a)) = cpu_to_scr(b)
|
||||
#define mmio_write16(a, b) (*(volatile unsigned short *) (a)) = cpu_to_scr(b)
|
||||
#define mmio_write32(a, b) (*(volatile unsigned int *) (a)) = cpu_to_scr(b)
|
||||
#define memcpy_to_pci(d, s, n) bcopy((s), (void *)(d), (n))
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Normal IO
|
||||
*/
|
||||
#if defined(SYM_CONF_IOMAPPED)
|
||||
|
||||
#define INB_OFF(o) io_read8(np->io_port + sym_offb(o))
|
||||
#define OUTB_OFF(o, v) io_write8(np->io_port + sym_offb(o), (v))
|
||||
|
||||
#define INW_OFF(o) io_read16(np->io_port + sym_offw(o))
|
||||
#define OUTW_OFF(o, v) io_write16(np->io_port + sym_offw(o), (v))
|
||||
|
||||
#define INL_OFF(o) io_read32(np->io_port + (o))
|
||||
#define OUTL_OFF(o, v) io_write32(np->io_port + (o), (v))
|
||||
|
||||
#else /* Memory mapped IO */
|
||||
|
||||
#define INB_OFF(o) mmio_read8(np->mmio_va + sym_offb(o))
|
||||
#define OUTB_OFF(o, v) mmio_write8(np->mmio_va + sym_offb(o), (v))
|
||||
|
||||
#define INW_OFF(o) mmio_read16(np->mmio_va + sym_offw(o))
|
||||
#define OUTW_OFF(o, v) mmio_write16(np->mmio_va + sym_offw(o), (v))
|
||||
|
||||
#define INL_OFF(o) mmio_read32(np->mmio_va + (o))
|
||||
#define OUTL_OFF(o, v) mmio_write32(np->mmio_va + (o), (v))
|
||||
|
||||
#endif
|
||||
|
||||
#define OUTRAM_OFF(o, a, l) memcpy_to_pci(np->ram_va + (o), (a), (l))
|
||||
|
||||
#endif /* FreeBSD_Bus_Space_Abstraction */
|
||||
|
||||
/*
|
||||
* Common definitions for both bus space and legacy IO methods.
|
||||
@ -1623,14 +1498,12 @@ struct sym_ccb {
|
||||
/*
|
||||
* Map for the DMA of user data.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
void *arg; /* Argument for some callback */
|
||||
bus_dmamap_t dmamap; /* DMA map for user data */
|
||||
u_char dmamapped;
|
||||
#define SYM_DMA_NONE 0
|
||||
#define SYM_DMA_READ 1
|
||||
#define SYM_DMA_WRITE 2
|
||||
#endif
|
||||
/*
|
||||
* Other fields.
|
||||
*/
|
||||
@ -1694,11 +1567,7 @@ struct sym_hcb {
|
||||
/*
|
||||
* Chip and controller indentification.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
device_t device;
|
||||
#else
|
||||
pcici_t pci_tag;
|
||||
#endif
|
||||
int unit;
|
||||
char inst_name[8];
|
||||
|
||||
@ -1740,14 +1609,12 @@ struct sym_hcb {
|
||||
/*
|
||||
* Allocated hardware resources.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
struct resource *irq_res;
|
||||
struct resource *io_res;
|
||||
struct resource *mmio_res;
|
||||
struct resource *ram_res;
|
||||
int ram_id;
|
||||
void *intr;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Bus stuff.
|
||||
@ -1760,22 +1627,18 @@ struct sym_hcb {
|
||||
* deals with part of the BUS stuff complexity only to fit O/S
|
||||
* requirements.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
bus_space_handle_t io_bsh;
|
||||
bus_space_tag_t io_tag;
|
||||
bus_space_handle_t mmio_bsh;
|
||||
bus_space_tag_t mmio_tag;
|
||||
bus_space_handle_t ram_bsh;
|
||||
bus_space_tag_t ram_tag;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* DMA stuff.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
bus_dma_tag_t bus_dmat; /* DMA tag from parent BUS */
|
||||
bus_dma_tag_t data_dmat; /* DMA tag for user data */
|
||||
#endif
|
||||
/*
|
||||
* Virtual and physical bus addresses of the chip.
|
||||
*/
|
||||
@ -2471,17 +2334,8 @@ static void sym_action1 (struct cam_sim *sim, union ccb *ccb);
|
||||
static int sym_setup_cdb (hcb_p np, struct ccb_scsiio *csio, ccb_p cp);
|
||||
static void sym_setup_data_and_start (hcb_p np, struct ccb_scsiio *csio,
|
||||
ccb_p cp);
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
static int sym_fast_scatter_sg_physical(hcb_p np, ccb_p cp,
|
||||
bus_dma_segment_t *psegs, int nsegs);
|
||||
#else
|
||||
static int sym_scatter_virtual (hcb_p np, ccb_p cp, vm_offset_t vaddr,
|
||||
vm_size_t len);
|
||||
static int sym_scatter_sg_virtual (hcb_p np, ccb_p cp,
|
||||
bus_dma_segment_t *psegs, int nsegs);
|
||||
static int sym_scatter_physical (hcb_p np, ccb_p cp, vm_offset_t paddr,
|
||||
vm_size_t len);
|
||||
#endif
|
||||
static int sym_scatter_sg_physical (hcb_p np, ccb_p cp,
|
||||
bus_dma_segment_t *psegs, int nsegs);
|
||||
static void sym_action2 (struct cam_sim *sim, union ccb *ccb);
|
||||
@ -2490,16 +2344,9 @@ static void sym_update_trans (hcb_p np, tcb_p tp, struct sym_trans *tip,
|
||||
static void sym_update_dflags(hcb_p np, u_char *flags,
|
||||
struct ccb_trans_settings *cts);
|
||||
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
static struct sym_pci_chip *sym_find_pci_chip (device_t dev);
|
||||
static int sym_pci_probe (device_t dev);
|
||||
static int sym_pci_attach (device_t dev);
|
||||
#else
|
||||
static struct sym_pci_chip *sym_find_pci_chip (pcici_t tag);
|
||||
static const char *sym_pci_probe (pcici_t tag, pcidi_t type);
|
||||
static void sym_pci_attach (pcici_t tag, int unit);
|
||||
static int sym_pci_attach2 (pcici_t tag, int unit);
|
||||
#endif
|
||||
|
||||
static void sym_pci_free (hcb_p np);
|
||||
static int sym_cam_attach (hcb_p np);
|
||||
@ -3988,17 +3835,9 @@ static void sym_log_hard_error(hcb_p np, u_short sist, u_char dstat)
|
||||
*/
|
||||
if (dstat & (MDPE|BF)) {
|
||||
u_short pci_sts;
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
pci_sts = pci_read_config(np->device, PCIR_STATUS, 2);
|
||||
#else
|
||||
pci_sts = pci_cfgread(np->pci_tag, PCIR_STATUS, 2);
|
||||
#endif
|
||||
if (pci_sts & 0xf900) {
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
pci_write_config(np->device, PCIR_STATUS, pci_sts, 2);
|
||||
#else
|
||||
pci_cfgwrite(np->pci_tag, PCIR_STATUS, pci_sts, 2);
|
||||
#endif
|
||||
printf("%s: PCI STATUS = 0x%04x\n",
|
||||
sym_name(np), pci_sts & 0xf900);
|
||||
}
|
||||
@ -6713,7 +6552,6 @@ static void sym_free_ccb (hcb_p np, ccb_p cp)
|
||||
np->last_cp = 0;
|
||||
#endif
|
||||
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
/*
|
||||
* Unmap user data from DMA map if needed.
|
||||
*/
|
||||
@ -6721,7 +6559,6 @@ static void sym_free_ccb (hcb_p np, ccb_p cp)
|
||||
bus_dmamap_unload(np->data_dmat, cp->dmamap);
|
||||
cp->dmamapped = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Make this CCB available.
|
||||
@ -6764,10 +6601,8 @@ static ccb_p sym_alloc_ccb(hcb_p np)
|
||||
/*
|
||||
* Allocate a map for the DMA of user data.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
if (bus_dmamap_create(np->data_dmat, 0, &cp->dmamap))
|
||||
goto out_free;
|
||||
#endif
|
||||
/*
|
||||
* Count it.
|
||||
*/
|
||||
@ -7494,7 +7329,6 @@ static void sym_complete_error (hcb_p np, ccb_p cp)
|
||||
*/
|
||||
OUTL_DSP (SCRIPTA_BA (np, start));
|
||||
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
/*
|
||||
* Synchronize DMA map if needed.
|
||||
*/
|
||||
@ -7503,7 +7337,6 @@ static void sym_complete_error (hcb_p np, ccb_p cp)
|
||||
(cp->dmamapped == SYM_DMA_READ ?
|
||||
BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE));
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Add this one to the COMP queue.
|
||||
* Complete all those commands with either error
|
||||
@ -7566,7 +7399,6 @@ static void sym_complete_ok (hcb_p np, ccb_p cp)
|
||||
if (!SYM_CONF_RESIDUAL_SUPPORT)
|
||||
csio->resid = 0;
|
||||
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
/*
|
||||
* Synchronize DMA map if needed.
|
||||
*/
|
||||
@ -7575,7 +7407,6 @@ static void sym_complete_ok (hcb_p np, ccb_p cp)
|
||||
(cp->dmamapped == SYM_DMA_READ ?
|
||||
BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE));
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Set status and complete the command.
|
||||
*/
|
||||
@ -7992,7 +7823,6 @@ sym_setup_data_pointers(hcb_p np, ccb_p cp, int dir)
|
||||
}
|
||||
|
||||
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
/*
|
||||
* Call back routine for the DMA map service.
|
||||
* If bounce buffers are used (why ?), we may sleep and then
|
||||
@ -8211,165 +8041,6 @@ sym_fast_scatter_sg_physical(hcb_p np, ccb_p cp,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* FreeBSD_Bus_Dma_Abstraction */
|
||||
|
||||
/*
|
||||
* How complex it gets to deal with the data in CAM.
|
||||
* Variant without the Bus Dma Abstraction option.
|
||||
*/
|
||||
static void
|
||||
sym_setup_data_and_start(hcb_p np, struct ccb_scsiio *csio, ccb_p cp)
|
||||
{
|
||||
struct ccb_hdr *ccb_h;
|
||||
int dir, retv;
|
||||
|
||||
ccb_h = &csio->ccb_h;
|
||||
|
||||
/*
|
||||
* Now deal with the data.
|
||||
*/
|
||||
cp->data_len = 0;
|
||||
cp->segments = 0;
|
||||
|
||||
/*
|
||||
* No direction means no data.
|
||||
*/
|
||||
dir = (ccb_h->flags & CAM_DIR_MASK);
|
||||
if (dir == CAM_DIR_NONE)
|
||||
goto end_scatter;
|
||||
|
||||
if (!(ccb_h->flags & CAM_SCATTER_VALID)) {
|
||||
/* Single buffer */
|
||||
if (!(ccb_h->flags & CAM_DATA_PHYS)) {
|
||||
/* Buffer is virtual */
|
||||
retv = sym_scatter_virtual(np, cp,
|
||||
(vm_offset_t) csio->data_ptr,
|
||||
(vm_size_t) csio->dxfer_len);
|
||||
} else {
|
||||
/* Buffer is physical */
|
||||
retv = sym_scatter_physical(np, cp,
|
||||
(vm_offset_t) csio->data_ptr,
|
||||
(vm_size_t) csio->dxfer_len);
|
||||
}
|
||||
} else {
|
||||
/* Scatter/gather list */
|
||||
int nsegs;
|
||||
struct bus_dma_segment *segs;
|
||||
segs = (struct bus_dma_segment *)csio->data_ptr;
|
||||
nsegs = csio->sglist_cnt;
|
||||
|
||||
if ((ccb_h->flags & CAM_SG_LIST_PHYS) != 0) {
|
||||
/* The SG list pointer is physical */
|
||||
sym_set_cam_status(cp->cam_ccb, CAM_REQ_INVALID);
|
||||
goto out_abort;
|
||||
}
|
||||
if (!(ccb_h->flags & CAM_DATA_PHYS)) {
|
||||
/* SG buffer pointers are virtual */
|
||||
retv = sym_scatter_sg_virtual(np, cp, segs, nsegs);
|
||||
} else {
|
||||
/* SG buffer pointers are physical */
|
||||
retv = sym_scatter_sg_physical(np, cp, segs, nsegs);
|
||||
}
|
||||
}
|
||||
if (retv < 0) {
|
||||
sym_set_cam_status(cp->cam_ccb, CAM_REQ_TOO_BIG);
|
||||
goto out_abort;
|
||||
}
|
||||
|
||||
end_scatter:
|
||||
/*
|
||||
* Set data pointers.
|
||||
*/
|
||||
sym_setup_data_pointers(np, cp, dir);
|
||||
|
||||
/*
|
||||
* Enqueue this IO in our pending queue.
|
||||
*/
|
||||
sym_enqueue_cam_ccb(np, (union ccb *) csio);
|
||||
|
||||
/*
|
||||
* Activate this job.
|
||||
*/
|
||||
sym_put_start_queue(np, cp);
|
||||
|
||||
/*
|
||||
* Command is successfully queued.
|
||||
*/
|
||||
return;
|
||||
out_abort:
|
||||
sym_free_ccb(np, cp);
|
||||
sym_xpt_done(np, (union ccb *) csio);
|
||||
}
|
||||
|
||||
/*
|
||||
* Scatter a virtual buffer into bus addressable chunks.
|
||||
*/
|
||||
static int
|
||||
sym_scatter_virtual(hcb_p np, ccb_p cp, vm_offset_t vaddr, vm_size_t len)
|
||||
{
|
||||
u_long pe, pn;
|
||||
u_long n, k;
|
||||
int s;
|
||||
|
||||
cp->data_len += len;
|
||||
|
||||
pe = vaddr + len;
|
||||
n = len;
|
||||
s = SYM_CONF_MAX_SG - 1 - cp->segments;
|
||||
|
||||
while (n && s >= 0) {
|
||||
pn = (pe - 1) & ~PAGE_MASK;
|
||||
k = pe - pn;
|
||||
if (k > n) {
|
||||
k = n;
|
||||
pn = pe - n;
|
||||
}
|
||||
if (DEBUG_FLAGS & DEBUG_SCATTER) {
|
||||
printf ("%s scatter: va=%lx pa=%lx siz=%ld\n",
|
||||
sym_name(np), pn, (u_long) vtobus(pn), k);
|
||||
}
|
||||
cp->phys.data[s].addr = cpu_to_scr(vtobus(pn));
|
||||
cp->phys.data[s].size = cpu_to_scr(k);
|
||||
pe = pn;
|
||||
n -= k;
|
||||
--s;
|
||||
}
|
||||
cp->segments = SYM_CONF_MAX_SG - 1 - s;
|
||||
|
||||
return n ? -1 : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scatter a SG list with virtual addresses into bus addressable chunks.
|
||||
*/
|
||||
static int
|
||||
sym_scatter_sg_virtual(hcb_p np, ccb_p cp, bus_dma_segment_t *psegs, int nsegs)
|
||||
{
|
||||
int i, retv = 0;
|
||||
|
||||
for (i = nsegs - 1 ; i >= 0 ; --i) {
|
||||
retv = sym_scatter_virtual(np, cp,
|
||||
psegs[i].ds_addr, psegs[i].ds_len);
|
||||
if (retv < 0)
|
||||
break;
|
||||
}
|
||||
return retv;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scatter a physical buffer into bus addressable chunks.
|
||||
*/
|
||||
static int
|
||||
sym_scatter_physical(hcb_p np, ccb_p cp, vm_offset_t paddr, vm_size_t len)
|
||||
{
|
||||
struct bus_dma_segment seg;
|
||||
|
||||
seg.ds_addr = paddr;
|
||||
seg.ds_len = len;
|
||||
return sym_scatter_sg_physical(np, cp, &seg, 1);
|
||||
}
|
||||
|
||||
#endif /* FreeBSD_Bus_Dma_Abstraction */
|
||||
|
||||
/*
|
||||
* Scatter a SG list with physical addresses into bus addressable chunks.
|
||||
@ -8384,11 +8055,7 @@ sym_scatter_sg_physical(hcb_p np, ccb_p cp, bus_dma_segment_t *psegs, int nsegs)
|
||||
u_long k;
|
||||
int s, t;
|
||||
|
||||
#ifndef FreeBSD_Bus_Dma_Abstraction
|
||||
s = SYM_CONF_MAX_SG - 1 - cp->segments;
|
||||
#else
|
||||
s = SYM_CONF_MAX_SG - 1;
|
||||
#endif
|
||||
t = nsegs - 1;
|
||||
ps = psegs[t].ds_addr;
|
||||
pe = ps + psegs[t].ds_len;
|
||||
@ -8404,9 +8071,6 @@ sym_scatter_sg_physical(hcb_p np, ccb_p cp, bus_dma_segment_t *psegs, int nsegs)
|
||||
}
|
||||
cp->phys.data[s].addr = cpu_to_scr(pn);
|
||||
cp->phys.data[s].size = cpu_to_scr(k);
|
||||
#ifndef FreeBSD_Bus_Dma_Abstraction
|
||||
cp->data_len += k;
|
||||
#endif
|
||||
--s;
|
||||
if (pn == ps) {
|
||||
if (--t < 0)
|
||||
@ -8821,7 +8485,6 @@ sym_update_dflags(hcb_p np, u_char *flags, struct ccb_trans_settings *cts)
|
||||
|
||||
/*============= DRIVER INITIALISATION ==================*/
|
||||
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
|
||||
static device_method_t sym_pci_methods[] = {
|
||||
DEVMETHOD(device_probe, sym_pci_probe),
|
||||
@ -8839,25 +8502,6 @@ static devclass_t sym_devclass;
|
||||
|
||||
DRIVER_MODULE(sym, pci, sym_pci_driver, sym_devclass, 0, 0);
|
||||
|
||||
#else /* Pre-FreeBSD_Bus_Io_Abstraction */
|
||||
|
||||
static u_long sym_unit;
|
||||
|
||||
static struct pci_device sym_pci_driver = {
|
||||
"sym",
|
||||
sym_pci_probe,
|
||||
sym_pci_attach,
|
||||
&sym_unit,
|
||||
NULL
|
||||
};
|
||||
|
||||
#if __FreeBSD_version >= 400000
|
||||
COMPAT_PCI_DRIVER (sym, sym_pci_driver);
|
||||
#else
|
||||
DATA_SET (pcidevice_set, sym_pci_driver);
|
||||
#endif
|
||||
|
||||
#endif /* FreeBSD_Bus_Io_Abstraction */
|
||||
|
||||
static struct sym_pci_chip sym_pci_dev_table[] = {
|
||||
{PCI_ID_SYM53C810, 0x0f, "810", 4, 8, 4, 64,
|
||||
@ -8949,30 +8593,18 @@ static struct sym_pci_chip sym_pci_dev_table[] = {
|
||||
* zero otherwise.
|
||||
*/
|
||||
static struct sym_pci_chip *
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
sym_find_pci_chip(device_t dev)
|
||||
#else
|
||||
sym_find_pci_chip(pcici_t pci_tag)
|
||||
#endif
|
||||
{
|
||||
struct sym_pci_chip *chip;
|
||||
int i;
|
||||
u_short device_id;
|
||||
u_char revision;
|
||||
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
if (pci_get_vendor(dev) != PCI_VENDOR_NCR)
|
||||
return 0;
|
||||
|
||||
device_id = pci_get_device(dev);
|
||||
revision = pci_get_revid(dev);
|
||||
#else
|
||||
if (pci_cfgread(pci_tag, PCIR_VENDOR, 2) != PCI_VENDOR_NCR)
|
||||
return 0;
|
||||
|
||||
device_id = pci_cfgread(pci_tag, PCIR_DEVICE, 2);
|
||||
revision = pci_cfgread(pci_tag, PCIR_REVID, 1);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < sym_pci_num_devs; i++) {
|
||||
chip = &sym_pci_dev_table[i];
|
||||
@ -8989,7 +8621,6 @@ sym_find_pci_chip(pcici_t pci_tag)
|
||||
/*
|
||||
* Tell upper layer if the chip is supported.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
static int
|
||||
sym_pci_probe(device_t dev)
|
||||
{
|
||||
@ -9002,43 +8633,12 @@ sym_pci_probe(device_t dev)
|
||||
}
|
||||
return ENXIO;
|
||||
}
|
||||
#else /* Pre-FreeBSD_Bus_Io_Abstraction */
|
||||
static const char *
|
||||
sym_pci_probe(pcici_t pci_tag, pcidi_t type)
|
||||
{
|
||||
struct sym_pci_chip *chip;
|
||||
|
||||
chip = sym_find_pci_chip(pci_tag);
|
||||
if (chip && sym_find_firmware(chip)) {
|
||||
#if NNCR > 0
|
||||
/* Only claim chips we are allowed to take precedence over the ncr */
|
||||
if (!(chip->lp_probe_bit & SYM_SETUP_LP_PROBE_MAP))
|
||||
#else
|
||||
if (1)
|
||||
#endif
|
||||
return chip->name;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Attach a sym53c8xx device.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
static int
|
||||
sym_pci_attach(device_t dev)
|
||||
#else
|
||||
static void
|
||||
sym_pci_attach(pcici_t pci_tag, int unit)
|
||||
{
|
||||
int err = sym_pci_attach2(pci_tag, unit);
|
||||
if (err)
|
||||
printf("sym: failed to attach unit %d - err=%d.\n", unit, err);
|
||||
}
|
||||
static int
|
||||
sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
#endif
|
||||
{
|
||||
struct sym_pci_chip *chip;
|
||||
u_short command;
|
||||
@ -9047,7 +8647,6 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
struct sym_nvram nvram;
|
||||
struct sym_fw *fw = 0;
|
||||
int i;
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
bus_dma_tag_t bus_dmat;
|
||||
|
||||
/*
|
||||
@ -9055,17 +8654,12 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
* DMA tag, but didn't find any.
|
||||
*/
|
||||
bus_dmat = NULL;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Only probed devices should be attached.
|
||||
* We just enjoy being paranoid. :)
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
chip = sym_find_pci_chip(dev);
|
||||
#else
|
||||
chip = sym_find_pci_chip(pci_tag);
|
||||
#endif
|
||||
if (chip == NULL || (fw = sym_find_firmware(chip)) == NULL)
|
||||
return (ENXIO);
|
||||
|
||||
@ -9075,34 +8669,21 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
* We keep track in the HCB of all the resources that
|
||||
* are to be released on error.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
np = __sym_calloc_dma(bus_dmat, sizeof(*np), "HCB");
|
||||
if (np)
|
||||
np->bus_dmat = bus_dmat;
|
||||
else
|
||||
goto attach_failed;
|
||||
#else
|
||||
np = sym_calloc_dma(sizeof(*np), "HCB");
|
||||
if (!np)
|
||||
goto attach_failed;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Copy some useful infos to the HCB.
|
||||
*/
|
||||
np->hcb_ba = vtobus(np);
|
||||
np->verbose = bootverbose;
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
np->device = dev;
|
||||
np->unit = device_get_unit(dev);
|
||||
np->device_id = pci_get_device(dev);
|
||||
np->revision_id = pci_get_revid(dev);
|
||||
#else
|
||||
np->pci_tag = pci_tag;
|
||||
np->unit = unit;
|
||||
np->device_id = pci_cfgread(pci_tag, PCIR_DEVICE, 2);
|
||||
np->revision_id = pci_cfgread(pci_tag, PCIR_REVID, 1);
|
||||
#endif
|
||||
np->features = chip->features;
|
||||
np->clock_divn = chip->nr_divisor;
|
||||
np->maxoffs = chip->offset_max;
|
||||
@ -9129,7 +8710,6 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
/*
|
||||
* Allocate a tag for the DMA of user data.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
if (bus_dma_tag_create(np->bus_dmat, 1, (1<<24),
|
||||
BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR,
|
||||
NULL, NULL,
|
||||
@ -9139,7 +8719,6 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
device_printf(dev, "failed to create DMA tag.\n");
|
||||
goto attach_failed;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Read and apply some fix-ups to the PCI COMMAND
|
||||
* register. We want the chip to be enabled for:
|
||||
@ -9147,42 +8726,25 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
* - PCI parity checking (reporting would also be fine)
|
||||
* - Write And Invalidate.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
command = pci_read_config(dev, PCIR_COMMAND, 2);
|
||||
#else
|
||||
command = pci_cfgread(pci_tag, PCIR_COMMAND, 2);
|
||||
#endif
|
||||
command |= PCIM_CMD_BUSMASTEREN;
|
||||
command |= PCIM_CMD_PERRESPEN;
|
||||
command |= /* PCIM_CMD_MWIEN */ 0x0010;
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
pci_write_config(dev, PCIR_COMMAND, command, 2);
|
||||
#else
|
||||
pci_cfgwrite(pci_tag, PCIR_COMMAND, command, 2);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Let the device know about the cache line size,
|
||||
* if it doesn't yet.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
cachelnsz = pci_read_config(dev, PCIR_CACHELNSZ, 1);
|
||||
#else
|
||||
cachelnsz = pci_cfgread(pci_tag, PCIR_CACHELNSZ, 1);
|
||||
#endif
|
||||
if (!cachelnsz) {
|
||||
cachelnsz = 8;
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
pci_write_config(dev, PCIR_CACHELNSZ, cachelnsz, 1);
|
||||
#else
|
||||
pci_cfgwrite(pci_tag, PCIR_CACHELNSZ, cachelnsz, 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Alloc/get/map/retrieve everything that deals with MMIO.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
if ((command & PCIM_CMD_MEMEN) != 0) {
|
||||
int regs_id = SYM_PCI_MMIO;
|
||||
np->mmio_res = bus_alloc_resource(dev, SYS_RES_MEMORY, ®s_id,
|
||||
@ -9197,23 +8759,10 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
np->mmio_pa = rman_get_start(np->mmio_res);
|
||||
np->mmio_va = (vm_offset_t) rman_get_virtual(np->mmio_res);
|
||||
np->mmio_ba = np->mmio_pa;
|
||||
#else
|
||||
if ((command & PCIM_CMD_MEMEN) != 0) {
|
||||
vm_offset_t vaddr, paddr;
|
||||
if (!pci_map_mem(pci_tag, SYM_PCI_MMIO, &vaddr, &paddr)) {
|
||||
printf("%s: failed to map MMIO window\n", sym_name(np));
|
||||
goto attach_failed;
|
||||
}
|
||||
np->mmio_va = vaddr;
|
||||
np->mmio_pa = paddr;
|
||||
np->mmio_ba = paddr;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Allocate the IRQ.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
i = 0;
|
||||
np->irq_res = bus_alloc_resource(dev, SYS_RES_IRQ, &i,
|
||||
0, ~0, 1, RF_ACTIVE | RF_SHAREABLE);
|
||||
@ -9221,14 +8770,12 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
device_printf(dev, "failed to allocate IRQ resource\n");
|
||||
goto attach_failed;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SYM_CONF_IOMAPPED
|
||||
/*
|
||||
* User want us to use normal IO with PCI.
|
||||
* Alloc/get/map/retrieve everything that deals with IO.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
if ((command & PCI_COMMAND_IO_ENABLE) != 0) {
|
||||
int regs_id = SYM_PCI_IO;
|
||||
np->io_res = bus_alloc_resource(dev, SYS_RES_IOPORT, ®s_id,
|
||||
@ -9241,16 +8788,6 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
np->io_bsh = rman_get_bushandle(np->io_res);
|
||||
np->io_tag = rman_get_bustag(np->io_res);
|
||||
np->io_port = rman_get_start(np->io_res);
|
||||
#else
|
||||
if ((command & PCI_COMMAND_IO_ENABLE) != 0) {
|
||||
pci_port_t io_port;
|
||||
if (!pci_map_port (pci_tag, SYM_PCI_IO, &io_port)) {
|
||||
printf("%s: failed to map IO window\n", sym_name(np));
|
||||
goto attach_failed;
|
||||
}
|
||||
np->io_port = io_port;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* SYM_CONF_IOMAPPED */
|
||||
|
||||
@ -9260,7 +8797,6 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
*/
|
||||
if ((np->features & (FE_RAM|FE_RAM8K)) &&
|
||||
(command & PCIM_CMD_MEMEN) != 0) {
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
int regs_id = SYM_PCI_RAM;
|
||||
if (np->features & FE_64BIT)
|
||||
regs_id = SYM_PCI_RAM64;
|
||||
@ -9276,19 +8812,6 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
np->ram_pa = rman_get_start(np->ram_res);
|
||||
np->ram_va = (vm_offset_t) rman_get_virtual(np->ram_res);
|
||||
np->ram_ba = np->ram_pa;
|
||||
#else
|
||||
vm_offset_t vaddr, paddr;
|
||||
int regs_id = SYM_PCI_RAM;
|
||||
if (np->features & FE_64BIT)
|
||||
regs_id = SYM_PCI_RAM64;
|
||||
if (!pci_map_mem(pci_tag, regs_id, &vaddr, &paddr)) {
|
||||
printf("%s: failed to map RAM window\n", sym_name(np));
|
||||
goto attach_failed;
|
||||
}
|
||||
np->ram_va = vaddr;
|
||||
np->ram_pa = paddr;
|
||||
np->ram_ba = paddr;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@ -9322,12 +8845,7 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
*/
|
||||
i = sym_getpciclock(np);
|
||||
if (i > 37000)
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
device_printf(dev, "PCI BUS clock seems too high: %u KHz.\n",i);
|
||||
#else
|
||||
printf("%s: PCI BUS clock seems too high: %u KHz.\n",
|
||||
sym_name(np), i);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Allocate the start queue.
|
||||
@ -9471,11 +8989,7 @@ sym_pci_attach2(pcici_t pci_tag, int unit)
|
||||
* Now check the cache handling of the pci chipset.
|
||||
*/
|
||||
if (sym_snooptest (np)) {
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
device_printf(dev, "CACHE INCORRECTLY CONFIGURED.\n");
|
||||
#else
|
||||
printf("%s: CACHE INCORRECTLY CONFIGURED.\n", sym_name(np));
|
||||
#endif
|
||||
goto attach_failed;
|
||||
};
|
||||
|
||||
@ -9526,7 +9040,6 @@ static void sym_pci_free(hcb_p np)
|
||||
* Now every should be quiet for us to
|
||||
* free other resources.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
if (np->ram_res)
|
||||
bus_release_resource(np->device, SYS_RES_MEMORY,
|
||||
np->ram_id, np->ram_res);
|
||||
@ -9539,12 +9052,6 @@ static void sym_pci_free(hcb_p np)
|
||||
if (np->irq_res)
|
||||
bus_release_resource(np->device, SYS_RES_IRQ,
|
||||
0, np->irq_res);
|
||||
#else
|
||||
/*
|
||||
* YEAH!!!
|
||||
* It seems there is no means to free MMIO resources.
|
||||
*/
|
||||
#endif
|
||||
|
||||
if (np->scriptb0)
|
||||
sym_mfree_dma(np->scriptb0, np->scriptb_sz, "SCRIPTB0");
|
||||
@ -9557,9 +9064,7 @@ static void sym_pci_free(hcb_p np)
|
||||
|
||||
while ((qp = sym_remque_head(&np->free_ccbq)) != 0) {
|
||||
cp = sym_que_entry(qp, struct sym_ccb, link_ccbq);
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
bus_dmamap_destroy(np->data_dmat, cp->dmamap);
|
||||
#endif
|
||||
sym_mfree_dma(cp->sns_bbuf, SYM_SNS_BBUF_LEN, "SNS_BBUF");
|
||||
sym_mfree_dma(cp, sizeof(*cp), "CCB");
|
||||
}
|
||||
@ -9589,10 +9094,8 @@ static void sym_pci_free(hcb_p np)
|
||||
}
|
||||
if (np->targtbl)
|
||||
sym_mfree_dma(np->targtbl, 256, "TARGTBL");
|
||||
#ifdef FreeBSD_Bus_Dma_Abstraction
|
||||
if (np->data_dmat)
|
||||
bus_dma_tag_destroy(np->data_dmat);
|
||||
#endif
|
||||
sym_mfree_dma(np, sizeof(*np), "HCB");
|
||||
}
|
||||
|
||||
@ -9612,7 +9115,6 @@ static int sym_cam_attach(hcb_p np)
|
||||
/*
|
||||
* Establish our interrupt handler.
|
||||
*/
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
err = bus_setup_intr(np->device, np->irq_res,
|
||||
INTR_TYPE_CAM | INTR_ENTROPY, sym_intr, np,
|
||||
&np->intr);
|
||||
@ -9621,13 +9123,6 @@ static int sym_cam_attach(hcb_p np)
|
||||
err);
|
||||
goto fail;
|
||||
}
|
||||
#else
|
||||
err = 0;
|
||||
if (!pci_map_int (np->pci_tag, sym_intr, np, &cam_imask)) {
|
||||
printf("%s: failed to map interrupt\n", sym_name(np));
|
||||
goto fail;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Create the device queue for our sym SIM.
|
||||
@ -9657,21 +9152,6 @@ static int sym_cam_attach(hcb_p np)
|
||||
}
|
||||
np->path = path;
|
||||
|
||||
/*
|
||||
* Hmmm... This should be useful, but I donnot want to
|
||||
* know about.
|
||||
*/
|
||||
#if __FreeBSD_version < 400000
|
||||
#ifdef __alpha__
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
alpha_register_pci_scsi(pci_get_bus(np->device),
|
||||
pci_get_slot(np->device), np->sim);
|
||||
#else
|
||||
alpha_register_pci_scsi(pci_tag->bus, pci_tag->slot, np->sim);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Establish our async notification handler.
|
||||
*/
|
||||
@ -9709,12 +9189,8 @@ static int sym_cam_attach(hcb_p np)
|
||||
*/
|
||||
static void sym_cam_free(hcb_p np)
|
||||
{
|
||||
#ifdef FreeBSD_Bus_Io_Abstraction
|
||||
if (np->intr)
|
||||
bus_teardown_intr(np->device, np->irq_res, np->intr);
|
||||
#else
|
||||
/* pci_unmap_int(np->pci_tag); */ /* Does nothing */
|
||||
#endif
|
||||
|
||||
if (np->sim) {
|
||||
xpt_bus_deregister(cam_sim_path(np->sim));
|
||||
|
Loading…
Reference in New Issue
Block a user