Index: rumpkernel/buildrump.sh/src/sys/rump/include/sys/bus.h =================================================================== --- rumpkernel.orig/buildrump.sh/src/sys/rump/include/sys/bus.h +++ rumpkernel/buildrump.sh/src/sys/rump/include/sys/bus.h @@ -68,4 +68,12 @@ typedef struct { #include +/* + * Convenience macros to correctly extract the upper and lower + * 32 bits of a bus_addr_t (which may be a 32-bit or 64-bit + * value). + */ +#define BUS_ADDR_HI32(a) ((uint32_t) __SHIFTOUT(a, __BITS(32,63))) +#define BUS_ADDR_LO32(a) ((uint32_t) __SHIFTOUT(a, __BITS(0,31))) + #endif /* _SYS_RUMP_BUS_H_ */ Index: rumpkernel/buildrump.sh/src/sys/dev/ic/ahcisata_core.c =================================================================== --- rumpkernel.orig/buildrump.sh/src/sys/dev/ic/ahcisata_core.c +++ rumpkernel/buildrump.sh/src/sys/dev/ic/ahcisata_core.c @@ -36,6 +36,7 @@ __KERNEL_RCSID(0, "$NetBSD: ahcisata_cor #include #include #include +#include #include #include Index: rumpkernel/buildrump.sh/src/sys/rump/dev/Makefile.rumpdevcomp =================================================================== --- rumpkernel.orig/buildrump.sh/src/sys/rump/dev/Makefile.rumpdevcomp +++ rumpkernel/buildrump.sh/src/sys/rump/dev/Makefile.rumpdevcomp @@ -8,6 +8,7 @@ RUMPDEVCOMP= audio bpf cgd disk dm drvct RUMPUSBDEVS= ualea ubt ucom ugenhc ulpt umass usb RUMPPCIDEVS= pci pci_if_iwn pci_if_pcn pci_if_wm +RUMPPCIDEVS+= pci_ahcisata RUMPPCIDEVS+= pci_piixide RUMPPCIDEVS+= pci_usbhc RUMPPCIDEVS+= pci_virtio virtio_if_vioif virtio_ld virtio_viornd Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/AHCISATA.ioconf =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/AHCISATA.ioconf @@ -0,0 +1,19 @@ +ioconf ahcisata + +include "conf/files" +include "dev/ata/files.ata" +include "dev/pci/files.pci" +include "rump/dev/files.rump" + +pseudo-root pci* + +# AHCI support +ahcisata* at pci? dev ? function ? +atabus* at ahcisata? channel ? +ata_hl* at atabus? drive ? + +# Disks +wd* at ata_hl? + +# ATAPI support +atapi* at ahcisata? Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/Makefile =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/Makefile @@ -0,0 +1,21 @@ +.PATH: ${.CURDIR}/../../../../dev/pci \ + ${.CURDIR}/../../../../dev/ata \ + ${.CURDIR}/../../../../dev/scsipi \ + ${.CURDIR}/../../../../dev/ic + +LIB= rumpdev_ahcisata +COMMENT=AHCI support with SATA && ATAPI + +IOCONF= AHCISATA.ioconf + +SRCS+= ahcisata_pci.c +SRCS+= sata_subr.c satafis_subr.c +SRCS+= ahcisata_core.c +SRCS+= atapi_wdc.c atapi_base.c +SRCS+= wd.c ata.c ata_wdc.c ata_subr.c ata_recovery.c +SRCS+= wdc.c + +SRCS+= ahcisata_component.c + +.include +.include Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/ahcisata_component.c =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/ahcisata_component.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include + +#include "ioconf.c" + +#include +#include + +RUMP_COMPONENT(RUMP_COMPONENT_DEV) +{ + extern struct bdevsw wd_bdevsw; + extern struct cdevsw wd_cdevsw; + devmajor_t bmaj, cmaj; + + config_init_component(cfdriver_ioconf_ahcisata, + cfattach_ioconf_ahcisata, cfdata_ioconf_ahcisata); + + bmaj = cmaj = -1; + FLAWLESSCALL(devsw_attach("wd", &wd_bdevsw, &bmaj, &wd_cdevsw, &cmaj)); + + FLAWLESSCALL(rump_vfs_makedevnodes(S_IFBLK, "/dev/wd0", 'a', + bmaj, 0, 8)); + FLAWLESSCALL(rump_vfs_makedevnodes(S_IFCHR, "/dev/rwd0", 'a', + cmaj, 0, 8)); + FLAWLESSCALL(rump_vfs_makedevnodes(S_IFBLK, "/dev/wd1", 'a', + bmaj, 8, 8)); + FLAWLESSCALL(rump_vfs_makedevnodes(S_IFCHR, "/dev/rwd1", 'a', + cmaj, 8, 8)); + FLAWLESSCALL(rump_vfs_makedevnodes(S_IFBLK, "/dev/wd2", 'a', + bmaj, 16, 8)); + FLAWLESSCALL(rump_vfs_makedevnodes(S_IFCHR, "/dev/rwd2", 'a', + cmaj, 16, 8)); + FLAWLESSCALL(rump_vfs_makedevnodes(S_IFBLK, "/dev/wd3", 'a', + bmaj, 24, 8)); + FLAWLESSCALL(rump_vfs_makedevnodes(S_IFCHR, "/dev/rwd3", 'a', + cmaj, 24, 8)); +} Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/opt_wd.h =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/opt_wd.h @@ -0,0 +1 @@ + Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/ataraid.h =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/ataraid.h @@ -0,0 +1 @@ + Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/opt_ata.h =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/opt_ata.h @@ -0,0 +1 @@ + Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/opt_wdc.h =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/opt_wdc.h @@ -0,0 +1,3 @@ +#define NWD 1 +#define NSATA 1 +#define WDC_NO_IDS Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/sata.h =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/sata.h @@ -0,0 +1 @@ + Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/sata_pmp.h =================================================================== --- /dev/null +++ rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/sata_pmp.h @@ -0,0 +1 @@ +