summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/ic/aic79xx.c30
-rw-r--r--sys/dev/ic/aic79xx.h75
2 files changed, 47 insertions, 58 deletions
diff --git a/sys/dev/ic/aic79xx.c b/sys/dev/ic/aic79xx.c
index bd4b8c3c9d8..da9d1a5c160 100644
--- a/sys/dev/ic/aic79xx.c
+++ b/sys/dev/ic/aic79xx.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: aic79xx.c,v 1.11 2004/10/24 04:28:33 krw Exp $ */
+/* $OpenBSD: aic79xx.c,v 1.12 2004/10/24 23:03:01 krw Exp $ */
/*
* Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom
@@ -5925,7 +5925,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
offset = (PAGE_SIZE / sizeof(*hscb)) - scb_data->scbs_left;
hscb_map = SLIST_FIRST(&scb_data->hscb_maps);
hscb = &((struct hardware_scb *)hscb_map->vaddr)[offset];
- hscb_busaddr = hscb_map->physaddr + (offset * sizeof(*hscb));
+ hscb_busaddr = hscb_map->busaddr + (offset * sizeof(*hscb));
} else {
hscb_map = malloc(sizeof(*hscb_map), M_DEVBUF, M_NOWAIT);
@@ -5938,7 +5938,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
if (ahd_createdmamem(ahd->parent_dmat, PAGE_SIZE,
ahd->sc_dmaflags, &hscb_map->dmamap,
(caddr_t *)&hscb_map->vaddr,
- &hscb_map->physaddr,
+ &hscb_map->busaddr,
&hscb_map->dmasegs, &hscb_map->nseg,
ahd_name(ahd),
"hardware SCB structures") < 0) {
@@ -5949,7 +5949,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
SLIST_INSERT_HEAD(&scb_data->hscb_maps, hscb_map, links);
hscb = (struct hardware_scb *)hscb_map->vaddr;
- hscb_busaddr = hscb_map->physaddr;
+ hscb_busaddr = hscb_map->busaddr;
scb_data->scbs_left = PAGE_SIZE / sizeof(*hscb);
}
@@ -5962,7 +5962,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
- scb_data->sgs_left) * ahd_sglist_size(ahd);
sg_map = SLIST_FIRST(&scb_data->sg_maps);
segs = sg_map->vaddr + offset;
- sg_busaddr = sg_map->physaddr + offset;
+ sg_busaddr = sg_map->busaddr + offset;
} else {
sg_map = malloc(sizeof(*sg_map), M_DEVBUF, M_NOWAIT);
@@ -5974,7 +5974,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
/* Allocate the next batch of S/G lists */
if (ahd_createdmamem(ahd->parent_dmat, ahd_sglist_allocsize(ahd), ahd->sc_dmaflags,
&sg_map->dmamap, (caddr_t *)&sg_map->vaddr,
- &sg_map->physaddr, &sg_map->dmasegs,
+ &sg_map->busaddr, &sg_map->dmasegs,
&sg_map->nseg, ahd_name(ahd),
"SG data structures") < 0) {
free(sg_map, M_DEVBUF);
@@ -5984,7 +5984,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
SLIST_INSERT_HEAD(&scb_data->sg_maps, sg_map, links);
segs = sg_map->vaddr;
- sg_busaddr = sg_map->physaddr;
+ sg_busaddr = sg_map->busaddr;
scb_data->sgs_left =
ahd_sglist_allocsize(ahd) / ahd_sglist_size(ahd);
#ifdef AHD_DEBUG
@@ -6001,7 +6001,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
offset = PAGE_SIZE - (AHD_SENSE_BUFSIZE * scb_data->sense_left);
sense_map = SLIST_FIRST(&scb_data->sense_maps);
sense_data = sense_map->vaddr + offset;
- sense_busaddr = sense_map->physaddr + offset;
+ sense_busaddr = sense_map->busaddr + offset;
} else {
sense_map = malloc(sizeof(*sense_map), M_DEVBUF, M_NOWAIT);
@@ -6013,7 +6013,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
/* Allocate the next batch of sense buffers */
if (ahd_createdmamem(ahd->parent_dmat, PAGE_SIZE, ahd->sc_dmaflags,
&sense_map->dmamap, (caddr_t *)&sense_map->vaddr,
- &sense_map->physaddr, &sense_map->dmasegs,
+ &sense_map->busaddr, &sense_map->dmasegs,
&sense_map->nseg, ahd_name(ahd),
"Sense Data structures") < 0) {
free(sense_map, M_DEVBUF);
@@ -6023,7 +6023,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
SLIST_INSERT_HEAD(&scb_data->sense_maps, sense_map, links);
sense_data = sense_map->vaddr;
- sense_busaddr = sense_map->physaddr;
+ sense_busaddr = sense_map->busaddr;
scb_data->sense_left = PAGE_SIZE / AHD_SENSE_BUFSIZE;
#ifdef AHD_DEBUG
if (ahd_debug & AHD_SHOW_MEMORY)
@@ -6204,7 +6204,7 @@ ahd_init(struct ahd_softc *ahd)
if (ahd_createdmamem(ahd->parent_dmat, ahd->shared_data_size,
ahd->sc_dmaflags,
&ahd->shared_data_map.dmamap, (caddr_t *)&ahd->shared_data_map.vaddr,
- &ahd->shared_data_map.physaddr, &ahd->shared_data_map.dmasegs,
+ &ahd->shared_data_map.busaddr, &ahd->shared_data_map.dmasegs,
&ahd->shared_data_map.nseg, ahd_name(ahd), "shared data") < 0)
return (ENOMEM);
@@ -6213,7 +6213,7 @@ ahd_init(struct ahd_softc *ahd)
ahd->init_level++;
next_vaddr = (uint8_t *)&ahd->qoutfifo[AHD_QOUT_SIZE];
- next_baddr = ahd->shared_data_map.physaddr
+ next_baddr = ahd->shared_data_map.busaddr
+ AHD_QOUT_SIZE*sizeof(struct ahd_completion);
if ((ahd->features & AHD_TARGETMODE) != 0) {
ahd->targetcmds = (struct target_cmd *)next_vaddr;
@@ -6593,7 +6593,7 @@ ahd_chip_init(struct ahd_softc *ahd)
/*
* Tell the sequencer where it can find our arrays in memory.
*/
- busaddr = ahd->shared_data_map.physaddr;
+ busaddr = ahd->shared_data_map.busaddr;
ahd_outl(ahd, SHARED_DATA_ADDR, busaddr);
ahd_outl(ahd, QOUTFIFO_NEXT_ADDR, busaddr);
@@ -8045,7 +8045,7 @@ ahd_handle_scsi_status(struct ahd_softc *ahd, struct scb *scb)
{
struct ahd_devinfo devinfo;
struct ahd_dma_seg *sg;
- struct scsipi_sense *sc;
+ struct scsi_sense *sc;
struct ahd_initiator_tinfo *targ_info;
struct ahd_tmode_tstate *tstate;
struct ahd_transinfo *tinfo;
@@ -8072,7 +8072,7 @@ ahd_handle_scsi_status(struct ahd_softc *ahd, struct scb *scb)
&tstate);
tinfo = &targ_info->curr;
sg = scb->sg_list;
- sc = (struct scsipi_sense *)hscb->shared_data.idata.cdb;
+ sc = (struct scsi_sense *)hscb->shared_data.idata.cdb;
/*
* Save off the residual if there is one.
*/
diff --git a/sys/dev/ic/aic79xx.h b/sys/dev/ic/aic79xx.h
index 2e3cba3741d..143d85d8787 100644
--- a/sys/dev/ic/aic79xx.h
+++ b/sys/dev/ic/aic79xx.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: aic79xx.h,v 1.8 2004/10/24 22:07:38 krw Exp $ */
+/* $OpenBSD: aic79xx.h,v 1.9 2004/10/24 23:03:01 krw Exp $ */
/*
* Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom
@@ -583,7 +583,7 @@ struct ahd_dma64_seg {
struct map_node {
bus_dmamap_t dmamap;
- bus_addr_t physaddr;
+ bus_addr_t busaddr;
uint8_t *vaddr;
bus_dma_segment_t dmasegs;
int nseg;
@@ -665,16 +665,18 @@ struct scb {
#define pending_links links2.le
#define collision_links links2.le
struct scb *col_scb;
- struct scsipi_xfer *xs;
+ struct scsi_xfer *xs;
struct ahd_softc *ahd_softc;
scb_flag flags;
+#ifndef __linux__
bus_dmamap_t dmamap;
+#endif
struct scb_platform_data *platform_data;
struct map_node *hscb_map;
struct map_node *sg_map;
struct map_node *sense_map;
- void *sg_list;
+ void *sg_list;
uint8_t *sense_data;
bus_addr_t sg_list_busaddr;
bus_addr_t sense_busaddr;
@@ -712,7 +714,6 @@ struct scb_data {
SLIST_HEAD(, map_node) hscb_maps;
SLIST_HEAD(, map_node) sg_maps;
SLIST_HEAD(, map_node) sense_maps;
-
int scbs_left; /* unallocated scbs in head map_node */
int sgs_left; /* unallocated sgs in head map_node */
int sense_left; /* unallocated sense in head map_node */
@@ -1104,15 +1105,15 @@ struct ahd_completion
struct ahd_softc {
struct device sc_dev;
- struct scsipi_channel sc_channel;
+ struct scsi_link sc_channel;
struct device * sc_child;
- struct scsipi_adapter sc_adapter;
+ struct scsi_adapter sc_adapter;
bus_space_tag_t tags[2];
bus_space_handle_t bshs[2];
#ifndef __linux__
- bus_dma_tag_t buffer_dmat; /* dmat for buffer I/O */
+ bus_dma_tag_t buffer_dmat; /* dmat for buffer I/O */
#endif
void *shutdown_hook;
struct scb_data scb_data;
@@ -1382,25 +1383,13 @@ struct ahd_pci_identity {
extern struct ahd_pci_identity ahd_pci_ident_table [];
extern const u_int ahd_num_pci_devs;
-/***************************** VL/EISA Declarations ***************************/
-struct aic7770_identity {
- uint32_t full_id;
- uint32_t id_mask;
- char *name;
- ahd_device_setup_t *setup;
-};
-extern struct aic7770_identity aic7770_ident_table [];
-extern const int ahd_num_aic7770_devs;
-
-#define AHD_EISA_SLOT_OFFSET 0xc00
-#define AHD_EISA_IOSIZE 0x100
-
/*************************** Function Declarations ****************************/
/******************************************************************************/
-void ahd_reset_cmds_pending(struct ahd_softc *ahd);
-u_int ahd_find_busy_tcl(struct ahd_softc *ahd, u_int tcl);
-void ahd_busy_tcl(struct ahd_softc *ahd, u_int tcl, u_int busyid);
-void ahd_unbusy_tcl(struct ahd_softc *, u_int);
+void ahd_reset_cmds_pending(struct ahd_softc *ahd);
+u_int ahd_find_busy_tcl(struct ahd_softc *ahd, u_int tcl);
+void ahd_busy_tcl(struct ahd_softc *ahd,
+ u_int tcl, u_int busyid);
+void ahd_unbusy_tcl(struct ahd_softc *ahd, u_int tcl);
/***************************** PCI Front End *********************************/
const struct ahd_pci_identity * ahd_find_pci_device(pcireg_t, pcireg_t);
@@ -1570,24 +1559,24 @@ cam_status ahd_find_tmode_devs(struct ahd_softc *ahd,
#ifdef AHD_DEBUG
extern uint32_t ahd_debug;
#define AHD_DEBUG_OPTS 0
-#define AHD_SHOW_MISC 0x00001
-#define AHD_SHOW_SENSE 0x00002
-#define AHD_SHOW_RECOVERY 0x00004
-#define AHD_DUMP_SEEPROM 0x00008
-#define AHD_SHOW_TERMCTL 0x00010
-#define AHD_SHOW_MEMORY 0x00020
-#define AHD_SHOW_MESSAGES 0x00040
-#define AHD_SHOW_MODEPTR 0x00080
-#define AHD_SHOW_SELTO 0x00100
-#define AHD_SHOW_FIFOS 0x00200
-#define AHD_SHOW_QFULL 0x00400
-#define AHD_SHOW_DV 0x00800
-#define AHD_SHOW_MASKED_ERRORS 0x01000
-#define AHD_SHOW_QUEUE 0x02000
-#define AHD_SHOW_TQIN 0x04000
-#define AHD_SHOW_SG 0x08000
-#define AHD_SHOW_INT_COALESCING 0x10000
-#define AHD_DEBUG_SEQUENCER 0x20000
+#define AHD_SHOW_MISC 0x00001
+#define AHD_SHOW_SENSE 0x00002
+#define AHD_SHOW_RECOVERY 0x00004
+#define AHD_DUMP_SEEPROM 0x00008
+#define AHD_SHOW_TERMCTL 0x00010
+#define AHD_SHOW_MEMORY 0x00020
+#define AHD_SHOW_MESSAGES 0x00040
+#define AHD_SHOW_MODEPTR 0x00080
+#define AHD_SHOW_SELTO 0x00100
+#define AHD_SHOW_FIFOS 0x00200
+#define AHD_SHOW_QFULL 0x00400
+#define AHD_SHOW_DV 0x00800
+#define AHD_SHOW_MASKED_ERRORS 0x01000
+#define AHD_SHOW_QUEUE 0x02000
+#define AHD_SHOW_TQIN 0x04000
+#define AHD_SHOW_SG 0x08000
+#define AHD_SHOW_INT_COALESCING 0x10000
+#define AHD_DEBUG_SEQUENCER 0x20000
#endif
void ahd_print_scb(struct scb *scb);
void ahd_print_devinfo(struct ahd_softc *ahd,