Implement bios_ident() which will identify each type of CPU that we
authorimp <imp@openbsd.org>
Fri, 6 Sep 1996 04:57:50 +0000 (04:57 +0000)
committerimp <imp@openbsd.org>
Fri, 6 Sep 1996 04:57:50 +0000 (04:57 +0000)
support.  First cut at more complete ARC BIOS support.  bios_ident() will
eventually be table driven as soon as I generate the tables.

Much information on the BIOS calls has come from the Linux/MIPS MILO
boot loader.

sys/arch/arc/arc/arcbios.c [new file with mode: 0644]
sys/arch/arc/arc/arcbios.h [new file with mode: 0644]
sys/arch/arc/arc/machdep.c
sys/arch/arc/conf/files.arc

diff --git a/sys/arch/arc/arc/arcbios.c b/sys/arch/arc/arc/arcbios.c
new file mode 100644 (file)
index 0000000..d6b9f0b
--- /dev/null
@@ -0,0 +1,49 @@
+/*     $OpenBSD: arcbios.c,v 1.1 1996/09/06 04:57:51 imp Exp $ */
+/*-
+ * Copyright (c) 1996 M. Warner Losh.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <machine/pte.h>
+#include <machine/cpu.h>
+#include <machine/memconf.h>
+#include <machine/param.h>
+#include <arc/arc/arcbios.h>
+#include <arc/arc/arctype.h>
+
+arc_param_blk_t *bios_base = (arc_param_blk_t *) 0x80001000;
+
+extern int     cputype;                /* Mother board type */
+
+/*
+ * Incomplate version of bios_ident
+ */
+void
+bios_ident()
+{
+    cputype = DESKSTATION_TYNE;
+}
diff --git a/sys/arch/arc/arc/arcbios.h b/sys/arch/arc/arc/arcbios.h
new file mode 100644 (file)
index 0000000..12be71d
--- /dev/null
@@ -0,0 +1,303 @@
+/*     $OpenBSD: arcbios.h,v 1.1 1996/09/06 04:57:51 imp Exp $ */
+/*-
+ * Copyright (c) 1996 M. Warner Losh.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+
+typedef struct arc_sid
+{
+       char vendor[8];
+       char prodid[8];
+} arc_sid_t;
+
+typedef enum arc_config_class
+{
+       arc_SystemClass,
+       arc_ProcessorClass,
+       arc_CacheClass,
+       arc_AdapterClass,
+       arc_ControllerClass,
+       arc_PeripheralClass,
+       arc_MemoryClass
+} arc_config_class_t;
+
+typedef enum arc_config_type
+{
+       arc_System,
+
+       arc_CentralProcessor,
+       arc_FloatingPointProcessor,
+
+       arc_PrimaryIcache,
+       arc_PrimaryDcache,
+       arc_SecondaryIcache,
+       arc_SecondaryDcache,
+       arc_SecondaryCache,
+
+       arc_EisaAdapter,                /* Eisa adapter         */
+       arc_TcAdapter,                  /* Turbochannel adapter */
+       arc_ScsiAdapter,                /* SCSI adapter         */
+       arc_DtiAdapter,                 /* AccessBus adapter    */
+       arc_MultiFunctionAdapter,
+
+       arc_DiskController,
+       arc_TapeController,
+       arc_CdromController,
+       arc_WormController,
+       arc_SerialController,
+       arc_NetworkController,
+       arc_DisplayController,
+       arc_ParallelController,
+       arc_PointerController,
+       arc_KeyboardController,
+       arc_AudioController,
+       arc_OtherController,            /* denotes a controller not otherwise defined */
+
+       arc_DiskPeripheral,
+       arc_FloppyDiskPeripheral,
+       arc_TapePeripheral,
+       arc_ModemPeripheral,
+       arc_MonitorPeripheral,
+       arc_PrinterPeripheral,
+       arc_PointerPeripheral,
+       arc_KeyboardPeripheral,
+       arc_TerminalPeripheral,
+       arc_OtherPeripheral,            /* denotes a peripheral not otherwise defined   */
+       arc_LinePeripheral,
+       arc_NetworkPeripheral,
+
+       arc_SystemMemory
+} arc_config_type_t;
+
+typedef u_char arc_dev_flags_t;
+
+/* Wonder how this is aligned... */
+typedef struct arc_config
+{
+       arc_config_class_t      class;          /* Likely these three all */
+       arc_config_type_t       type;           /* need to be uchar to make */
+       arc_dev_flags_t         flags;          /* the alignment right */
+       u_int16_t               version;
+       u_int16_t               revision;
+       u_int32_t               key;
+       u_int32_t               affinity_mask;
+       u_int32_t               config_data_len;
+       u_int32_t               id_len;
+       char                    *id;
+} arc_config_t;
+
+typedef enum arc_status
+{
+       arc_ESUCCESS,                   /* Success                   */
+       arc_E2BIG,                      /* Arg list too long         */
+       arc_EACCES,                     /* No such file or directory */
+       arc_EAGAIN,                     /* Try again                 */
+       arc_EBADF,                      /* Bad file number           */
+       arc_EBUSY,                      /* Device or resource busy   */
+       arc_EFAULT,                     /* Bad address               */
+       arc_EINVAL,                     /* Invalid argument          */
+       arc_EIO,                        /* I/O error                 */
+       arc_EISDIR,                     /* Is a directory            */
+       arc_EMFILE,                     /* Too many open files       */
+       arc_EMLINK,                     /* Too many links            */
+       arc_ENAMETOOLONG,               /* File name too long        */
+       arc_ENODEV,                     /* No such device            */
+       arc_ENOENT,                     /* No such file or directory */
+       arc_ENOEXEC,                    /* Exec format error         */
+       arc_ENOMEM,                     /* Out of memory             */
+       arc_ENOSPC,                     /* No space left on device   */
+       arc_ENOTDIR,                    /* Not a directory           */
+       arc_ENOTTY,                     /* Not a typewriter          */
+       arc_ENXIO,                      /* No such device or address */
+       arc_EROFS,                      /* Read-only file system     */
+} arc_status_t;
+
+typedef caddr_t arc_mem_t; /* XXX */
+typedef caddr_t arc_time_t; /* XXX */
+typedef caddr_t arc_dsp_stat_t; /* XXX */
+typedef caddr_t arc_dirent_t; /* XXX */
+typedef u_int32_t arc_open_mode_t; /* XXX */
+typedef u_int32_t arc_seek_mode_t; /* XXX */
+typedef u_int32_t arc_mount_t; /* XXX */
+
+typedef struct arc_calls
+{
+       arc_status_t (*load)(           /* Load 1 */
+               char *,                 /* Image to load */
+               u_int32_t,              /* top address */
+               u_int32_t *,            /* Entry address */
+               u_int32_t *);           /* Low address */
+
+       arc_status_t (*invoke)(         /* Invoke 2 */
+               u_int32_t,              /* Entry Address */
+               u_int32_t,              /* Stack Address */
+               u_int32_t,              /* Argc */
+               char **,                /* argv */
+               char **);               /* envp */
+
+       arc_status_t (*execute)(        /* Execute 3 */
+               char *,                 /* Image path */
+               u_int32_t,              /* Argc */
+               char **,                /* argv */
+               char **);               /* envp */
+
+       volatile void (*halt)(void);    /* Halt 4 */
+
+       volatile void (*power_down)(void); /* PowerDown 5 */
+
+       volatile void (*restart)(void); /* Restart 6 */
+
+       volatile void (*reboot)(void);  /* Reboot 7 */
+
+       volatile void (*enter_interactive_mode)(void); /* EnterInteractiveMode 8 */
+
+       volatile void (*return_from_main)(void); /* ReturnFromMain 9 */
+
+       arc_config_t *(*get_peer)(      /* GetPeer 10 */
+               arc_config_t *);        /* Component */
+
+       arc_config_t *(*get_child)(     /* GetChild 11 */
+               arc_config_t *);        /* Component */
+
+       arc_config_t *(*get_parent)(    /* GetParent 12 */
+               arc_config_t *);        /* Component */
+
+       arc_status_t (*get_config_data)( /* GetConfigurationData 13 */
+               caddr_t,                /* Configuration Data */
+               arc_config_t *);        /* Component */
+
+       arc_config_t *(*add_child)(     /* AddChild 14 */
+               arc_config_t *,         /* Component */
+               arc_config_t *);        /* New Component */
+
+       arc_status_t (*delete_component)( /* DeleteComponent 15 */
+               arc_config_t *);        /* Component */
+
+       arc_config_t *(*get_component)( /* GetComponent 16 */
+               char *);                /* Path */
+
+       arc_status_t (*save_config)(void); /* SaveConfiguration 17 */
+
+       arc_sid_t *(*get_system_id)(void); /* GetSystemId 18 */
+
+       arc_mem_t *(*get_memory_descriptor)( /* GetMemoryDescriptor 19 */
+               arc_mem_t *);           /* MemoryDescriptor */
+
+       void (*signal)(                 /* Signal 20 */
+               u_int32_t,              /* Signal number */
+/**/           caddr_t);               /* Handler */
+
+       arc_time_t *(*get_time)(void);  /* GetTime 21 */
+
+       u_int32_t (*get_relative_time)(void); /* GetRelativeTime 22 */
+
+       arc_status_t (*get_dir_entry)(  /* GetDirectoryEntry 23 */
+               u_int32_t,              /* FileId */
+               arc_dirent_t *,         /* Directory entry */
+               u_int32_t,              /* Length */
+               u_int32_t *);           /* Count */
+
+       arc_status_t (*open)(           /* Open 24 */
+               char *,                 /* Path */
+               arc_open_mode_t,        /* Open mode */
+               u_int32_t *);           /* FileId */
+
+       arc_status_t (*close)(          /* Close 25 */
+               u_int32_t);             /* FileId */
+
+       arc_status_t (*read)(           /* Read 26 */
+               u_int32_t,              /* FileId */
+               caddr_t,                /* Buffer */
+               u_int32_t,              /* Length */
+               u_int32_t *);           /* Count */
+
+       arc_status_t (*get_read_status)( /* GetReadStatus 27 */
+               u_int32_t);             /* FileId */
+
+       arc_status_t (*write)(          /* Write 28 */
+               u_int32_t,              /* FileId */
+               caddr_t,                /* Buffer */
+               u_int32_t,              /* Length */
+               u_int32_t *);           /* Count */
+
+       arc_status_t (*seek)(           /* Seek 29 */
+               u_int32_t,              /* FileId */
+               int64_t *,              /* Offset */
+               arc_seek_mode_t);       /* Mode */
+
+       arc_status_t (*mount)(          /* Mount 30 */
+               char *,                 /* Path */
+               arc_mount_t);           /* Operation */
+
+       char *(*getenv)(                        /* GetEnvironmentVariable 31 */
+               char *);                /* Variable */
+
+       arc_status_t (*putenv)(         /* SetEnvironmentVariable 32 */
+               char *,                 /* Variable */
+               char *);                /* Value */
+
+       arc_status_t (*get_file_info)();        /* GetFileInformation 33 */
+
+       arc_status_t (*set_file_info)();        /* SetFileInformation 34 */
+
+       void (*flush_all_caches)(void); /* FlushAllCaches 35 */
+
+       arc_status_t (*test_unicode)(   /* TestUnicodeCharacter 36 */
+               u_int32_t,              /* FileId */
+               u_int16_t);             /* UnicodeCharacter */
+
+       arc_dsp_stat_t *(*get_display_status)( /* GetDisplayStatus 37 */
+               u_int32_t);             /* FileId */
+} arc_calls_t;
+
+#define ARC_PARAM_BLK_MAGIC    0x41524353
+
+typedef struct arc_param_blk 
+{
+       u_int32_t       magic;          /* Magic Number */
+       u_int32_t       length;         /* Length of parameter block */
+       u_int16_t       version;        /* ?? */
+       u_int16_t       revision;       /* ?? */
+/**/   caddr_t         restart_block;  /* ?? */
+/**/   caddr_t         debug_block;    /* Debugging info -- unused */
+/**/   caddr_t         general_exp_vect; /* ?? */
+/**/   caddr_t         tlb_miss_exp_vect; /* ?? */
+       u_int32_t       firmware_length; /* Size of Firmware jumptable in bytes */
+       arc_calls_t     *firmware_vect; /* Firmware jumptable */
+       u_int32_t       vendor_length;  /* Size of Vendor specific jumptable */
+/**/   caddr_t         vendor_vect;    /* Vendor specific jumptable */
+       u_int32_t       adapter_count;  /* ?? */
+       u_int32_t       adapter0_type;  /* ?? */
+       u_int32_t       adapter0_length; /* ?? */
+/**/   caddr_t         adapter0_vect;  /* ?? */
+} arc_param_blk_t;
+
+#define ArcBiosBase ((arc_param_blk_t *) 0x80001000)
+#define ArcBios (ArcBiosBase->firmware_vect)
+
+extern void arcbios_ident(void);
index 3c6d95d..bc16dfd 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: machdep.c,v 1.10 1996/09/05 08:04:14 pefo Exp $       */
+/*     $OpenBSD: machdep.c,v 1.11 1996/09/06 04:57:52 imp Exp $        */
 /*
  * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
@@ -38,7 +38,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#)machdep.c     8.3 (Berkeley) 1/12/94
- *      $Id: machdep.c,v 1.10 1996/09/05 08:04:14 pefo Exp $
+ *      $Id: machdep.c,v 1.11 1996/09/06 04:57:52 imp Exp $
  */
 
 /* from: Utah Hdr: machdep.c 1.63 91/04/24 */
