/* OpenProm defines mainly taken from linux kernel header files
 *
 * openprom.h:  Prom structures and defines for access to the OPENBOOT
 *              prom routines and data areas.
 *
 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
 * Copyright (C) 2007 Daniel Hellstrom (daniel@gaisler.com)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 *
 */

#ifndef __SPARC_OPENPROM_H__
#define __SPARC_OPENPROM_H__

/* Empirical constants... */
#define	LINUX_OPPROM_MAGIC      0x10010407

#ifndef __ASSEMBLY__
/* V0 prom device operations. */
struct linux_dev_v0_funcs {
	int (*v0_devopen) (char *device_str);
	int (*v0_devclose) (int dev_desc);
	int (*v0_rdblkdev) (int dev_desc, int num_blks, int blk_st, char *buf);
	int (*v0_wrblkdev) (int dev_desc, int num_blks, int blk_st, char *buf);
	int (*v0_wrnetdev) (int dev_desc, int num_bytes, char *buf);
	int (*v0_rdnetdev) (int dev_desc, int num_bytes, char *buf);
	int (*v0_rdchardev) (int dev_desc, int num_bytes, int dummy, char *buf);
	int (*v0_wrchardev) (int dev_desc, int num_bytes, int dummy, char *buf);
	int (*v0_seekdev) (int dev_desc, long logical_offst, int from);
};

/* V2 and later prom device operations. */
struct linux_dev_v2_funcs {
	int (*v2_inst2pkg) (int d);	/* Convert ihandle to phandle */
	char *(*v2_dumb_mem_alloc) (char *va, unsigned sz);
	void (*v2_dumb_mem_free) (char *va, unsigned sz);

	/* To map devices into virtual I/O space. */
	char *(*v2_dumb_mmap) (char *virta, int which_io, unsigned paddr,
			       unsigned sz);
	void (*v2_dumb_munmap) (char *virta, unsigned size);

	int (*v2_dev_open) (char *devpath);
	void (*v2_dev_close) (int d);
	int (*v2_dev_read) (int d, char *buf, int nbytes);
	int (*v2_dev_write) (int d, char *buf, int nbytes);
	int (*v2_dev_seek) (int d, int hi, int lo);

	/* Never issued (multistage load support) */
	void (*v2_wheee2) (void);
	void (*v2_wheee3) (void);
};

struct linux_mlist_v0 {
	struct linux_mlist_v0 *theres_more;
	char *start_adr;
	unsigned num_bytes;
};

struct linux_mem_v0 {
	struct linux_mlist_v0 **v0_totphys;
	struct linux_mlist_v0 **v0_prommap;
	struct linux_mlist_v0 **v0_available;	/* What we can use */
};

/* Arguments sent to the kernel from the boot prompt. */
struct linux_arguments_v0 {
	char *argv[8];
	char args[100];
	char boot_dev[2];
	int boot_dev_ctrl;
	int boot_dev_unit;
	int dev_partition;
	char *kernel_file_name;
	void *aieee1;		/* XXX */
};

/* V2 and up boot things. */
struct linux_bootargs_v2 {
	char **bootpath;
	char **bootargs;
	int *fd_stdin;
	int *fd_stdout;
};

/* The top level PROM vector. */
struct linux_romvec {
	/* Version numbers. */
	unsigned int pv_magic_cookie;
	unsigned int pv_romvers;
	unsigned int pv_plugin_revision;
	unsigned int pv_printrev;

	/* Version 0 memory descriptors. */
	struct linux_mem_v0 pv_v0mem;

	/* Node operations. */
	struct linux_nodeops *pv_nodeops;

	char **pv_bootstr;
	struct linux_dev_v0_funcs pv_v0devops;

	char *pv_stdin;
	char *pv_stdout;
#define	PROMDEV_KBD	0	/* input from keyboard */
#define	PROMDEV_SCREEN	0	/* output to screen */
#define	PROMDEV_TTYA	1	/* in/out to ttya */
#define	PROMDEV_TTYB	2	/* in/out to ttyb */

	/* Blocking getchar/putchar.  NOT REENTRANT! (grr) */
	int (*pv_getchar) (void);
	void (*pv_putchar) (int ch);

	/* Non-blocking variants. */
	int (*pv_nbgetchar) (void);
	int (*pv_nbputchar) (int ch);

	void (*pv_putstr) (char *str, int len);

	/* Miscellany. */
	void (*pv_reboot) (char *bootstr);
	void (*pv_printf) (__const__ char *fmt, ...);
	void (*pv_abort) (void);
	__volatile__ int *pv_ticks;
	void (*pv_halt) (void);
	void (**pv_synchook) (void);

	/* Evaluate a forth string, not different proto for V0 and V2->up. */
	union {
		void (*v0_eval) (int len, char *str);
		void (*v2_eval) (char *str);
	} pv_fortheval;

