summaryrefslogtreecommitdiffstats
path: root/sys/boot/uboot/lib/glue.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/boot/uboot/lib/glue.c')
-rw-r--r--sys/boot/uboot/lib/glue.c50
1 files changed, 22 insertions, 28 deletions
diff --git a/sys/boot/uboot/lib/glue.c b/sys/boot/uboot/lib/glue.c
index 0aca89c..ae5d1c0 100644
--- a/sys/boot/uboot/lib/glue.c
+++ b/sys/boot/uboot/lib/glue.c
@@ -216,9 +216,7 @@ 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 *
@@ -228,7 +226,7 @@ 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))
@@ -267,19 +265,17 @@ 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]);
}
/*
@@ -294,7 +290,7 @@ 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))
@@ -302,7 +298,7 @@ ub_dev_enum(void)
while (di->cookie != NULL) {
- if (++n >= MAX_DEVS)
+ if (++n >= UB_MAX_DEV)
break;
/* take another device_info */
@@ -330,7 +326,7 @@ 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];
@@ -345,7 +341,7 @@ 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];
@@ -367,7 +363,7 @@ 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)
@@ -390,7 +386,8 @@ dev_stor_valid(int handle)
}
int
-ub_dev_read(int handle, void *buf, lbasize_t len, lbastart_t start)
+ub_dev_read(int handle, void *buf, lbasize_t len, lbastart_t start,
+ lbasize_t *rlen)
{
struct device_info *di;
lbasize_t act_len;
@@ -401,15 +398,12 @@ 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);
+ return (API_ESYSC);
- if (err)
- return (err);
+ if (!err && rlen)
+ *rlen = act_len;
- if (act_len != len)
- return (API_EIO);
-
- return (0);
+ return (err);
}
static int
@@ -426,7 +420,7 @@ dev_net_valid(int handle)
}
int
-ub_dev_recv(int handle, void *buf, int len)
+ub_dev_recv(int handle, void *buf, int len, int *rlen)
{
struct device_info *di;
int err = 0, act_len;
@@ -436,12 +430,12 @@ 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 = act_len;
- return (act_len);
+ return (err);
}
int
@@ -455,7 +449,7 @@ 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);
}
OpenPOWER on IntegriCloud