#ifndef BIOS_H_
#define BIOS_H_

#include <inttypes.h>
#include <stddef.h>
#include <stdbool.h>

/*
 * When interfacing with assembler code we need to be sure how
 * arguments are passed in real mode.
 */
#define bioscall __attribute__((regparm(3)))

#ifndef __ASSEMBLER__

struct biosregs {
	uint32_t			eax;
	uint32_t			ebx;
	uint32_t			ecx;
	uint32_t			edx;
	uint32_t			esp;
	uint32_t			ebp;
	uint32_t			esi;
	uint32_t			edi;
	uint32_t			ds;
	uint32_t			es;
	uint32_t			fs;
	uint16_t			ip;
	uint16_t			cs;
	uint16_t			eflags;
} __attribute__((packed));

/*
 * BIOS32 is called via a far call, so eflags is pushed by our
 * entry point and lies below CS:EIP.  We do not include CS:EIP
 * at all in this struct.
 */
struct bios32regs {
	uint32_t			eax;
	uint32_t			ebx;
	uint32_t			ecx;
	uint32_t			edx;
	uint32_t			esp;
	uint32_t			ebp;
	uint32_t			esi;
	uint32_t			edi;
	uint32_t			ds;
	uint32_t			es;
	uint32_t			fs;
	uint32_t			eflags;
} __attribute__((packed));

extern bioscall void int10_handler(struct biosregs *regs);
extern bioscall void int15_handler(struct biosregs *regs);
extern bioscall void e820_query_map(struct biosregs *regs);
extern bioscall void pcibios_handler(struct bios32regs *regs);

extern void bios_intfake(void);
extern void bios_irq(void);
extern void bios_int10(void);
extern void bios_int15(void);
extern void bios32_entry(void);

extern uint32_t pic_base(void);

extern void setup_pci(void);
extern bool setup_hw(void);
extern bool setup_mmconfig(void);
extern void setup_mptable(void);
extern void extract_acpi(void);
extern void boot_from_fwcfg(void);

extern uint8_t max_bus;
extern uint16_t e820_seg;
extern uint32_t lowmem;

extern uint8_t stext;
extern uint8_t edata;
extern uint8_t sinit;
extern uint8_t einit;

#define ARRAY_SIZE(x)	(sizeof(x) / sizeof(x[0]))

static inline void __attribute__((noreturn)) panic(void)
{
	asm volatile("cli; hlt");
	for(;;);
}

#endif

#endif /* BIOS_H_ */