	struct linux_arguments_v0 **pv_v0bootargs;

	/* Get ether address. */
	unsigned int (*pv_enaddr) (int d, char *enaddr);

	struct linux_bootargs_v2 pv_v2bootargs;
	struct linux_dev_v2_funcs pv_v2devops;

	int filler[15];

	/* This one is sun4c/sun4 only. */
	void (*pv_setctxt) (int ctxt, char *va, int pmeg);

	/* Prom version 3 Multiprocessor routines. This stuff is crazy.
	 * No joke. Calling these when there is only one cpu probably
	 * crashes the machine, have to test this. :-)
	 */

	/* v3_cpustart() will start the cpu 'whichcpu' in mmu-context
	 * 'thiscontext' executing at address 'prog_counter'
	 */
	int (*v3_cpustart) (unsigned int whichcpu, int ctxtbl_ptr,
			    int thiscontext, char *prog_counter);

	/* v3_cpustop() will cause cpu 'whichcpu' to stop executing
	 * until a resume cpu call is made.
	 */
	int (*v3_cpustop) (unsigned int whichcpu);

	/* v3_cpuidle() will idle cpu 'whichcpu' until a stop or
	 * resume cpu call is made.
	 */
	int (*v3_cpuidle) (unsigned int whichcpu);

	/* v3_cpuresume() will resume processor 'whichcpu' executing
	 * starting with whatever 'pc' and 'npc' were left at the
	 * last 'idle' or 'stop' call.
	 */
	int (*v3_cpuresume) (unsigned int whichcpu);
};

/* Routines for traversing the prom device tree. */
struct linux_nodeops {
	int (*no_nextnode) (int node);
	int (*no_child) (int node);
	int (*no_proplen) (int node, char *name);
	int (*no_getprop) (int node, char *name, char *val);
	int (*no_setprop) (int node, char *name, char *val, int len);
	char *(*no_nextprop) (int node, char *name);
};

/* More fun PROM structures for device probing. */
#define PROMREG_MAX     16
#define PROMVADDR_MAX   16
#define PROMINTR_MAX    15

struct linux_prom_registers {
	unsigned int which_io;	/* is this in OBIO space? */
	unsigned int phys_addr;	/* The physical address of this register */
	unsigned int reg_size;	/* How many bytes does this register take up? */
};

struct linux_prom_irqs {
	int pri;		/* IRQ priority */
	int vector;		/* This is foobar, what does it do? */
};

/* Element of the "ranges" vector */
struct linux_prom_ranges {
	unsigned int ot_child_space;
	unsigned int ot_child_base;	/* Bus feels this */
	unsigned int ot_parent_space;
	unsigned int ot_parent_base;	/* CPU looks from here */
	unsigned int or_size;
};

/* Ranges and reg properties are a bit different for PCI. */
struct linux_prom_pci_registers {
	/*
	 * We don't know what information this field contain.
	 * We guess, PCI device function is in bits 15:8
	 * So, ...
	 */
	unsigned int which_io;	/* Let it be which_io */

	unsigned int phys_hi;
	unsigned int phys_lo;

	unsigned int size_hi;
	unsigned int size_lo;
};

struct linux_prom_pci_ranges {
	unsigned int child_phys_hi;	/* Only certain bits are encoded here. */
	unsigned int child_phys_mid;
	unsigned int child_phys_lo;

	unsigned int parent_phys_hi;
	unsigned int parent_phys_lo;

	unsigned int size_hi;
	unsigned int size_lo;
};

struct linux_prom_pci_assigned_addresses {
	unsigned int which_io;

	unsigned int phys_hi;
	unsigned int phys_lo;

	unsigned int size_hi;
	unsigned int size_lo;
};

struct linux_prom_ebus_ranges {
	unsigned int child_phys_hi;
	unsigned int child_phys_lo;

	unsigned int parent_phys_hi;
	unsigned int parent_phys_mid;
	unsigned int parent_phys_lo;

	unsigned int size;
};

/* Offset into the EEPROM where the id PROM is located on the 4c */
#define IDPROM_OFFSET  0x7d8

/* On sun4m; physical. */
/* MicroSPARC(-II) does not decode 31rd bit, but it works. */
#define IDPROM_OFFSET_M  0xfd8

struct idprom {
	unsigned char id_format;	/* Format identifier (always 0x01) */
	unsigned char id_machtype;	/* Machine type */
	unsigned char id_ethaddr[6];	/* Hardware ethernet address */
	long id_date;		/* Date of manufacture */
	unsigned int id_sernum:24;	/* Unique serial number */
	unsigned char id_cksum;	/* Checksum - xor of the data bytes */
	unsigned char reserved[16];
};

extern struct idprom *idprom;
extern void idprom_init(void);

#define IDPROM_SIZE  (sizeof(struct idprom))

#endif				/* !(__ASSEMBLY__) */

#endif
