Allow unmapped I/O via aacd(4). It shouldn't be too hard to add the
same support for aacp(4), I'm lacking the necessary hardware for testing, though.
This commit is contained in:
parent
c4a034ff8d
commit
f463a4083c
@ -987,14 +987,18 @@ aac_startio(struct aac_softc *sc)
|
||||
* busdma.
|
||||
*/
|
||||
if (cm->cm_datalen != 0) {
|
||||
error = bus_dmamap_load(sc->aac_buffer_dmat,
|
||||
cm->cm_datamap, cm->cm_data,
|
||||
cm->cm_datalen,
|
||||
aac_map_command_sg, cm, 0);
|
||||
if (cm->cm_flags & AAC_REQ_BIO)
|
||||
error = bus_dmamap_load_bio(
|
||||
sc->aac_buffer_dmat, cm->cm_datamap,
|
||||
(struct bio *)cm->cm_private,
|
||||
aac_map_command_sg, cm, 0);
|
||||
else
|
||||
error = bus_dmamap_load(sc->aac_buffer_dmat,
|
||||
cm->cm_datamap, cm->cm_data,
|
||||
cm->cm_datalen, aac_map_command_sg, cm, 0);
|
||||
if (error == EINPROGRESS) {
|
||||
fwprintf(sc, HBA_FLAGS_DBG_COMM_B, "freezing queue\n");
|
||||
sc->flags |= AAC_QUEUE_FRZN;
|
||||
error = 0;
|
||||
} else if (error != 0)
|
||||
panic("aac_startio: unexpected error %d from "
|
||||
"busdma", error);
|
||||
@ -1199,9 +1203,9 @@ aac_bio_command(struct aac_softc *sc, struct aac_command **cmp)
|
||||
goto fail;
|
||||
|
||||
/* fill out the command */
|
||||
cm->cm_data = (void *)bp->bio_data;
|
||||
cm->cm_datalen = bp->bio_bcount;
|
||||
cm->cm_complete = aac_bio_complete;
|
||||
cm->cm_flags = AAC_REQ_BIO;
|
||||
cm->cm_private = bp;
|
||||
cm->cm_timestamp = time_uptime;
|
||||
|
||||
|
@ -397,6 +397,7 @@ aac_disk_attach(device_t dev)
|
||||
sc->unit = device_get_unit(dev);
|
||||
sc->ad_disk = disk_alloc();
|
||||
sc->ad_disk->d_drv1 = sc;
|
||||
sc->ad_disk->d_flags = DISKFLAG_UNMAPPED_BIO;
|
||||
sc->ad_disk->d_name = "aacd";
|
||||
sc->ad_disk->d_maxsize = sc->ad_controller->aac_max_sectors << 9;
|
||||
sc->ad_disk->d_open = aac_disk_open;
|
||||
|
@ -181,6 +181,8 @@ struct aac_command
|
||||
#define AAC_ON_AACQ_MASK ((1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<10))
|
||||
#define AAC_QUEUE_FRZN (1<<9) /* Freeze the processing of
|
||||
* commands on the queue. */
|
||||
#define AAC_REQ_BIO (1 << 11)
|
||||
#define AAC_REQ_CCB (1 << 12)
|
||||
|
||||
void (*cm_complete)(struct aac_command *cm);
|
||||
void *cm_private;
|
||||
|
Loading…
Reference in New Issue
Block a user