@@ -90,6 +90,7 @@
 #include <dev/cons.h>
 
 #include <arc/arc/arctype.h>
+#include <arc/arc/arcbios.h>
 #include <arc/pica/pica.h>
 #include <arc/dti/desktech.h>
 
@@ -184,9 +185,8 @@ mips_init(argc, argv, code)
        v = (caddr_t)mips_round_page(end);
        bzero(edata, v - edata);
 
-       cputype = ACER_PICA_61; /* FIXME find systemtype */
-
-       cputype = DESKSTATION_TYNE; /* FIXME find systemtype */
+    /* Initialize the CPU type */
+    bios_ident();
 
        /*
         * Get config register now as mapped from BIOS since we are
index 24bc6c1..d7b2d12 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: files.arc,v 1.2 1996/06/24 20:05:35 pefo Exp $
+#      $OpenBSD: files.arc,v 1.3 1996/09/06 04:57:50 imp Exp $
 #
 # maxpartitions must be first item in files.${ARCH}
 #
@@ -23,6 +23,8 @@ file  arch/arc/arc/sys_machdep.c
 file   arch/arc/arc/trap.c
 file   arch/arc/arc/vm_machdep.c
 
+file   arch/arc/arc/arcbios.c
+
 #
 #      Machine-independent ATAPI drivers 
 #