1 /* 2 * Global definition of all the bootwrapper operations. 3 * 4 * Author: Mark A. Greer <mgreer@mvista.com> 5 * 6 * 2006 (c) MontaVista Software, Inc. This file is licensed under 7 * the terms of the GNU General Public License version 2. This program 8 * is licensed "as is" without any warranty of any kind, whether express 9 * or implied. 10 */ 11 #ifndef _PPC_BOOT_OPS_H_ 12 #define _PPC_BOOT_OPS_H_ 13 14 #include "types.h" 15 16 #define COMMAND_LINE_SIZE 512 17 #define MAX_PATH_LEN 256 18 #define MAX_PROP_LEN 256 /* What should this be? */ 19 20 /* Platform specific operations */ 21 struct platform_ops { 22 void (*fixups)(void); 23 void (*image_hdr)(const void *); 24 void * (*malloc)(u32 size); 25 void (*free)(void *ptr); 26 void * (*realloc)(void *ptr, unsigned long size); 27 void (*exit)(void); 28 }; 29 extern struct platform_ops platform_ops; 30 31 /* Device Tree operations */ 32 struct dt_ops { 33 void * (*finddevice)(const char *name); 34 int (*getprop)(const void *phandle, const char *name, void *buf, 35 const int buflen); 36 int (*setprop)(const void *phandle, const char *name, 37 const void *buf, const int buflen); 38 unsigned long (*finalize)(void); 39 }; 40 extern struct dt_ops dt_ops; 41 42 /* Console operations */ 43 struct console_ops { 44 int (*open)(void); 45 void (*write)(char *buf, int len); 46 void (*edit_cmdline)(char *buf, int len); 47 void (*close)(void); 48 void *data; 49 }; 50 extern struct console_ops console_ops; 51 52 /* Serial console operations */ 53 struct serial_console_data { 54 int (*open)(void); 55 void (*putc)(unsigned char c); 56 unsigned char (*getc)(void); 57 u8 (*tstc)(void); 58 void (*close)(void); 59 }; 60 61 int platform_init(void *promptr, char *dt_blob_start, char *dt_blob_end); 62 int ft_init(void *dt_blob, unsigned int max_size, unsigned int max_find_device); 63 int serial_console_init(void); 64 int ns16550_console_init(void *devp, struct serial_console_data *scdp); 65 void *simple_alloc_init(char *base, u32 heap_size, u32 granularity, 66 u32 max_allocs); 67 68 69 static inline void *finddevice(const char *name) 70 { 71 return (dt_ops.finddevice) ? dt_ops.finddevice(name) : NULL; 72 } 73 74 static inline int getprop(void *devp, const char *name, void *buf, int buflen) 75 { 76 return (dt_ops.getprop) ? dt_ops.getprop(devp, name, buf, buflen) : -1; 77 } 78 79 static inline int setprop(void *devp, const char *name, void *buf, int buflen) 80 { 81 return (dt_ops.setprop) ? dt_ops.setprop(devp, name, buf, buflen) : -1; 82 } 83 84 static inline void *malloc(u32 size) 85 { 86 return (platform_ops.malloc) ? platform_ops.malloc(size) : NULL; 87 } 88 89 static inline void free(void *ptr) 90 { 91 if (platform_ops.free) 92 platform_ops.free(ptr); 93 } 94 95 static inline void exit(void) 96 { 97 if (platform_ops.exit) 98 platform_ops.exit(); 99 for(;;); 100 } 101 102 #endif /* _PPC_BOOT_OPS_H_ */ 103