#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,
arc_TcAdapter,
arc_ScsiAdapter,
arc_DtiAdapter,
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,
arc_DiskPeripheral,
arc_FloppyDiskPeripheral,
arc_TapePeripheral,
arc_ModemPeripheral,
arc_MonitorPeripheral,
arc_PrinterPeripheral,
arc_PointerPeripheral,
arc_KeyboardPeripheral,
arc_TerminalPeripheral,
arc_OtherPeripheral,
arc_LinePeripheral,
arc_NetworkPeripheral,
arc_SystemMemory
} arc_config_type_t;
typedef u_char arc_dev_flags_t;
typedef struct arc_config
{
arc_config_class_t class;
arc_config_type_t type;
arc_dev_flags_t flags;
uint16_t version;
uint16_t revision;
uint32_t key;
uint32_t affinity_mask;
uint32_t config_data_len;
uint32_t id_len;
char *id;
} arc_config_t;
typedef enum arc_status
{
arc_ESUCCESS,
arc_E2BIG,
arc_EACCES,
arc_EAGAIN,
arc_EBADF,
arc_EBUSY,
arc_EFAULT,
arc_EINVAL,
arc_EIO,
arc_EISDIR,
arc_EMFILE,
arc_EMLINK,
arc_ENAMETOOLONG,
arc_ENODEV,
arc_ENOENT,
arc_ENOEXEC,
arc_ENOMEM,
arc_ENOSPC,
arc_ENOTDIR,
arc_ENOTTY,
arc_ENXIO,
arc_EROFS,
} arc_status_t;
#ifdef arc
typedef enum {
ExeceptionBlock,
SystemParameterBlock,
FreeMemory,
BadMemory,
LoadedProgram,
FirmwareTemporary,
FirmwarePermanent,
FreeContigous
} MEMORYTYPE;
#endif
#ifdef sgi
typedef enum {
ExeceptionBlock,
SystemParameterBlock,
FreeContigous,
FreeMemory,
BadMemory,
LoadedProgram,
FirmwareTemporary,
FirmwarePermanent,
} MEMORYTYPE;
#endif
typedef struct arc_mem {
MEMORYTYPE Type;
uint32_t BasePage;
uint32_t PageCount;
} arc_mem_t;
typedef void *arc_time_t;
typedef struct arc_dsp_stat {
uint16_t CursorXPosition;
uint16_t CursorYPosition;
uint16_t CursorMaxXPosition;
uint16_t CursorMaxYPosition;
u_char ForegroundColor;
u_char BackgroundColor;
u_char HighIntensity;
u_char Underscored;
u_char ReverseVideo;
} arc_dsp_stat_t;
typedef void *arc_dirent_t;
typedef uint32_t arc_open_mode_t;
typedef uint32_t arc_seek_mode_t;
typedef uint32_t arc_mount_t;
typedef struct arc_calls
{
arc_status_t (*load)(
char *,
uint32_t,
uint32_t *,
uint32_t *);
arc_status_t (*invoke)(
uint32_t,
uint32_t,
uint32_t,
char **,
char **);
arc_status_t (*execute)(
char *,
uint32_t,
char **,
char **);
void (*halt)(void)
__attribute__((__noreturn__));
void (*power_down)(void)
__attribute__((__noreturn__));
void (*restart)(void)
__attribute__((__noreturn__));
void (*reboot)(void)
__attribute__((__noreturn__));
void (*enter_interactive_mode)(void)
__attribute__((__noreturn__));
void (*return_from_main)(void)
__attribute__((__noreturn__));
arc_config_t *(*get_peer)(
arc_config_t *);
arc_config_t *(*get_child)(
arc_config_t *);
arc_config_t *(*get_parent)(
arc_config_t *);
arc_status_t (*get_config_data)(
void *,
arc_config_t *);
arc_config_t *(*add_child)(
arc_config_t *,
arc_config_t *);
arc_status_t (*delete_component)(
arc_config_t *);
arc_config_t *(*get_component)(
char *);
arc_status_t (*save_config)(void);
arc_sid_t *(*get_system_id)(void);
arc_mem_t *(*get_memory_descriptor)(
arc_mem_t *);
#ifdef arc
void (*signal)(
uint32_t,
void *);
#endif
#ifdef sgi
void *unused;
#endif
arc_time_t *(*get_time)(void);
uint32_t (*get_relative_time)(void);
arc_status_t (*get_dir_entry)(
uint32_t,
arc_dirent_t *,
uint32_t,
uint32_t *);
arc_status_t (*open)(
char *,
arc_open_mode_t,
uint32_t *);
arc_status_t (*close)(
uint32_t);
arc_status_t (*read)(
uint32_t,
void *,
uint32_t,
uint32_t *);
arc_status_t (*get_read_status)(
uint32_t);
arc_status_t (*write)(
uint32_t,
void *,
uint32_t,
uint32_t *);
arc_status_t (*seek)(
uint32_t,
int64_t *,
arc_seek_mode_t);
arc_status_t (*mount)(
char *,
arc_mount_t);
const char *(*getenv)(
const char *);
arc_status_t (*putenv)(
char *,
char *);
arc_status_t (*get_file_info)(void);
arc_status_t (*set_file_info)(void);
void (*flush_all_caches)(void);
#ifdef arc
arc_status_t (*test_unicode)(
uint32_t,
uint16_t);
arc_dsp_stat_t *(*get_display_status)(
uint32_t);
#endif
} arc_calls_t;
#define ARC_PARAM_BLK_MAGIC 0x53435241
#define ARC_PARAM_BLK_MAGIC_BUG 0x41524353
typedef struct arc_param_blk
{
uint32_t magic;
uint32_t length;
uint16_t version;
uint16_t revision;
void * restart_block;
void * debug_block;
void * general_exp_vect;
void * tlb_miss_exp_vect;
uint32_t firmware_length;
arc_calls_t *firmware_vect;
uint32_t vendor_length;
void * vendor_vect;
uint32_t adapter_count;
uint32_t adapter0_type;
uint32_t adapter0_length;
void * adapter0_vect;
} arc_param_blk_t;
#define ArcBiosBase ((arc_param_blk_t *) 0x80001000)
#define ArcBios (ArcBiosBase->firmware_vect)
int bios_ident(void);
void bios_init_console(void);
int bios_configure_memory(int *, phys_ram_seg_t *, int *);
void bios_save_info(void);
#ifdef arc
void bios_display_info(int *, int *, int *, int *);
#endif
extern char arc_vendor_id[sizeof(((arc_sid_t *)0)->vendor) + 1];
extern unsigned char arc_product_id[sizeof(((arc_sid_t *)0)->prodid)];
extern char arc_id[64 + 1];
extern char arc_displayc_id[64 + 1];
extern arc_dsp_stat_t arc_displayinfo;
extern int arc_cpu_l2cache_size;