38,8 → 38,15 |
_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L, /* 224-239 */ |
_L,_L,_L,_L,_L,_L,_L,_P,_L,_L,_L,_L,_L,_L,_L,_L}; /* 240-255 */ |
|
__kernel_size_t strnlen(const char *s, __kernel_size_t count) |
{ |
const char *sc; |
|
for (sc = s; count-- && *sc != '\0'; ++sc) |
/* nothing */; |
return sc - s; |
} |
|
|
int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); |
|
struct resource ioport_resource = { |
246,146 → 253,9 |
return err; |
} |
|
void device_initialize(struct device *dev) |
{ |
kobject_init(&dev->kobj); |
INIT_LIST_HEAD(&dev->node); |
INIT_LIST_HEAD(&dev->children); |
INIT_LIST_HEAD(&dev->driver_list); |
INIT_LIST_HEAD(&dev->bus_list); |
} |
|
int device_add(struct device *dev) |
{ |
struct device * parent; |
int error; |
|
dev = get_device(dev); |
if (!dev || !strlen(dev->bus_id)) |
return -EINVAL; |
|
parent = get_device(dev->parent); |
|
pr_debug("DEV: registering device: ID = '%s'\n", dev->bus_id); |
|
/* first, register with generic layer. */ |
kobject_set_name(&dev->kobj,dev->bus_id); |
if (parent) |
dev->kobj.parent = &parent->kobj; |
|
if ((error = kobject_add(&dev->kobj))) |
goto Error; |
if (parent) |
list_add_tail(&dev->node,&parent->children); |
|
Done: |
put_device(dev); |
return error; |
Error: |
if (parent) |
put_device(parent); |
goto Done; |
} |
|
void device_del(struct device * dev) |
{ |
struct device * parent = dev->parent; |
|
if (parent) |
list_del_init(&dev->node); |
|
kobject_del(&dev->kobj); |
if (parent) |
put_device(parent); |
} |
|
#define to_drv(obj) container_of(obj,struct device_driver,kobj) |
|
struct device_driver * get_driver(struct device_driver * drv) |
{ |
return drv ? to_drv(kobject_get(&drv->kobj)) : NULL; |
} |
|
void put_driver(struct device_driver * drv) |
{ |
kobject_put(&drv->kobj); |
} |
|
void driver_unregister(struct device_driver * drv) |
{ |
} |
|
int driver_register(struct device_driver * drv) |
{ |
INIT_LIST_HEAD(&drv->devices); |
return 0; |
} |
|
#define to_dev(obj) container_of(obj,struct device,kobj) |
|
struct device * get_device(struct device * dev) |
{ |
return dev ? to_dev(kobject_get(&dev->kobj)) : NULL; |
} |
|
void put_device(struct device * dev) |
{ |
kobject_put(&dev->kobj); |
} |
|
int device_register(struct device *dev) |
{ |
return device_add(dev); |
} |
|
void device_unregister(struct device * dev) |
{ |
pr_debug("DEV: Unregistering device. ID = '%s'\n", dev->bus_id); |
device_del(dev); |
put_device(dev); |
} |
|
int bus_register(struct bus_type * bus) |
{ |
return 0; |
} |
|
int remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long phys_addr, unsigned long size, pgprot_t prot) |
{ return 0; } |
|
unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base) |
{ |
unsigned long result = 0,value; |
|
if (!base) { |
base = 10; |
if (*cp == '0') { |
base = 8; |
cp++; |
if ((*cp == 'x') && isxdigit(cp[1])) { |
cp++; |
base = 16; |
} |
} |
} |
while (isxdigit(*cp) && |
(value = isdigit(*cp) ? *cp-'0' : toupper(*cp)-'A'+10) < base) { |
result = result*base + value; |
cp++; |
} |
if (endp) |
*endp = (char *)cp; |
return result; |
} |
|
|
long simple_strtol(const char *cp,char **endp,unsigned int base) |
{ |
if(*cp=='-') |
return -simple_strtoul(cp+1,endp,base); |
return simple_strtoul(cp,endp,base); |
} |
|
void dump_stack(void) { } |
|
void panic(const char * fmt, ...) { |