diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c index 87072ad7bf8..1ff1ce11ff2 100644 --- a/sys/dev/ata/ata-all.c +++ b/sys/dev/ata/ata-all.c @@ -79,9 +79,11 @@ static void ataaction(struct cam_sim *sim, union ccb *ccb); static void atapoll(struct cam_sim *sim); #endif static void ata_conn_event(void *, int); +#ifndef ATA_CAM static void bswap(int8_t *, int); static void btrim(int8_t *, int); static void bpack(int8_t *, int8_t *, int); +#endif static void ata_interrupt_locked(void *data); #ifdef ATA_CAM static void ata_periodic_poll(void *data); @@ -90,27 +92,36 @@ static void ata_periodic_poll(void *data); /* global vars */ MALLOC_DEFINE(M_ATA, "ata_generic", "ATA driver generic layer"); int (*ata_raid_ioctl_func)(u_long cmd, caddr_t data) = NULL; +#ifndef ATA_CAM struct intr_config_hook *ata_delayed_attach = NULL; +#endif devclass_t ata_devclass; uma_zone_t ata_request_zone; uma_zone_t ata_composite_zone; +#ifndef ATA_CAM int ata_wc = 1; int ata_setmax = 0; +#endif int ata_dma_check_80pin = 1; /* local vars */ +#ifndef ATA_CAM static int ata_dma = 1; static int atapi_dma = 1; +#endif /* sysctl vars */ static SYSCTL_NODE(_hw, OID_AUTO, ata, CTLFLAG_RD, 0, "ATA driver parameters"); +#ifndef ATA_CAM TUNABLE_INT("hw.ata.ata_dma", &ata_dma); SYSCTL_INT(_hw_ata, OID_AUTO, ata_dma, CTLFLAG_RDTUN, &ata_dma, 0, "ATA disk DMA mode control"); +#endif TUNABLE_INT("hw.ata.ata_dma_check_80pin", &ata_dma_check_80pin); SYSCTL_INT(_hw_ata, OID_AUTO, ata_dma_check_80pin, CTLFLAG_RW, &ata_dma_check_80pin, 1, "Check for 80pin cable before setting ATA DMA mode"); +#ifndef ATA_CAM TUNABLE_INT("hw.ata.atapi_dma", &atapi_dma); SYSCTL_INT(_hw_ata, OID_AUTO, atapi_dma, CTLFLAG_RDTUN, &atapi_dma, 0, "ATAPI device DMA mode control"); @@ -120,6 +131,7 @@ SYSCTL_INT(_hw_ata, OID_AUTO, wc, CTLFLAG_RDTUN, &ata_wc, 0, TUNABLE_INT("hw.ata.setmax", &ata_setmax); SYSCTL_INT(_hw_ata, OID_AUTO, setmax, CTLFLAG_RDTUN, &ata_setmax, 0, "ATA disk set max native address"); +#endif #ifdef ATA_CAM FEATURE(ata_cam, "ATA devices are accessed through the cam(4) driver"); #endif @@ -186,13 +198,13 @@ ata_attach(device_t dev) callout_init(&ch->poll_callout, 1); #endif +#ifndef ATA_CAM /* reset the controller HW, the channel and device(s) */ while (ATA_LOCKING(dev, ATA_LF_LOCK) != ch->unit) pause("ataatch", 1); -#ifndef ATA_CAM ATA_RESET(dev); -#endif ATA_LOCKING(dev, ATA_LF_UNLOCK); +#endif /* allocate DMA resources if DMA HW present*/ if (ch->dma.alloc) @@ -606,6 +618,7 @@ ata_print_cable(device_t dev, u_int8_t *who) "DMA limited to UDMA33, %s found non-ATA66 cable\n", who); } +#ifndef ATA_CAM int ata_check_80pin(device_t dev, int mode) { @@ -623,7 +636,9 @@ ata_check_80pin(device_t dev, int mode) } return mode; } +#endif +#ifndef ATA_CAM void ata_setmode(device_t dev) { @@ -644,6 +659,7 @@ ata_setmode(device_t dev) (error) ? "FAILURE " : "", ata_mode2str(mode)); atadev->mode = mode; } +#endif /* * device related interfaces @@ -732,6 +748,7 @@ ata_ioctl(struct cdev *dev, u_long cmd, caddr_t data, } #endif +#ifndef ATA_CAM int ata_device_ioctl(device_t dev, u_long cmd, caddr_t data) { @@ -830,6 +847,7 @@ ata_device_ioctl(device_t dev, u_long cmd, caddr_t data) return ENOTTY; } } +#endif #ifndef ATA_CAM static void @@ -878,6 +896,7 @@ ata_add_child(device_t parent, struct ata_device *atadev, int unit) } #endif +#ifndef ATA_CAM int ata_getparam(struct ata_device *atadev, int init) { @@ -983,6 +1002,7 @@ ata_getparam(struct ata_device *atadev, int init) } return error; } +#endif #ifndef ATA_CAM int @@ -1188,6 +1208,7 @@ ata_udelay(int interval) pause("ataslp", interval/(1000000/hz)); } +#ifndef ATA_CAM char * ata_unit2str(struct ata_device *atadev) { @@ -1200,6 +1221,7 @@ ata_unit2str(struct ata_device *atadev) sprintf(str, "%s", atadev->unit == ATA_MASTER ? "master" : "slave"); return str; } +#endif const char * ata_mode2str(int mode) @@ -1260,6 +1282,7 @@ ata_str2mode(const char *str) return (-1); } +#ifndef ATA_CAM const char * ata_satarev2str(int rev) { @@ -1272,6 +1295,7 @@ ata_satarev2str(int rev) default: return "???"; } } +#endif int ata_atapi(device_t dev, int target) @@ -1281,6 +1305,7 @@ ata_atapi(device_t dev, int target) return (ch->devices & (ATA_ATAPI_MASTER << target)); } +#ifndef ATA_CAM int ata_pmode(struct ata_params *ap) { @@ -1304,7 +1329,9 @@ ata_pmode(struct ata_params *ap) return ATA_PIO0; return ATA_PIO0; } +#endif +#ifndef ATA_CAM int ata_wmode(struct ata_params *ap) { @@ -1316,7 +1343,9 @@ ata_wmode(struct ata_params *ap) return ATA_WDMA0; return -1; } +#endif +#ifndef ATA_CAM int ata_umode(struct ata_params *ap) { @@ -1338,7 +1367,9 @@ ata_umode(struct ata_params *ap) } return -1; } +#endif +#ifndef ATA_CAM int ata_limit_mode(device_t dev, int mode, int maxmode) { @@ -1358,7 +1389,9 @@ ata_limit_mode(device_t dev, int mode, int maxmode) return mode; } +#endif +#ifndef ATA_CAM static void bswap(int8_t *buf, int len) { @@ -1367,7 +1400,9 @@ bswap(int8_t *buf, int len) while (--ptr >= (u_int16_t*)buf) *ptr = ntohs(*ptr); } +#endif +#ifndef ATA_CAM static void btrim(int8_t *buf, int len) { @@ -1379,7 +1414,9 @@ btrim(int8_t *buf, int len) for (ptr = buf + len - 1; ptr >= buf && *ptr == ' '; --ptr) *ptr = 0; } +#endif +#ifndef ATA_CAM static void bpack(int8_t *src, int8_t *dst, int len) { @@ -1402,6 +1439,7 @@ bpack(int8_t *src, int8_t *dst, int len) if (j < len) dst[j] = 0x00; } +#endif #ifdef ATA_CAM void diff --git a/sys/dev/ata/ata-cbus.c b/sys/dev/ata/ata-cbus.c index eb932ba8619..0508083159d 100644 --- a/sys/dev/ata/ata-cbus.c +++ b/sys/dev/ata/ata-cbus.c @@ -339,11 +339,14 @@ static int ata_cbuschannel_banking(device_t dev, int flags) { struct ata_cbus_controller *ctlr = device_get_softc(device_get_parent(dev)); +#ifndef ATA_CAM struct ata_channel *ch = device_get_softc(dev); +#endif int res; mtx_lock(&ctlr->bank_mtx); switch (flags) { +#ifndef ATA_CAM case ATA_LF_LOCK: if (ctlr->locked_bank == -1) ctlr->locked_bank = ch->unit; @@ -368,6 +371,7 @@ ata_cbuschannel_banking(device_t dev, int flags) } } break; +#endif case ATA_LF_WHICH: break; @@ -385,8 +389,10 @@ static device_method_t ata_cbuschannel_methods[] = { DEVMETHOD(device_suspend, ata_cbuschannel_suspend), DEVMETHOD(device_resume, ata_cbuschannel_resume), +#ifndef ATA_CAM /* ATA methods */ DEVMETHOD(ata_locking, ata_cbuschannel_banking), +#endif { 0, 0 } }; diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c index 73f051b6309..b22b5e26319 100644 --- a/sys/dev/ata/ata-pci.c +++ b/sys/dev/ata/ata-pci.c @@ -699,6 +699,7 @@ ata_pcichannel_resume(device_t dev) } +#ifndef ATA_CAM static int ata_pcichannel_locking(device_t dev, int mode) { @@ -710,6 +711,7 @@ ata_pcichannel_locking(device_t dev, int mode) else return ch->unit; } +#endif static void ata_pcichannel_reset(device_t dev) @@ -766,7 +768,9 @@ static device_method_t ata_pcichannel_methods[] = { /* ATA methods */ DEVMETHOD(ata_setmode, ata_pcichannel_setmode), DEVMETHOD(ata_getrev, ata_pcichannel_getrev), +#ifndef ATA_CAM DEVMETHOD(ata_locking, ata_pcichannel_locking), +#endif DEVMETHOD(ata_reset, ata_pcichannel_reset), { 0, 0 } diff --git a/sys/dev/ata/ata-pci.h b/sys/dev/ata/ata-pci.h index 43a4950e1c7..81aee6aebd2 100644 --- a/sys/dev/ata/ata-pci.h +++ b/sys/dev/ata/ata-pci.h @@ -62,7 +62,9 @@ struct ata_pci_controller { int (*ch_detach)(device_t); int (*ch_suspend)(device_t); int (*ch_resume)(device_t); +#ifndef ATA_CAM int (*locking)(device_t, int); +#endif void (*reset)(device_t); int (*setmode)(device_t, int, int); int (*getrev)(device_t, int); diff --git a/sys/dev/ata/ata-queue.c b/sys/dev/ata/ata-queue.c index a58423be9d7..070d7113f9f 100644 --- a/sys/dev/ata/ata-queue.c +++ b/sys/dev/ata/ata-queue.c @@ -43,11 +43,14 @@ __FBSDID("$FreeBSD$"); #include #include +#ifndef ATA_CAM /* prototypes */ static void ata_completed(void *, int); static void ata_sort_queue(struct ata_channel *ch, struct ata_request *request); -static char *ata_skey2str(u_int8_t); +static const char *ata_skey2str(u_int8_t); +#endif +#ifndef ATA_CAM void ata_queue_request(struct ata_request *request) { @@ -123,7 +126,9 @@ ata_queue_request(struct ata_request *request) sema_destroy(&request->done); } } +#endif +#ifndef ATA_CAM int ata_controlcmd(device_t dev, u_int8_t command, u_int16_t feature, u_int64_t lba, u_int16_t count) @@ -153,7 +158,9 @@ ata_controlcmd(device_t dev, u_int8_t command, u_int16_t feature, } return error; } +#endif +#ifndef ATA_CAM int ata_atapicmd(device_t dev, u_int8_t *ccb, caddr_t data, int count, int flags, int timeout) @@ -176,7 +183,9 @@ ata_atapicmd(device_t dev, u_int8_t *ccb, caddr_t data, } return error; } +#endif +#ifndef ATA_CAM void ata_start(device_t dev) { @@ -235,7 +244,9 @@ ata_start(device_t dev) } } } +#endif +#ifndef ATA_CAM void ata_finish(struct ata_request *request) { @@ -263,7 +274,9 @@ ata_finish(struct ata_request *request) } } } +#endif +#ifndef ATA_CAM static void ata_completed(void *context, int dummy) { @@ -495,6 +508,7 @@ ata_completed(void *context, int dummy) if (ch) ata_start(ch->dev); } +#endif void ata_timeout(struct ata_request *request) @@ -520,8 +534,8 @@ ata_timeout(struct ata_request *request) ata_cam_end_transaction(ch->dev, request); #endif mtx_unlock(&ch->state_mtx); - ATA_LOCKING(ch->dev, ATA_LF_UNLOCK); #ifndef ATA_CAM + ATA_LOCKING(ch->dev, ATA_LF_UNLOCK); ata_finish(request); #endif } @@ -530,6 +544,7 @@ ata_timeout(struct ata_request *request) } } +#ifndef ATA_CAM void ata_fail_requests(device_t dev) { @@ -568,7 +583,9 @@ ata_fail_requests(device_t dev) ata_finish(request); } } +#endif +#ifndef ATA_CAM /* * Rudely drop all requests queued to the channel of specified device. * XXX: The requests are leaked, use only in fatal case. @@ -586,7 +603,9 @@ ata_drop_requests(device_t dev) } mtx_unlock(&ch->queue_mtx); } +#endif +#ifndef ATA_CAM static u_int64_t ata_get_lba(struct ata_request *request) { @@ -608,7 +627,9 @@ ata_get_lba(struct ata_request *request) else return request->u.ata.lba; } +#endif +#ifndef ATA_CAM static void ata_sort_queue(struct ata_channel *ch, struct ata_request *request) { @@ -661,6 +682,7 @@ ata_sort_queue(struct ata_channel *ch, struct ata_request *request) ch->freezepoint = request; TAILQ_INSERT_AFTER(&ch->ata_queue, this, request, chain); } +#endif char * ata_cmd2str(struct ata_request *request) @@ -776,7 +798,8 @@ ata_cmd2str(struct ata_request *request) return buffer; } -static char * +#ifndef ATA_CAM +static const char * ata_skey2str(u_int8_t skey) { switch (skey) { @@ -799,3 +822,4 @@ ata_skey2str(u_int8_t skey) default: return("UNKNOWN"); } } +#endif diff --git a/sys/dev/ata/chipsets/ata-acard.c b/sys/dev/ata/chipsets/ata-acard.c index 06ca004a55c..d53fc28a9a0 100644 --- a/sys/dev/ata/chipsets/ata-acard.c +++ b/sys/dev/ata/chipsets/ata-acard.c @@ -51,26 +51,29 @@ __FBSDID("$FreeBSD$"); #include #include +#ifndef ATA_CAM struct ata_serialize { struct mtx locked_mtx; int locked_ch; int restart_ch; }; +#endif /* local prototypes */ static int ata_acard_chipinit(device_t dev); -static int ata_acard_chipdeinit(device_t dev); static int ata_acard_ch_attach(device_t dev); static int ata_acard_status(device_t dev); static int ata_acard_850_setmode(device_t dev, int target, int mode); static int ata_acard_86X_setmode(device_t dev, int target, int mode); +#ifndef ATA_CAM +static int ata_acard_chipdeinit(device_t dev); static int ata_serialize(device_t dev, int flags); static void ata_serialize_init(struct ata_serialize *serial); +#endif /* misc defines */ #define ATP_OLD 1 - /* * Acard chipset support functions */ @@ -94,7 +97,9 @@ ata_acard_probe(device_t dev) ata_set_desc(dev); ctlr->chipinit = ata_acard_chipinit; +#ifndef ATA_CAM ctlr->chipdeinit = ata_acard_chipdeinit; +#endif return (BUS_PROBE_DEFAULT); } @@ -102,7 +107,9 @@ static int ata_acard_chipinit(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(dev); +#ifndef ATA_CAM struct ata_serialize *serial; +#endif if (ata_setup_interrupt(dev, ata_generic_intr)) return ENXIO; @@ -111,17 +118,20 @@ ata_acard_chipinit(device_t dev) ctlr->ch_detach = ata_pci_ch_detach; if (ctlr->chip->cfg1 == ATP_OLD) { ctlr->setmode = ata_acard_850_setmode; +#ifndef ATA_CAM ctlr->locking = ata_serialize; serial = malloc(sizeof(struct ata_serialize), M_ATAPCI, M_WAITOK | M_ZERO); ata_serialize_init(serial); ctlr->chipset_data = serial; +#endif } else ctlr->setmode = ata_acard_86X_setmode; return 0; } +#ifndef ATA_CAM static int ata_acard_chipdeinit(device_t dev) { @@ -136,6 +146,7 @@ ata_acard_chipdeinit(device_t dev) } return (0); } +#endif static int ata_acard_ch_attach(device_t dev) @@ -228,6 +239,7 @@ ata_acard_86X_setmode(device_t dev, int target, int mode) return (mode); } +#ifndef ATA_CAM static void ata_serialize_init(struct ata_serialize *serial) { @@ -277,5 +289,6 @@ ata_serialize(device_t dev, int flags) mtx_unlock(&serial->locked_mtx); return res; } +#endif ATA_DECLARE_DRIVER(ata_acard);