diff options
Diffstat (limited to 'api_examples')
| -rw-r--r-- | api_examples/demo.c | 8 | ||||
| -rw-r--r-- | api_examples/glue.c | 58 | ||||
| -rw-r--r-- | api_examples/glue.h | 16 | 
3 files changed, 38 insertions, 44 deletions
| diff --git a/api_examples/demo.c b/api_examples/demo.c index 2510ed886..df9c4bd8b 100644 --- a/api_examples/demo.c +++ b/api_examples/demo.c @@ -43,12 +43,11 @@ static char buf[BUF_SZ];  int main(int argc, char *argv[])  { -	int rv = 0; -	int h, i, j; -	int devs_no; +	int rv = 0, h, i, j, devs_no;  	struct api_signature *sig = NULL;  	ulong start, now;  	struct device_info *di; +	lbasize_t rlen;  	if (!api_search_sig(&sig))  		return -1; @@ -96,7 +95,6 @@ int main(int argc, char *argv[])  	if (devs_no == 0)  		return -1; -  	printf("\n*** Show devices ***\n");  	for (i = 0; i < devs_no; i++) {  		test_dump_di(i); @@ -133,7 +131,7 @@ int main(int argc, char *argv[])  		if ((rv = ub_dev_open(i)) != 0)  			errf("open device %d error %d\n", i, rv); -		else if ((rv = ub_dev_read(i, buf, 1, 0)) != 0) +		else if ((rv = ub_dev_read(i, buf, 1, 0, &rlen)) != 0)  			errf("could not read from device %d, error %d\n", i, rv);  		else {  			printf("Sector 0 dump (512B):\n"); diff --git a/api_examples/glue.c b/api_examples/glue.c index 200b16373..eff6a7e62 100644 --- a/api_examples/glue.c +++ b/api_examples/glue.c @@ -1,7 +1,5 @@  /* - * (C) Copyright 2007 Semihalf - * - * Written by: Rafal Jaworowski <raj@semihalf.com> + * (C) Copyright 2007-2008 Semihalf, Rafal Jaworowski <raj@semihalf.com>   *   * See file CREDITS for list of people who contributed to this   * project. @@ -57,8 +55,8 @@ static int valid_sig(struct api_signature *sig)   *   * returns 1/0 depending on found/not found result   */ -int api_search_sig(struct api_signature **sig) { - +int api_search_sig(struct api_signature **sig) +{  	unsigned char *sp;  	uint32_t search_start = 0;  	uint32_t search_end = 0; @@ -133,8 +131,7 @@ void ub_reset(void)  	syscall(API_RESET, NULL);  } -#define MR_MAX 5 -static struct mem_region mr[MR_MAX]; +static struct mem_region mr[UB_MAX_MR];  static struct sys_info si;  struct sys_info * ub_get_sys_info(void) @@ -143,7 +140,7 @@ struct sys_info * ub_get_sys_info(void)  	memset(&si, 0, sizeof(struct sys_info));  	si.mr = mr; -	si.mr_no = MR_MAX; +	si.mr_no = UB_MAX_MR;  	memset(&mr, 0, sizeof(mr));  	if (!syscall(API_GET_SYS_INFO, &err, (u_int32_t)&si)) @@ -178,17 +175,15 @@ unsigned long ub_get_timer(unsigned long base)   *   * devices   * - * Devices are identified by handles: numbers 0, 1, 2, ..., MAX_DEVS-1 + * Devices are identified by handles: numbers 0, 1, 2, ..., UB_MAX_DEV-1   *   ***************************************************************************/ -#define MAX_DEVS 6 - -static struct device_info devices[MAX_DEVS]; +static struct device_info devices[UB_MAX_DEV];  struct device_info * ub_dev_get(int i)  { -	return ((i < 0 || i >= MAX_DEVS) ? NULL : &devices[i]); +	return ((i < 0 || i >= UB_MAX_DEV) ? NULL : &devices[i]);  }  /* @@ -202,7 +197,7 @@ int ub_dev_enum(void)  	struct device_info *di;  	int n = 0; -	memset(&devices, 0, sizeof(struct device_info) * MAX_DEVS); +	memset(&devices, 0, sizeof(struct device_info) * UB_MAX_DEV);  	di = &devices[0];  	if (!syscall(API_DEV_ENUM, NULL, di)) @@ -210,7 +205,7 @@ int ub_dev_enum(void)  	while (di->cookie != NULL) { -		if (++n >= MAX_DEVS) +		if (++n >= UB_MAX_DEV)  			break;  		/* take another device_info */ @@ -236,7 +231,7 @@ int ub_dev_open(int handle)  	struct device_info *di;  	int err = 0; -	if (handle < 0 || handle >= MAX_DEVS) +	if (handle < 0 || handle >= UB_MAX_DEV)  		return API_EINVAL;  	di = &devices[handle]; @@ -251,7 +246,7 @@ int ub_dev_close(int handle)  {  	struct device_info *di; -	if (handle < 0 || handle >= MAX_DEVS) +	if (handle < 0 || handle >= UB_MAX_DEV)  		return API_EINVAL;  	di = &devices[handle]; @@ -272,7 +267,7 @@ int ub_dev_close(int handle)   */  static int dev_valid(int handle)  { -	if (handle < 0 || handle >= MAX_DEVS) +	if (handle < 0 || handle >= UB_MAX_DEV)  		return 0;  	if (devices[handle].state != DEV_STA_OPEN) @@ -292,7 +287,8 @@ static int dev_stor_valid(int handle)  	return 1;  } -int ub_dev_read(int handle, void *buf, lbasize_t len, lbastart_t start) +int ub_dev_read(int handle, void *buf, lbasize_t len, lbastart_t start, +		lbasize_t *rlen)  {  	struct device_info *di;  	lbasize_t act_len; @@ -303,15 +299,12 @@ int ub_dev_read(int handle, void *buf, lbasize_t len, lbastart_t start)  	di = &devices[handle];  	if (!syscall(API_DEV_READ, &err, di, buf, &len, &start, &act_len)) -		return -1; - -	if (err) -		return err; +		return API_ESYSC; -	if (act_len != len) -		return API_EIO; +	if (!err && rlen) +		*rlen = act_len; -	return 0; +	return err;  }  static int dev_net_valid(int handle) @@ -325,7 +318,7 @@ static int dev_net_valid(int handle)  	return 1;  } -int ub_dev_recv(int handle, void *buf, int len) +int ub_dev_recv(int handle, void *buf, int len, int *rlen)  {  	struct device_info *di;  	int err = 0, act_len; @@ -335,12 +328,12 @@ int ub_dev_recv(int handle, void *buf, int len)  	di = &devices[handle];  	if (!syscall(API_DEV_READ, &err, di, buf, &len, &act_len)) -		return -1; +		return API_ESYSC; -	if (err) -		return -1; +	if (!err && rlen) +		*rlen = act_len; -	return act_len; +	 return (err);  }  int ub_dev_send(int handle, void *buf, int len) @@ -353,7 +346,7 @@ int ub_dev_send(int handle, void *buf, int len)  	di = &devices[handle];  	if (!syscall(API_DEV_WRITE, &err, di, buf, &len)) -		return -1; +		return API_ESYSC;  	return err;  } @@ -379,7 +372,6 @@ void ub_env_set(const char *name, char *value)  	syscall(API_ENV_SET, NULL, (uint32_t)name, (uint32_t)value);  } -  static char env_name[256];  const char * ub_env_enum(const char *last) diff --git a/api_examples/glue.h b/api_examples/glue.h index 0adb8b388..6bf47d07c 100644 --- a/api_examples/glue.h +++ b/api_examples/glue.h @@ -32,6 +32,9 @@  #define API_SEARCH_LEN		(3 * 1024 * 1024)	/* 3MB search range */ +#define UB_MAX_MR	5	/* max mem regions number */ +#define UB_MAX_DEV	6	/* max devices number */ +  extern void *syscall_ptr;  extern uint32_t search_hint; @@ -39,9 +42,10 @@ int	syscall(int, int *, ...);  int	api_search_sig(struct api_signature **sig);  /* - * ub_ library calls are part of the application, not U-Boot code!  They are - * front-end wrappers that are used by the consumer application: they prepare - * arguments for particular syscall and jump to the low level syscall() + * The ub_ library calls are part of the application, not U-Boot code!  They + * are front-end wrappers that are used by the consumer application: they + * prepare arguments for particular syscall and jump to the low level + * syscall()   */  /* console */ @@ -67,10 +71,10 @@ const char *	ub_env_enum(const char *last);  int			ub_dev_enum(void);  int			ub_dev_open(int handle);  int			ub_dev_close(int handle); -int			ub_dev_read(int handle, void *buf, -				lbasize_t len, lbastart_t start); +int			ub_dev_read(int handle, void *buf, lbasize_t len, +				lbastart_t start, lbasize_t *rlen);  int			ub_dev_send(int handle, void *buf, int len); -int			ub_dev_recv(int handle, void *buf, int len); +int			ub_dev_recv(int handle, void *buf, int len, int *rlen);  struct device_info *	ub_dev_get(int);  #endif /* _API_GLUE_H_ */ |