9 # include <linux/pci.h>
16 #include <asm/setup.h>
20 #define MB (1024*1024UL)
22 #define SIMPLE_MEMMAP 1
25 # define NUM_MEM_DESCS 4
27 # define NUM_MEM_DESCS 16
39 #define SECS_PER_HOUR (60 * 60)
40 #define SECS_PER_DAY (SECS_PER_HOUR * 24)
49 const unsigned short int __mon_yday[2][13] =
52 { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
54 { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
56 long int days, rem,
y;
57 const unsigned short int *
ip;
76 # define DIV(a, b) ((a) / (b) - ((a) % (b) < 0))
77 # define LEAPS_THRU_END_OF(y) (DIV (y, 4) - DIV (y, 100) + DIV (y, 400))
78 # define __isleap(year) \
79 ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
81 while (days < 0 || days >= (
__isleap (y) ? 366 : 365)) {
83 long int yg = y + days / 365 - (days % 365 < 0);
92 for (y = 11; days < (
long int) ip[y]; --
y)
104 #define BUILD_CMD(addr) ((0x80000000 | (addr)) & ~3)
106 #define REG_OFFSET(addr) (0x00000000000000FF & (addr))
107 #define DEVICE_FUNCTION(addr) (0x000000000000FF00 & (addr))
108 #define BUS_NUMBER(addr) (0x0000000000FF0000 & (addr))
113 #if defined(CONFIG_IA64_HP_SIM) || defined(CONFIG_IA64_GENERIC)
121 memset(tm, 0,
sizeof(*tm));
125 memset(tc, 0,
sizeof(*tc));
127 # error Not implemented yet...
135 #if defined(CONFIG_IA64_HP_SIM) || defined(CONFIG_IA64_GENERIC)
138 # error Not implemented yet...
143 efi_unimplemented (
void)
150 unsigned
long in3, unsigned
long in4, unsigned
long in5,
151 unsigned
long in6, unsigned
long in7)
239 unsigned long *pal_desc, *sal_desc;
245 # define MAKE_MD(typ, attr, start, end) \
247 md = efi_memmap + i++; \
250 md->phys_addr = start; \
252 md->num_pages = (end - start) >> 12; \
253 md->attribute = attr; \
256 memset(fw_mem, 0,
sizeof(fw_mem));
259 sal_desc = (
unsigned long *) &sal_emulator;
262 efi_systab = (
void *) cp; cp +=
sizeof(*efi_systab);
263 efi_runtime = (
void *) cp; cp +=
sizeof(*efi_runtime);
264 efi_tables = (
void *) cp; cp +=
sizeof(*efi_tables);
265 sal_systab = (
void *) cp; cp +=
sizeof(*sal_systab);
266 sal_ed = (
void *) cp; cp +=
sizeof(*sal_ed);
267 efi_memmap = (
void *) cp; cp +=
NUM_MEM_DESCS*
sizeof(*efi_memmap);
268 bp = (
void *) cp; cp +=
sizeof(*bp);
269 cmd_line = (
void *) cp;
274 memcpy(cmd_line, args, arglen);
278 cmd_line[arglen] =
'\0';
280 memset(efi_systab, 0,
sizeof(*efi_systab));
284 efi_systab->
fw_vendor =
__pa(
"H\0e\0w\0l\0e\0t\0t\0-\0P\0a\0c\0k\0a\0r\0d\0\0");
309 sal_systab->
size =
sizeof(*sal_systab);
314 #ifdef CONFIG_IA64_GENERIC
319 #ifdef CONFIG_IA64_HP_SIM
328 sal_ed->
gp =
__pa(sal_desc[1]);
330 for (cp = (
char *) sal_systab; cp < (
char *) efi_memmap; ++
cp)
342 MAKE_MD( 4, 0x9, 0x0000000000000000, 0x0000000000001000);
343 MAKE_MD( 7, 0x9, 0x0000000000001000, 0x000000000008a000);
344 MAKE_MD( 4, 0x9, 0x000000000008a000, 0x00000000000a0000);
345 MAKE_MD( 5, 0x8000000000000009, 0x00000000000c0000, 0x0000000000100000);
346 MAKE_MD( 7, 0x9, 0x0000000000100000, 0x0000000004400000);
347 MAKE_MD( 2, 0x9, 0x0000000004400000, 0x0000000004be5000);
348 MAKE_MD( 7, 0x9, 0x0000000004be5000, 0x000000007f77e000);
349 MAKE_MD( 6, 0x8000000000000009, 0x000000007f77e000, 0x000000007fb94000);
350 MAKE_MD( 6, 0x8000000000000009, 0x000000007fb94000, 0x000000007fb95000);
351 MAKE_MD( 6, 0x8000000000000009, 0x000000007fb95000, 0x000000007fc00000);
352 MAKE_MD(13, 0x8000000000000009, 0x000000007fc00000, 0x000000007fc3a000);
353 MAKE_MD( 7, 0x9, 0x000000007fc3a000, 0x000000007fea0000);
354 MAKE_MD( 5, 0x8000000000000009, 0x000000007fea0000, 0x000000007fea8000);
355 MAKE_MD( 7, 0x9, 0x000000007fea8000, 0x000000007feab000);
356 MAKE_MD( 5, 0x8000000000000009, 0x000000007feab000, 0x000000007ffff000);
357 MAKE_MD( 7, 0x9, 0x00000000ff400000, 0x0000000104000000);