summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2006-02-10 21:45:41 +0000
committerkettenis <kettenis@openbsd.org>2006-02-10 21:45:41 +0000
commit1e1caba6b50d0617454d23fbfec4ab8fdf8b3b25 (patch)
tree3394739794bc11d6258107d2e6cdc0b8a0203048 /sys/dev/pci
parentregen (diff)
downloadwireguard-openbsd-1e1caba6b50d0617454d23fbfec4ab8fdf8b3b25.tar.xz
wireguard-openbsd-1e1caba6b50d0617454d23fbfec4ab8fdf8b3b25.zip
Fix LBA48 access for ServerWorks SATA.
ok grange@
Diffstat (limited to 'sys/dev/pci')
-rw-r--r--sys/dev/pci/pciide.c14
-rw-r--r--sys/dev/pci/pciide_pdc202xx_reg.h3
-rw-r--r--sys/dev/pci/pciide_sii3112_reg.h3
-rw-r--r--sys/dev/pci/pciide_svwsata_reg.h4
4 files changed, 20 insertions, 4 deletions
diff --git a/sys/dev/pci/pciide.c b/sys/dev/pci/pciide.c
index 560fec4e5f9..d5bfab452e6 100644
--- a/sys/dev/pci/pciide.c
+++ b/sys/dev/pci/pciide.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pciide.c,v 1.224 2006/02/03 11:50:34 brad Exp $ */
+/* $OpenBSD: pciide.c,v 1.225 2006/02/10 21:45:41 kettenis Exp $ */
/* $NetBSD: pciide.c,v 1.127 2001/08/03 01:31:08 tsutsui Exp $ */
/*
@@ -7184,6 +7184,18 @@ svwsata_write_reg(struct channel_softc *chp, enum wdc_regs reg, u_int8_t val)
}
}
+void
+svwsata_lba48_write_reg(struct channel_softc *chp, enum wdc_regs reg, u_int16_t val)
+{
+ if (reg & _WDC_AUX) {
+ bus_space_write_4(chp->ctl_iot, chp->ctl_ioh,
+ (reg & _WDC_REGMASK) << 2, val);
+ } else {
+ bus_space_write_4(chp->cmd_iot, chp->cmd_ioh,
+ (reg & _WDC_REGMASK) << 2, val);
+ }
+}
+
#define ACARD_IS_850(sc) \
((sc)->sc_pp->ide_product == PCI_PRODUCT_ACARD_ATP850U)
diff --git a/sys/dev/pci/pciide_pdc202xx_reg.h b/sys/dev/pci/pciide_pdc202xx_reg.h
index f207a5e6021..bd8d82e5708 100644
--- a/sys/dev/pci/pciide_pdc202xx_reg.h
+++ b/sys/dev/pci/pciide_pdc202xx_reg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pciide_pdc202xx_reg.h,v 1.12 2005/06/15 04:45:49 fgsch Exp $ */
+/* $OpenBSD: pciide_pdc202xx_reg.h,v 1.13 2006/02/10 21:45:41 kettenis Exp $ */
/* $NetBSD: pciide_pdc202xx_reg.h,v 1.5 2001/07/05 08:38:27 toshii Exp $ */
/*
@@ -154,6 +154,7 @@ void pdc203xx_write_reg(struct channel_softc *, enum wdc_regs, u_int8_t);
struct channel_softc_vtbl wdc_pdc203xx_vtbl = {
pdc203xx_read_reg,
pdc203xx_write_reg,
+ wdc_default_lba48_write_reg,
wdc_default_read_raw_multi_2,
wdc_default_write_raw_multi_2,
wdc_default_read_raw_multi_4,
diff --git a/sys/dev/pci/pciide_sii3112_reg.h b/sys/dev/pci/pciide_sii3112_reg.h
index 03c602b8839..dfcd6fe4ece 100644
--- a/sys/dev/pci/pciide_sii3112_reg.h
+++ b/sys/dev/pci/pciide_sii3112_reg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pciide_sii3112_reg.h,v 1.4 2005/11/14 13:00:29 mickey Exp $ */
+/* $OpenBSD: pciide_sii3112_reg.h,v 1.5 2006/02/10 21:45:41 kettenis Exp $ */
/* $NetBSD: pciide_sii3112_reg.h,v 1.1 2003/03/20 04:22:50 thorpej Exp $ */
/*
@@ -396,6 +396,7 @@ void sii3114_write_reg(struct channel_softc *, enum wdc_regs, u_int8_t);
struct channel_softc_vtbl wdc_sii3114_vtbl = {
sii3114_read_reg,
sii3114_write_reg,
+ wdc_default_lba48_write_reg,
wdc_default_read_raw_multi_2,
wdc_default_write_raw_multi_2,
wdc_default_read_raw_multi_4,
diff --git a/sys/dev/pci/pciide_svwsata_reg.h b/sys/dev/pci/pciide_svwsata_reg.h
index dfa2f5d1f8c..86a7e24b2f8 100644
--- a/sys/dev/pci/pciide_svwsata_reg.h
+++ b/sys/dev/pci/pciide_svwsata_reg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pciide_svwsata_reg.h,v 1.3 2005/10/21 10:52:32 grange Exp $ */
+/* $OpenBSD: pciide_svwsata_reg.h,v 1.4 2006/02/10 21:45:41 kettenis Exp $ */
/*
* Copyright (c) 2005 Mark Kettenis
@@ -39,10 +39,12 @@ struct pciide_svwsata {
u_int8_t svwsata_read_reg(struct channel_softc *, enum wdc_regs);
void svwsata_write_reg(struct channel_softc *, enum wdc_regs, u_int8_t);
+void svwsata_lba48_write_reg(struct channel_softc *, enum wdc_regs, u_int16_t);
struct channel_softc_vtbl wdc_svwsata_vtbl = {
svwsata_read_reg,
svwsata_write_reg,
+ svwsata_lba48_write_reg,
wdc_default_read_raw_multi_2,
wdc_default_write_raw_multi_2,
wdc_default_read_raw_multi_4,