Add a first bit of a framework. Builds the following parts, in
accordance to the newboot document: * reset vector (16 bytes) * vpd (240bytes) * boot block (8k - 256b) * lar archive (256-8 k) The boot block is kind of simple, still. It enables pmode, car, and starts looking for an initram module in the lar archive. Note: This doesnt do much at the moment, as gas seems to produce buggy code in init.S. Take this as a suggestion of how it might work and please provide patches fixing it and bringing it into shape. Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Ronald G. Minnich <rminnich@gmail.com> git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@62 f3766cd6-281f-0410-b1cd-43a5c92072e9
This commit is contained in:
parent
e388149797
commit
c275218a89
25 changed files with 1627 additions and 496 deletions
130
include/string.h
Normal file
130
include/string.h
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
#ifndef STRING_H
|
||||
#define STRING_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
extern void *memcpy(void *dest, const void *src, size_t n);
|
||||
extern void *memmove(void *dest, const void *src, size_t n);
|
||||
extern void *memset(void *s, int c, size_t n);
|
||||
extern int memcmp(const void *s1, const void *s2, size_t n);
|
||||
|
||||
extern int sprintf(char * buf, const char *fmt, ...);
|
||||
|
||||
// yes, linux has fancy ones. We don't care. This stuff gets used
|
||||
// hardly at all. And the pain of including those files is just too high.
|
||||
|
||||
//extern inline void strcpy(char *dst, char *src) {while (*src) *dst++ = *src++;}
|
||||
|
||||
//extern inline int strlen(char *src) { int i = 0; while (*src++) i++; return i;}
|
||||
|
||||
static inline size_t strnlen(const char *src, size_t max)
|
||||
{
|
||||
size_t i = 0;
|
||||
while((*src++) && (i < max)) {
|
||||
i++;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
static inline size_t strlen(const char *src)
|
||||
{
|
||||
size_t i = 0;
|
||||
while(*src++) {
|
||||
i++;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
static inline char *strchr(const char *s, int c)
|
||||
{
|
||||
for (; *s; s++) {
|
||||
if (*s == c)
|
||||
return (char *) s;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline char *strdup(const char *s)
|
||||
{
|
||||
size_t sz = strlen(s) + 1;
|
||||
char *d = malloc(sz);
|
||||
memcpy(d, s, sz);
|
||||
return d;
|
||||
}
|
||||
|
||||
static inline char *strncpy(char *to, const char *from, int count)
|
||||
{
|
||||
register char *ret = to;
|
||||
|
||||
while (count > 0) {
|
||||
count--;
|
||||
if ((*to++ = *from++) == '\0')
|
||||
break;
|
||||
}
|
||||
|
||||
while (count > 0) {
|
||||
count--;
|
||||
*to++ = '\0';
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int strcmp(const char *s1, const char *s2)
|
||||
{
|
||||
int r;
|
||||
|
||||
while ((r = (*s1 - *s2)) == 0 && *s1) {
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline int isspace(int c)
|
||||
{
|
||||
switch (c) {
|
||||
case ' ': case '\f': case '\n':
|
||||
case '\r': case '\t': case '\v':
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int isdigit(int c)
|
||||
{
|
||||
return (c >= '0' && c <= '9');
|
||||
}
|
||||
|
||||
static inline int isxdigit(int c)
|
||||
{
|
||||
return ((c >= '0' && c <= '9') ||
|
||||
(c >= 'a' && c <= 'f') ||
|
||||
(c >= 'A' && c <= 'F'));
|
||||
}
|
||||
|
||||
static inline int isupper(int c)
|
||||
{
|
||||
return (c >= 'A' && c <= 'Z');
|
||||
}
|
||||
|
||||
static inline int islower(int c)
|
||||
{
|
||||
return (c >= 'a' && c <= 'z');
|
||||
}
|
||||
|
||||
static inline int toupper(int c)
|
||||
{
|
||||
if (islower(c))
|
||||
c -= 'a'-'A';
|
||||
return c;
|
||||
}
|
||||
|
||||
static inline int tolower(int c)
|
||||
{
|
||||
if (isupper(c))
|
||||
c -= 'A'-'a';
|
||||
return c;
|
||||
}
|
||||
#endif /* STRING_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue