- Add an atac_bustype_ata member to atac_softc to hold a pointer to

the ata_bustype for the controller.  Fill it in and use it instead
  of referencing wdc_ata_bustype directly.
- Add an atac_atapibus_attach member to atac_softc to hold a pointer
  to the function that attaches the ATAPI bus for the controller.  Fill
  it in and use it instead of referencing wdc_atapibus_attach directly.
This commit is contained in:
thorpej 2004-08-20 20:52:31 +00:00
parent 8bff586af3
commit 2606542c7b
2 changed files with 14 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: atavar.h,v 1.61 2004/08/20 17:19:44 thorpej Exp $ */
/* $NetBSD: atavar.h,v 1.62 2004/08/20 20:52:31 thorpej Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer.
@ -380,6 +380,8 @@ struct atac_softc {
struct ata_channel **atac_channels;
int atac_nchannels;
const struct ata_bustype *atac_bustype_ata;
/*
* Glue between ATA and SCSIPI for the benefit of ATAPI.
*
@ -387,6 +389,7 @@ struct atac_softc {
* devices.
*/
struct atapi_adapter atac_atapi_adapter;
void (*atac_atapibus_attach)(struct atabus_softc *);
/* Driver callback to probe for drives. */
void (*atac_probe)(struct ata_channel *);

View File

@ -1,4 +1,4 @@
/* $NetBSD: wdc.c,v 1.207 2004/08/20 06:39:38 thorpej Exp $ */
/* $NetBSD: wdc.c,v 1.208 2004/08/20 20:52:31 thorpej Exp $ */
/*
* Copyright (c) 1998, 2001, 2003 Manuel Bouyer. All rights reserved.
@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: wdc.c,v 1.207 2004/08/20 06:39:38 thorpej Exp $");
__KERNEL_RCSID(0, "$NetBSD: wdc.c,v 1.208 2004/08/20 20:52:31 thorpej Exp $");
#ifndef ATADEBUG
#define ATADEBUG
@ -409,7 +409,7 @@ atabusconfig(struct atabus_softc *atabus_sc)
for (i = 0; i < chp->ch_ndrive; i++) {
if (chp->ch_drive[i].drive_flags & DRIVE_ATAPI) {
#if NATAPIBUS > 0
wdc_atapibus_attach(atabus_sc);
(*atac->atac_atapibus_attach)(atabus_sc);
#else
/*
* Fake the autoconfig "not configured" message
@ -431,7 +431,7 @@ atabusconfig(struct atabus_softc *atabus_sc)
continue;
}
memset(&adev, 0, sizeof(struct ata_device));
adev.adev_bustype = &wdc_ata_bustype;
adev.adev_bustype = atac->atac_bustype_ata;
adev.adev_channel = chp->ch_channel;
adev.adev_openings = 1;
adev.adev_drv_data = &chp->ch_drive[i];
@ -800,8 +800,14 @@ wdcattach(struct ata_channel *chp)
/* initialise global data */
callout_init(&chp->ch_callout);
if (atac->atac_bustype_ata == NULL)
atac->atac_bustype_ata = &wdc_ata_bustype;
if (atac->atac_probe == NULL)
atac->atac_probe = wdc_drvprobe;
#if NATAPIBUS > 0
if (atac->atac_atapibus_attach == NULL)
atac->atac_atapibus_attach = wdc_atapibus_attach;
#endif
TAILQ_INIT(&chp->ch_queue->queue_xfer);
chp->ch_queue->queue_freeze = 0;