Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1782 → Rev 1783

/boot/trunk/genarch/ofw.h
36,7 → 36,23
 
#define MEMMAP_MAX_RECORDS 32
 
#define MAX_OFW_ARGS 12
 
typedef unsigned long ofw_arg_t;
typedef unsigned int ihandle;
typedef unsigned int phandle;
 
/** OpenFirmware command structure
*
*/
typedef struct {
const char *service; /**< Command name */
unsigned long nargs; /**< Number of in arguments */
unsigned long nret; /**< Number of out arguments */
ofw_arg_t args[MAX_OFW_ARGS]; /**< List of arguments */
} ofw_args_t;
 
typedef struct {
void *start;
unsigned int size;
} memzone_t;
48,7 → 64,7
} memmap_t;
 
typedef struct {
void *addr;
uint32_t addr;
unsigned int width;
unsigned int height;
unsigned int bpp;
56,7 → 72,7
} screen_t;
 
typedef struct {
void *addr;
uint32_t addr;
unsigned int size;
} keyboard_t;
 
72,9 → 88,7
unsigned int size_lo;
} pci_reg_t;
 
typedef unsigned long ofw_arg_t;
typedef unsigned int ihandle;
typedef unsigned int phandle;
extern uintptr_t ofw_cif;
 
extern phandle ofw_aliases;
 
84,7 → 98,10
extern int ofw_get_property(const phandle device, const char *name, const void *buf, const int buflen);
extern phandle ofw_find_device(const char *name);
 
extern int ofw(ofw_args_t *arg);
extern void *ofw_translate(const void *virt);
extern int ofw_translate_failed(ofw_arg_t flag);
extern void *ofw_claim(const void *virt, const int len);
extern int ofw_map(const void *phys, const void *virt, const int size, const int mode);
extern int ofw_memmap(memmap_t *map);
extern int ofw_screen(screen_t *screen);
/boot/trunk/genarch/ofw.c
31,22 → 31,8
#include <asm.h>
#include <types.h>
 
#define MAX_OFW_ARGS 10
uintptr_t ofw_cif;
 
/** OpenFirmware command structure
*
*/
typedef struct {
const char *service; /**< Command name */
unsigned long nargs; /**< Number of in arguments */
unsigned long nret; /**< Number of out arguments */
ofw_arg_t args[MAX_OFW_ARGS]; /**< List of arguments */
} ofw_args_t;
 
typedef void (*ofw_entry)(ofw_args_t *);
 
ofw_entry ofw;
 
phandle ofw_chosen;
ihandle ofw_stdout;
phandle ofw_root;
72,11 → 58,11
for (i = 0; i < nret; i++)
args.args[i + nargs] = 0;
ofw(&args);
(void) ofw(&args);
 
for (i = 1; i < nret; i++)
rets[i - 1] = args.args[i + nargs];
 
return args.args[nargs];
}
 
176,15 → 162,30
halt();
}
 
if (ofw_translate_failed(result[0]))
return NULL;
 
if (sizeof(unative_t) == 8)
shift = 32;
else
shift = 0;
return (void *) (((result[2]&0xffffffff)<<shift)|((result[3])&0xffffffff));
return (void *) ((result[2]<<shift)|result[3]);
}
 
void *ofw_claim(const void *virt, const int len)
{
ofw_arg_t retaddr;
int shift;
 
if (ofw_call("call-method", 5, 2, &retaddr, "claim", ofw_mmu, 0, len, virt) != 0) {
puts("Error: MMU method claim() failed, halting.\n");
halt();
}
 
return (void *) retaddr;
}
 
int ofw_map(const void *phys, const void *virt, const int size, const int mode)
{
uintptr_t phys_hi, phys_lo;