diff --git a/sys/arch/macppc/include/autoconf.h b/sys/arch/macppc/include/autoconf.h index 0c03e85a2050..dc56567e7795 100644 --- a/sys/arch/macppc/include/autoconf.h +++ b/sys/arch/macppc/include/autoconf.h @@ -1,4 +1,4 @@ -/* $NetBSD: autoconf.h,v 1.18 2011/07/01 21:02:15 dyoung Exp $ */ +/* $NetBSD: autoconf.h,v 1.19 2019/01/08 07:46:10 mrg Exp $ */ /*- * Copyright (C) 1998 Internet Research Institute, Inc. @@ -34,7 +34,9 @@ #ifndef _MACHINE_AUTOCONF_H_ #define _MACHINE_AUTOCONF_H_ -#include /* for bus_space_tag_t */ +#include + +#include struct confargs { const char *ca_name; diff --git a/sys/arch/ofppc/include/autoconf.h b/sys/arch/ofppc/include/autoconf.h index 6be4d688f9fd..8be04aaed74a 100644 --- a/sys/arch/ofppc/include/autoconf.h +++ b/sys/arch/ofppc/include/autoconf.h @@ -1,10 +1,12 @@ -/* $NetBSD: autoconf.h,v 1.15 2011/07/01 21:02:15 dyoung Exp $ */ +/* $NetBSD: autoconf.h,v 1.16 2019/01/08 07:46:10 mrg Exp $ */ #ifndef _OFPPC_AUTOCONF_H_ #define _OFPPC_AUTOCONF_H_ #include +#include + struct confargs { const char *ca_name; u_int ca_node; diff --git a/sys/arch/powerpc/include/types.h b/sys/arch/powerpc/include/types.h index 2d6ad5851910..1dc4a962a95d 100644 --- a/sys/arch/powerpc/include/types.h +++ b/sys/arch/powerpc/include/types.h @@ -1,4 +1,4 @@ -/* $NetBSD: types.h,v 1.56 2017/01/27 17:22:39 christos Exp $ */ +/* $NetBSD: types.h,v 1.57 2019/01/08 07:46:11 mrg Exp $ */ /*- * Copyright (C) 1995 Wolfgang Solfrank. @@ -87,6 +87,8 @@ typedef __uint32_t tlb_asid_t; /* for booke */ #define __HAVE___LWP_GETTCB_FAST #define __HAVE___LWP_SETTCB #define __HAVE_TLS_VARIANT_I +#define __OPENFIRMIO_OPEN_CHECK_BROKEN +int __openfirmio_open_check_broken(void); #if defined(_KERNEL) || defined(_KMEMUSER) #define PCU_FPU 0 /* FPU */ diff --git a/sys/arch/powerpc/powerpc/openfirm.c b/sys/arch/powerpc/powerpc/openfirm.c index 9302c9932277..65ec1ad59cdc 100644 --- a/sys/arch/powerpc/powerpc/openfirm.c +++ b/sys/arch/powerpc/powerpc/openfirm.c @@ -1,4 +1,4 @@ -/* $NetBSD: openfirm.c,v 1.26 2018/09/03 16:29:26 riastradh Exp $ */ +/* $NetBSD: openfirm.c,v 1.27 2019/01/08 07:46:11 mrg Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -34,7 +34,7 @@ #include "opt_multiprocessor.h" #include -__KERNEL_RCSID(0, "$NetBSD: openfirm.c,v 1.26 2018/09/03 16:29:26 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: openfirm.c,v 1.27 2019/01/08 07:46:11 mrg Exp $"); #include #include @@ -42,6 +42,7 @@ __KERNEL_RCSID(0, "$NetBSD: openfirm.c,v 1.26 2018/09/03 16:29:26 riastradh Exp #include #include +#include #include @@ -757,3 +758,11 @@ ofbcopy(const void *src, void *dst, size_t len) while (len-- > 0) *dp++ = *sp++; } + +#ifdef __OPENFIRMIO_OPEN_CHECK_BROKEN +int +__openfirmio_open_check_broken(void) +{ + return strncmp(model_name, "Pegasos", 7) == 0 ? ENXIO : 0; +} +#endif diff --git a/sys/dev/ofw/openfirmio.c b/sys/dev/ofw/openfirmio.c index 94a9ee3824c7..d1b1d1ecdb51 100644 --- a/sys/dev/ofw/openfirmio.c +++ b/sys/dev/ofw/openfirmio.c @@ -1,4 +1,4 @@ -/* $NetBSD: openfirmio.c,v 1.13 2014/07/25 08:10:37 dholland Exp $ */ +/* $NetBSD: openfirmio.c,v 1.14 2019/01/08 07:46:11 mrg Exp $ */ /* * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: openfirmio.c,v 1.13 2014/07/25 08:10:37 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: openfirmio.c,v 1.14 2019/01/08 07:46:11 mrg Exp $"); #include #include @@ -63,10 +63,11 @@ static int openfirmgetstr (int, char *, char **); void openfirmattach (int); -dev_type_ioctl(openfirmioctl); +static dev_type_open(openfirmopen); +static dev_type_ioctl(openfirmioctl); const struct cdevsw openfirm_cdevsw = { - .d_open = nullopen, + .d_open = openfirmopen, .d_close = nullclose, .d_read = noread, .d_write = nowrite, @@ -117,7 +118,18 @@ openfirmgetstr(int len, char *user, char **cpp) return (error); } -int +static int +openfirmopen(dev_t dev, int flag, int mode, struct lwp *l) +{ + +#ifdef __OPENFIRMIO_OPEN_CHECK_BROKEN + return __openfirmio_open_check_broken(); +#else + return 0; +#endif +} + +static int openfirmioctl(dev_t dev, u_long cmd, void *data, int flags, struct lwp *l) { struct ofiocdesc *of;