root/arch/mips/include/asm/fw/arc/hinv.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * ARCS hardware/memory inventory/configuration and system ID definitions.
 */
#ifndef _ASM_ARC_HINV_H
#define _ASM_ARC_HINV_H

#include <asm/sgidefs.h>
#include <asm/fw/arc/types.h>

/* configuration query defines */
typedef enum configclass {
        SystemClass,
        ProcessorClass,
        CacheClass,
#ifndef _NT_PROM
        MemoryClass,
        AdapterClass,
        ControllerClass,
        PeripheralClass
#else   /* _NT_PROM */
        AdapterClass,
        ControllerClass,
        PeripheralClass,
        MemoryClass
#endif  /* _NT_PROM */
} CONFIGCLASS;

typedef enum configtype {
        ARC,
        CPU,
        FPU,
        PrimaryICache,
        PrimaryDCache,
        SecondaryICache,
        SecondaryDCache,
        SecondaryCache,
#ifndef _NT_PROM
        Memory,
#endif
        EISAAdapter,
        TCAdapter,
        SCSIAdapter,
        DTIAdapter,
        MultiFunctionAdapter,
        DiskController,
        TapeController,
        CDROMController,
        WORMController,
        SerialController,
        NetworkController,
        DisplayController,
        ParallelController,
        PointerController,
        KeyboardController,
        AudioController,
        OtherController,
        DiskPeripheral,
        FloppyDiskPeripheral,
        TapePeripheral,
        ModemPeripheral,
        MonitorPeripheral,
        PrinterPeripheral,
        PointerPeripheral,
        KeyboardPeripheral,
        TerminalPeripheral,
        LinePeripheral,
        NetworkPeripheral,
#ifdef  _NT_PROM
        Memory,
#endif
        OtherPeripheral,

        /* new stuff for IP30 */
        /* added without moving anything */
        /* except ANONYMOUS. */

        XTalkAdapter,
        PCIAdapter,
        GIOAdapter,
        TPUAdapter,

        Anonymous
} CONFIGTYPE;

typedef enum {
        Failed = 1,
        ReadOnly = 2,
        Removable = 4,
        ConsoleIn = 8,
        ConsoleOut = 16,
        Input = 32,
        Output = 64
} IDENTIFIERFLAG;

#ifndef NULL                    /* for GetChild(NULL); */
#define NULL    0
#endif

union key_u {
        struct {
#ifdef  _MIPSEB
                unsigned char  c_bsize;         /* block size in lines */
                unsigned char  c_lsize;         /* line size in bytes/tag */
                unsigned short c_size;          /* cache size in 4K pages */
#else   /* _MIPSEL */
                unsigned short c_size;          /* cache size in 4K pages */
                unsigned char  c_lsize;         /* line size in bytes/tag */
                unsigned char  c_bsize;         /* block size in lines */
#endif  /* _MIPSEL */
        } cache;
        ULONG FullKey;
};

#if _MIPS_SIM == _MIPS_SIM_ABI64
#define SGI_ARCS_VERS   64                      /* sgi 64-bit version */
#define SGI_ARCS_REV    0                       /* rev .00 */
#else
#define SGI_ARCS_VERS   1                       /* first version */
#define SGI_ARCS_REV    10                      /* rev .10, 3/04/92 */
#endif

typedef struct {
        CONFIGCLASS     Class;
        CONFIGTYPE      Type;
        IDENTIFIERFLAG  Flags;
        USHORT          Version;
        USHORT          Revision;
        ULONG           Key;
        ULONG           AffinityMask;
        ULONG           ConfigurationDataSize;
        ULONG           IdentifierLength;
        char            *Identifier;
} COMPONENT;

/* internal structure that holds pathname parsing data */
struct cfgdata {
        char *name;                     /* full name */
        int minlen;                     /* minimum length to match */
        CONFIGTYPE type;                /* type of token */
};

/* System ID */
typedef struct {
        CHAR VendorId[8];
        CHAR ProductId[8];
} SYSTEMID;

/* memory query functions */
typedef enum memorytype {
        ExceptionBlock,
        SPBPage,                        /* ARCS == SystemParameterBlock */
#ifndef _NT_PROM
        FreeContiguous,
        FreeMemory,
        BadMemory,
        LoadedProgram,
        FirmwareTemporary,
        FirmwarePermanent
#else   /* _NT_PROM */
        FreeMemory,
        BadMemory,
        LoadedProgram,
        FirmwareTemporary,
        FirmwarePermanent,
        FreeContiguous
#endif  /* _NT_PROM */
} MEMORYTYPE;

typedef struct {
        MEMORYTYPE      Type;
        LONG            BasePage;
        LONG            PageCount;
} MEMORYDESCRIPTOR;

#endif /* _ASM_ARC_HINV_H */