Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
417345d8
Commit
417345d8
authored
Oct 29, 2007
by
Christoph Hellwig
Committed by
Ralf Baechle
Jan 29, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[MIPS] CFE: Make code remotely resemble Linux code.
Signed-off-by:
Ralf Baechle
<
ralf@linux-mips.org
>
parent
8b6c2324
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
167 additions
and
309 deletions
+167
-309
arch/mips/fw/cfe/cfe_api.c
arch/mips/fw/cfe/cfe_api.c
+57
-127
arch/mips/fw/cfe/cfe_api_int.h
arch/mips/fw/cfe/cfe_api_int.h
+91
-95
include/asm-mips/fw/cfe/cfe_api.h
include/asm-mips/fw/cfe/cfe_api.h
+12
-75
include/asm-mips/fw/cfe/cfe_error.h
include/asm-mips/fw/cfe/cfe_error.h
+7
-12
No files found.
arch/mips/fw/cfe/cfe_api.c
View file @
417345d8
...
...
@@ -16,19 +16,16 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
*********************************************************************
/*
*
* Broadcom Common Firmware Environment (CFE)
*
* Device Function stubs File: cfe_api.c
*
* This module contains device function stubs (small routines to
* call the standard "iocb" interface entry point to CFE).
* There should be one routine here per iocb function call.
*
* Authors: Mitch Lichtenberg, Chris Demetriou
*
********************************************************************* */
*/
#include <asm/fw/cfe/cfe_api.h>
#include "cfe_api_int.h"
...
...
@@ -37,12 +34,8 @@
#define XPTR_FROM_NATIVE(n) ((cfe_xptr_t) (intptr_t) (n))
#define NATIVE_FROM_XPTR(x) ((void *) (intptr_t) (x))
#ifdef CFE_API_IMPL_NAMESPACE
#define cfe_iocb_dispatch(a) __cfe_iocb_dispatch(a)
#endif
int
cfe_iocb_dispatch
(
cfe_xiocb_t
*
xiocb
);
int
cfe_iocb_dispatch
(
struct
cfe_xiocb
*
xiocb
);
#if defined(CFE_API_common) || defined(CFE_API_ALL)
/*
* Declare the dispatch function with args of "intptr_t".
* This makes sure whatever model we're compiling in
...
...
@@ -53,27 +46,25 @@ int cfe_iocb_dispatch(cfe_xiocb_t * xiocb);
*/
static
int
(
*
cfe_dispfunc
)
(
intptr_t
handle
,
intptr_t
xiocb
)
=
0
;
static
cfe_xuint_t
cfe_handle
=
0
;
static
u64
cfe_handle
=
0
;
int
cfe_init
(
cfe_xuint_t
handle
,
cfe_xuint_t
ept
)
int
cfe_init
(
u64
handle
,
u64
ept
)
{
cfe_dispfunc
=
NATIVE_FROM_XPTR
(
ept
);
cfe_handle
=
handle
;
return
0
;
}
int
cfe_iocb_dispatch
(
cfe_xiocb_t
*
xiocb
)
int
cfe_iocb_dispatch
(
struct
cfe_xiocb
*
xiocb
)
{
if
(
!
cfe_dispfunc
)
return
-
1
;
return
(
*
cfe_dispfunc
)
((
intptr_t
)
cfe_handle
,
(
intptr_t
)
xiocb
);
}
#endif
/* CFE_API_common || CFE_API_ALL */
#if defined(CFE_API_close) || defined(CFE_API_ALL)
int
cfe_close
(
int
handle
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_DEV_CLOSE
;
xiocb
.
xiocb_status
=
0
;
...
...
@@ -86,18 +77,16 @@ int cfe_close(int handle)
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_close || CFE_API_ALL */
#if defined(CFE_API_cpu_start) || defined(CFE_API_ALL)
int
cfe_cpu_start
(
int
cpu
,
void
(
*
fn
)
(
void
),
long
sp
,
long
gp
,
long
a1
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_FW_CPUCTL
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_cpuctl_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_cpuctl
);
xiocb
.
plist
.
xiocb_cpuctl
.
cpu_number
=
cpu
;
xiocb
.
plist
.
xiocb_cpuctl
.
cpu_command
=
CFE_CPU_CMD_START
;
xiocb
.
plist
.
xiocb_cpuctl
.
gp_val
=
gp
;
...
...
@@ -109,18 +98,16 @@ int cfe_cpu_start(int cpu, void (*fn) (void), long sp, long gp, long a1)
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_cpu_start || CFE_API_ALL */
#if defined(CFE_API_cpu_stop) || defined(CFE_API_ALL)
int
cfe_cpu_stop
(
int
cpu
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_FW_CPUCTL
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_cpuctl_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_cpuctl
);
xiocb
.
plist
.
xiocb_cpuctl
.
cpu_number
=
cpu
;
xiocb
.
plist
.
xiocb_cpuctl
.
cpu_command
=
CFE_CPU_CMD_STOP
;
...
...
@@ -128,18 +115,16 @@ int cfe_cpu_stop(int cpu)
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_cpu_stop || CFE_API_ALL */
#if defined(CFE_API_enumenv) || defined(CFE_API_ALL)
int
cfe_enumenv
(
int
idx
,
char
*
name
,
int
namelen
,
char
*
val
,
int
vallen
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_ENV_SET
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_envbuf_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_envbuf
);
xiocb
.
plist
.
xiocb_envbuf
.
enum_idx
=
idx
;
xiocb
.
plist
.
xiocb_envbuf
.
name_ptr
=
XPTR_FROM_NATIVE
(
name
);
xiocb
.
plist
.
xiocb_envbuf
.
name_length
=
namelen
;
...
...
@@ -150,20 +135,17 @@ int cfe_enumenv(int idx, char *name, int namelen, char *val, int vallen)
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_enumenv || CFE_API_ALL */
#if defined(CFE_API_enummem) || defined(CFE_API_ALL)
int
cfe_enummem
(
int
idx
,
int
flags
,
cfe_xuint_t
*
start
,
cfe_xuint_t
*
length
,
cfe_xuint_t
*
type
)
cfe_enummem
(
int
idx
,
int
flags
,
u64
*
start
,
u64
*
length
,
u64
*
type
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_FW_MEMENUM
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
flags
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_meminfo_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_meminfo
);
xiocb
.
plist
.
xiocb_meminfo
.
mi_idx
=
idx
;
cfe_iocb_dispatch
(
&
xiocb
);
...
...
@@ -177,30 +159,26 @@ cfe_enummem(int idx, int flags, cfe_xuint_t * start, cfe_xuint_t * length,
return
0
;
}
#endif
/* CFE_API_enummem || CFE_API_ALL */
#if defined(CFE_API_exit) || defined(CFE_API_ALL)
int
cfe_exit
(
int
warm
,
int
status
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_FW_RESTART
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
warm
?
CFE_FLG_WARMSTART
:
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_exitstat_
t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_exitsta
t
);
xiocb
.
plist
.
xiocb_exitstat
.
status
=
status
;
cfe_iocb_dispatch
(
&
xiocb
);
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_exit || CFE_API_ALL */
#if defined(CFE_API_flushcache) || defined(CFE_API_ALL)
int
cfe_flushcache
(
int
flg
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_FW_FLUSHCACHE
;
xiocb
.
xiocb_status
=
0
;
...
...
@@ -212,34 +190,30 @@ int cfe_flushcache(int flg)
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_flushcache || CFE_API_ALL */
#if defined(CFE_API_getdevinfo) || defined(CFE_API_ALL)
int
cfe_getdevinfo
(
char
*
name
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_DEV_GETINFO
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_buffer_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_buffer
);
xiocb
.
plist
.
xiocb_buffer
.
buf_offset
=
0
;
xiocb
.
plist
.
xiocb_buffer
.
buf_ptr
=
XPTR_FROM_NATIVE
(
name
);
xiocb
.
plist
.
xiocb_buffer
.
buf_length
=
cfe_
strlen
(
name
);
xiocb
.
plist
.
xiocb_buffer
.
buf_length
=
strlen
(
name
);
cfe_iocb_dispatch
(
&
xiocb
);
if
(
xiocb
.
xiocb_status
<
0
)
return
xiocb
.
xiocb_status
;
return
xiocb
.
plist
.
xiocb_buffer
.
buf_
devflags
;
return
xiocb
.
plist
.
xiocb_buffer
.
buf_
ioctlcmd
;
}
#endif
/* CFE_API_getdevinfo || CFE_API_ALL */
#if defined(CFE_API_getenv) || defined(CFE_API_ALL)
int
cfe_getenv
(
char
*
name
,
char
*
dest
,
int
destlen
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
*
dest
=
0
;
...
...
@@ -247,10 +221,10 @@ int cfe_getenv(char *name, char *dest, int destlen)
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_envbuf_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_envbuf
);
xiocb
.
plist
.
xiocb_envbuf
.
enum_idx
=
0
;
xiocb
.
plist
.
xiocb_envbuf
.
name_ptr
=
XPTR_FROM_NATIVE
(
name
);
xiocb
.
plist
.
xiocb_envbuf
.
name_length
=
cfe_
strlen
(
name
);
xiocb
.
plist
.
xiocb_envbuf
.
name_length
=
strlen
(
name
);
xiocb
.
plist
.
xiocb_envbuf
.
val_ptr
=
XPTR_FROM_NATIVE
(
dest
);
xiocb
.
plist
.
xiocb_envbuf
.
val_length
=
destlen
;
...
...
@@ -258,18 +232,16 @@ int cfe_getenv(char *name, char *dest, int destlen)
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_getenv || CFE_API_ALL */
#if defined(CFE_API_getfwinfo) || defined(CFE_API_ALL)
int
cfe_getfwinfo
(
cfe_fwinfo_t
*
info
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_FW_GETINFO
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_fwinfo_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_fwinfo
);
cfe_iocb_dispatch
(
&
xiocb
);
...
...
@@ -292,12 +264,10 @@ int cfe_getfwinfo(cfe_fwinfo_t * info)
return
0
;
}
#endif
/* CFE_API_getfwinfo || CFE_API_ALL */
#if defined(CFE_API_getstdhandle) || defined(CFE_API_ALL)
int
cfe_getstdhandle
(
int
flg
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_DEV_GETHANDLE
;
xiocb
.
xiocb_status
=
0
;
...
...
@@ -311,23 +281,17 @@ int cfe_getstdhandle(int flg)
return
xiocb
.
xiocb_status
;
return
xiocb
.
xiocb_handle
;
}
#endif
/* CFE_API_getstdhandle || CFE_API_ALL */
#if defined(CFE_API_getticks) || defined(CFE_API_ALL)
int64_t
#ifdef CFE_API_IMPL_NAMESPACE
__cfe_getticks
(
void
)
#else
cfe_getticks
(
void
)
#endif
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_FW_GETTIME
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_time_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_time
);
xiocb
.
plist
.
xiocb_time
.
ticks
=
0
;
cfe_iocb_dispatch
(
&
xiocb
);
...
...
@@ -335,18 +299,16 @@ cfe_getticks(void)
return
xiocb
.
plist
.
xiocb_time
.
ticks
;
}
#endif
/* CFE_API_getticks || CFE_API_ALL */
#if defined(CFE_API_inpstat) || defined(CFE_API_ALL)
int
cfe_inpstat
(
int
handle
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_DEV_INPSTAT
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
handle
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_inpstat_
t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_inpsta
t
);
xiocb
.
plist
.
xiocb_inpstat
.
inp_status
=
0
;
cfe_iocb_dispatch
(
&
xiocb
);
...
...
@@ -355,20 +317,18 @@ int cfe_inpstat(int handle)
return
xiocb
.
xiocb_status
;
return
xiocb
.
plist
.
xiocb_inpstat
.
inp_status
;
}
#endif
/* CFE_API_inpstat || CFE_API_ALL */
#if defined(CFE_API_ioctl) || defined(CFE_API_ALL)
int
cfe_ioctl
(
int
handle
,
unsigned
int
ioctlnum
,
unsigned
char
*
buffer
,
int
length
,
int
*
retlen
,
cfe_xuint_t
offset
)
int
length
,
int
*
retlen
,
u64
offset
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_DEV_IOCTL
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
handle
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_buffer_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_buffer
);
xiocb
.
plist
.
xiocb_buffer
.
buf_offset
=
offset
;
xiocb
.
plist
.
xiocb_buffer
.
buf_ioctlcmd
=
ioctlnum
;
xiocb
.
plist
.
xiocb_buffer
.
buf_ptr
=
XPTR_FROM_NATIVE
(
buffer
);
...
...
@@ -380,21 +340,19 @@ cfe_ioctl(int handle, unsigned int ioctlnum, unsigned char *buffer,
*
retlen
=
xiocb
.
plist
.
xiocb_buffer
.
buf_retlen
;
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_ioctl || CFE_API_ALL */
#if defined(CFE_API_open) || defined(CFE_API_ALL)
int
cfe_open
(
char
*
name
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_DEV_OPEN
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_buffer_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_buffer
);
xiocb
.
plist
.
xiocb_buffer
.
buf_offset
=
0
;
xiocb
.
plist
.
xiocb_buffer
.
buf_ptr
=
XPTR_FROM_NATIVE
(
name
);
xiocb
.
plist
.
xiocb_buffer
.
buf_length
=
cfe_
strlen
(
name
);
xiocb
.
plist
.
xiocb_buffer
.
buf_length
=
strlen
(
name
);
cfe_iocb_dispatch
(
&
xiocb
);
...
...
@@ -402,27 +360,21 @@ int cfe_open(char *name)
return
xiocb
.
xiocb_status
;
return
xiocb
.
xiocb_handle
;
}
#endif
/* CFE_API_open || CFE_API_ALL */
#if defined(CFE_API_read) || defined(CFE_API_ALL)
int
cfe_read
(
int
handle
,
unsigned
char
*
buffer
,
int
length
)
{
return
cfe_readblk
(
handle
,
0
,
buffer
,
length
);
}
#endif
/* CFE_API_read || CFE_API_ALL */
#if defined(CFE_API_readblk) || defined(CFE_API_ALL)
int
cfe_readblk
(
int
handle
,
cfe_xint_t
offset
,
unsigned
char
*
buffer
,
int
length
)
int
cfe_readblk
(
int
handle
,
s64
offset
,
unsigned
char
*
buffer
,
int
length
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_DEV_READ
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
handle
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_buffer_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_buffer
);
xiocb
.
plist
.
xiocb_buffer
.
buf_offset
=
offset
;
xiocb
.
plist
.
xiocb_buffer
.
buf_ptr
=
XPTR_FROM_NATIVE
(
buffer
);
xiocb
.
plist
.
xiocb_buffer
.
buf_length
=
length
;
...
...
@@ -433,62 +385,41 @@ cfe_readblk(int handle, cfe_xint_t offset, unsigned char *buffer,
return
xiocb
.
xiocb_status
;
return
xiocb
.
plist
.
xiocb_buffer
.
buf_retlen
;
}
#endif
/* CFE_API_readblk || CFE_API_ALL */
#if defined(CFE_API_setenv) || defined(CFE_API_ALL)
int
cfe_setenv
(
char
*
name
,
char
*
val
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_ENV_SET
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
0
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_envbuf_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_envbuf
);
xiocb
.
plist
.
xiocb_envbuf
.
enum_idx
=
0
;
xiocb
.
plist
.
xiocb_envbuf
.
name_ptr
=
XPTR_FROM_NATIVE
(
name
);
xiocb
.
plist
.
xiocb_envbuf
.
name_length
=
cfe_
strlen
(
name
);
xiocb
.
plist
.
xiocb_envbuf
.
name_length
=
strlen
(
name
);
xiocb
.
plist
.
xiocb_envbuf
.
val_ptr
=
XPTR_FROM_NATIVE
(
val
);
xiocb
.
plist
.
xiocb_envbuf
.
val_length
=
cfe_
strlen
(
val
);
xiocb
.
plist
.
xiocb_envbuf
.
val_length
=
strlen
(
val
);
cfe_iocb_dispatch
(
&
xiocb
);
return
xiocb
.
xiocb_status
;
}
#endif
/* CFE_API_setenv || CFE_API_ALL */
#if (defined(CFE_API_strlen) || defined(CFE_API_ALL)) \
&& !defined(CFE_API_STRLEN_CUSTOM)
int
cfe_strlen
(
char
*
name
)
{
int
count
=
0
;
while
(
*
name
++
)
count
++
;
return
count
;
}
#endif
/* CFE_API_strlen || CFE_API_ALL */
#if defined(CFE_API_write) || defined(CFE_API_ALL)
int
cfe_write
(
int
handle
,
unsigned
char
*
buffer
,
int
length
)
{
return
cfe_writeblk
(
handle
,
0
,
buffer
,
length
);
}
#endif
/* CFE_API_write || CFE_API_ALL */
#if defined(CFE_API_writeblk) || defined(CFE_API_ALL)
int
cfe_writeblk
(
int
handle
,
cfe_xint_t
offset
,
unsigned
char
*
buffer
,
int
length
)
int
cfe_writeblk
(
int
handle
,
s64
offset
,
unsigned
char
*
buffer
,
int
length
)
{
cfe_xiocb_t
xiocb
;
struct
cfe_xiocb
xiocb
;
xiocb
.
xiocb_fcode
=
CFE_CMD_DEV_WRITE
;
xiocb
.
xiocb_status
=
0
;
xiocb
.
xiocb_handle
=
handle
;
xiocb
.
xiocb_flags
=
0
;
xiocb
.
xiocb_psize
=
sizeof
(
xiocb_buffer_t
);
xiocb
.
xiocb_psize
=
sizeof
(
struct
xiocb_buffer
);
xiocb
.
plist
.
xiocb_buffer
.
buf_offset
=
offset
;
xiocb
.
plist
.
xiocb_buffer
.
buf_ptr
=
XPTR_FROM_NATIVE
(
buffer
);
xiocb
.
plist
.
xiocb_buffer
.
buf_length
=
length
;
...
...
@@ -499,4 +430,3 @@ cfe_writeblk(int handle, cfe_xint_t offset, unsigned char *buffer,
return
xiocb
.
xiocb_status
;
return
xiocb
.
plist
.
xiocb_buffer
.
buf_retlen
;
}
#endif
/* CFE_API_writeblk || CFE_API_ALL */
arch/mips/fw/cfe/cfe_api_int.h
View file @
417345d8
...
...
@@ -15,28 +15,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* *********************************************************************
*
* Broadcom Common Firmware Environment (CFE)
*
* Device function prototypes File: cfe_api_int.h
*
* This header defines all internal types and macros for the
* library. This is stuff that's not exported to an app
* using the library.
*
* Authors: Mitch Lichtenberg, Chris Demetriou
*
********************************************************************* */
#ifndef CFE_API_INT_H
#define CFE_API_INT_H
/* *********************************************************************
* Constants
********************************************************************* */
/*
* Constants.
*/
#define CFE_CMD_FW_GETINFO 0
#define CFE_CMD_FW_RESTART 1
#define CFE_CMD_FW_BOOT 2
...
...
@@ -64,89 +48,101 @@
#define CFE_CMD_VENDOR_USE 0x8000
/* codes above this are for customer use */
/*
*********************************************************************
* Structures
*********************************************************************
*/
/*
* Structures.
*/
typedef
uint64_t
cfe_xuint_t
;
typedef
int64_t
cfe_xint_t
;
typedef
int64_t
cfe_xptr_t
;
/* eeek, signed "pointers" */
typedef
s64
cfe_xptr_t
;
typedef
struct
xiocb_buffer_s
{
cfe_xuint_t
buf_offset
;
/* offset on device (bytes) */
struct
xiocb_buffer
{
u64
buf_offset
;
/* offset on device (bytes) */
cfe_xptr_t
buf_ptr
;
/* pointer to a buffer */
cfe_xuint_t
buf_length
;
/* length of this buffer */
cfe_xuint_t
buf_retlen
;
/* returned length (for read ops) */
cfe_xuint_t
buf_ioctlcmd
;
/* IOCTL command (used only for IOCTLs) */
}
xiocb_buffer_t
;
#define buf_devflags buf_ioctlcmd
/* returned device info flags */
u64
buf_length
;
/* length of this buffer */
u64
buf_retlen
;
/* returned length (for read ops) */
u64
buf_ioctlcmd
;
/* IOCTL command (used only for IOCTLs) */
};
typedef
struct
xiocb_inpstat_s
{
cfe_xuint_t
inp_status
;
/* 1 means input available */
}
xiocb_inpstat_t
;
struct
xiocb_inpstat
{
u64
inp_status
;
/* 1 means input available */
};
typedef
struct
xiocb_envbuf_s
{
cfe_xint_t
enum_idx
;
/* 0-based enumeration index */
struct
xiocb_envbuf
{
s64
enum_idx
;
/* 0-based enumeration index */
cfe_xptr_t
name_ptr
;
/* name string buffer */
cfe_xint_t
name_length
;
/* size of name buffer */
s64
name_length
;
/* size of name buffer */
cfe_xptr_t
val_ptr
;
/* value string buffer */
cfe_xint_t
val_length
;
/* size of value string buffer */
}
xiocb_envbuf_t
;
typedef
struct
xiocb_cpuctl_s
{
cfe_xuint_t
cpu_number
;
/* cpu number to control */
cfe_xuint_t
cpu_command
;
/* command to issue to CPU */
cfe_xuint_t
start_addr
;
/* CPU start address */
cfe_xuint_t
gp_val
;
/* starting GP value */
cfe_xuint_t
sp_val
;
/* starting SP value */
cfe_xuint_t
a1_val
;
/* starting A1 value */
}
xiocb_cpuctl_t
;
typedef
struct
xiocb_time_s
{
cfe_xint_t
ticks
;
/* current time in ticks */
}
xiocb_time_t
;
typedef
struct
xiocb_exitstat_s
{
cfe_xint_t
status
;
}
xiocb_exitstat_t
;
typedef
struct
xiocb_meminfo_s
{
cfe_xint_t
mi_idx
;
/* 0-based enumeration index */
cfe_xint_t
mi_type
;
/* type of memory block */
cfe_xuint_t
mi_addr
;
/* physical start address */
cfe_xuint_t
mi_size
;
/* block size */
}
xiocb_meminfo_t
;
typedef
struct
xiocb_fwinfo_s
{
cfe_xint_t
fwi_version
;
/* major, minor, eco version */
cfe_xint_t
fwi_totalmem
;
/* total installed mem */
cfe_xint_t
fwi_flags
;
/* various flags */
cfe_xint_t
fwi_boardid
;
/* board ID */
cfe_xint_t
fwi_bootarea_va
;
/* VA of boot area */
cfe_xint_t
fwi_bootarea_pa
;
/* PA of boot area */
cfe_xint_t
fwi_bootarea_size
;
/* size of boot area */
cfe_xint_t
fwi_reserved1
;
cfe_xint_t
fwi_reserved2
;
cfe_xint_t
fwi_reserved3
;
}
xiocb_fwinfo_t
;
typedef
struct
cfe_xiocb_s
{
cfe_xuint_t
xiocb_fcode
;
/* IOCB function code */
cfe_xint_t
xiocb_status
;
/* return status */
cfe_xint_t
xiocb_handle
;
/* file/device handle */
cfe_xuint_t
xiocb_flags
;
/* flags for this IOCB */
cfe_xuint_t
xiocb_psize
;
/* size of parameter list */
s64
val_length
;
/* size of value string buffer */
};
struct
xiocb_cpuctl
{
u64
cpu_number
;
/* cpu number to control */
u64
cpu_command
;
/* command to issue to CPU */
u64
start_addr
;
/* CPU start address */
u64
gp_val
;
/* starting GP value */
u64
sp_val
;
/* starting SP value */
u64
a1_val
;
/* starting A1 value */
};
struct
xiocb_time
{
s64
ticks
;
/* current time in ticks */
};
struct
xiocb_exitstat
{
s64
status
;
};
struct
xiocb_meminfo
{
s64
mi_idx
;
/* 0-based enumeration index */
s64
mi_type
;
/* type of memory block */
u64
mi_addr
;
/* physical start address */
u64
mi_size
;
/* block size */
};
struct
xiocb_fwinfo
{
s64
fwi_version
;
/* major, minor, eco version */
s64
fwi_totalmem
;
/* total installed mem */
s64
fwi_flags
;
/* various flags */
s64
fwi_boardid
;
/* board ID */
s64
fwi_bootarea_va
;
/* VA of boot area */
s64
fwi_bootarea_pa
;
/* PA of boot area */
s64
fwi_bootarea_size
;
/* size of boot area */
s64
fwi_reserved1
;
s64
fwi_reserved2
;
s64
fwi_reserved3
;
};
struct
cfe_xiocb
{
u64
xiocb_fcode
;
/* IOCB function code */
s64
xiocb_status
;
/* return status */
s64
xiocb_handle
;
/* file/device handle */
u64
xiocb_flags
;
/* flags for this IOCB */
u64
xiocb_psize
;
/* size of parameter list */
union
{
xiocb_buffer_t
xiocb_buffer
;
/* buffer parameters */
xiocb_inpstat_t
xiocb_inpstat
;
/* input status parameters */
xiocb_envbuf_t
xiocb_envbuf
;
/* environment function parameters */
xiocb_cpuctl_t
xiocb_cpuctl
;
/* CPU control parameters */
xiocb_time_t
xiocb_time
;
/* timer parameters */
xiocb_meminfo_t
xiocb_meminfo
;
/* memory arena info parameters */
xiocb_fwinfo_t
xiocb_fwinfo
;
/* firmware information */
xiocb_exitstat_t
xiocb_exitstat
;
/* Exit Status */
/* buffer parameters */
struct
xiocb_buffer
xiocb_buffer
;
/* input status parameters */
struct
xiocb_inpstat
xiocb_inpstat
;
/* environment function parameters */
struct
xiocb_envbuf
xiocb_envbuf
;
/* CPU control parameters */
struct
xiocb_cpuctl
xiocb_cpuctl
;
/* timer parameters */
struct
xiocb_time
xiocb_time
;
/* memory arena info parameters */
struct
xiocb_meminfo
xiocb_meminfo
;
/* firmware information */
struct
xiocb_fwinfo
xiocb_fwinfo
;
/* Exit Status */
struct
xiocb_exitstat
xiocb_exitstat
;
}
plist
;
}
cfe_xiocb_t
;
};
#endif
/* CFE_API_INT_H */
include/asm-mips/fw/cfe/cfe_api.h
View file @
417345d8
...
...
@@ -15,49 +15,27 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* *********************************************************************
*
/*
* Broadcom Common Firmware Environment (CFE)
*
* Device function prototypes File: cfe_api.h
*
* This file contains declarations for doing callbacks to
* cfe from an application. It should be the only header
* needed by the application to use this library
*
* Authors: Mitch Lichtenberg, Chris Demetriou
*
********************************************************************* */
*/
#ifndef CFE_API_H
#define CFE_API_H
/*
* Apply customizations here for different OSes. These need to:
* * typedef uint64_t, int64_t, intptr_t, uintptr_t.
* * define cfe_strlen() if use of an existing function is desired.
* * define CFE_API_IMPL_NAMESPACE if API functions are to use
* names in the implementation namespace.
* Also, optionally, if the build environment does not do so automatically,
* CFE_API_* can be defined here as desired.
*/
/* Begin customization. */
#include <linux/types.h>
#include <linux/string.h>
typedef
long
intptr_t
;
#define cfe_strlen strlen
#define CFE_API_ALL
#define CFE_API_STRLEN_CUSTOM
/* End customization. */
/* *********************************************************************
/*
* Constants
*********************************************************************
*/
*/
/* Seal indicating CFE's presence, passed to user program. */
#define CFE_EPTSEAL 0x43464531
...
...
@@ -108,55 +86,14 @@ typedef struct {
}
cfe_fwinfo_t
;
/*
* cfe_strlen is handled specially: If already defined, it has been
* overridden in this environment with a standard strlen-like function.
*/
#ifdef cfe_strlen
# define CFE_API_STRLEN_CUSTOM
#else
# ifdef CFE_API_IMPL_NAMESPACE
# define cfe_strlen(a) __cfe_strlen(a)
# endif
int
cfe_strlen
(
char
*
name
);
#endif
/*
* Defines and prototypes for functions which take no arguments.
*/
#ifdef CFE_API_IMPL_NAMESPACE
int64_t
__cfe_getticks
(
void
);
#define cfe_getticks() __cfe_getticks()
#else
int64_t
cfe_getticks
(
void
);
#endif
/*
* Defines and prototypes for the rest of the functions.
*/
#ifdef CFE_API_IMPL_NAMESPACE
#define cfe_close(a) __cfe_close(a)
#define cfe_cpu_start(a, b, c, d, e) __cfe_cpu_start(a, b, c, d, e)
#define cfe_cpu_stop(a) __cfe_cpu_stop(a)
#define cfe_enumenv(a, b, d, e, f) __cfe_enumenv(a, b, d, e, f)
#define cfe_enummem(a, b, c, d, e) __cfe_enummem(a, b, c, d, e)
#define cfe_exit(a, b) __cfe_exit(a, b)
#define cfe_flushcache(a) __cfe_cacheflush(a)
#define cfe_getdevinfo(a) __cfe_getdevinfo(a)
#define cfe_getenv(a, b, c) __cfe_getenv(a, b, c)
#define cfe_getfwinfo(a) __cfe_getfwinfo(a)
#define cfe_getstdhandle(a) __cfe_getstdhandle(a)
#define cfe_init(a, b) __cfe_init(a, b)
#define cfe_inpstat(a) __cfe_inpstat(a)
#define cfe_ioctl(a, b, c, d, e, f) __cfe_ioctl(a, b, c, d, e, f)
#define cfe_open(a) __cfe_open(a)
#define cfe_read(a, b, c) __cfe_read(a, b, c)
#define cfe_readblk(a, b, c, d) __cfe_readblk(a, b, c, d)
#define cfe_setenv(a, b) __cfe_setenv(a, b)
#define cfe_write(a, b, c) __cfe_write(a, b, c)
#define cfe_writeblk(a, b, c, d) __cfe_writeblk(a, b, c, d)
#endif
/* CFE_API_IMPL_NAMESPACE */
int
cfe_close
(
int
handle
);
int
cfe_cpu_start
(
int
cpu
,
void
(
*
fn
)
(
void
),
long
sp
,
long
gp
,
long
a1
);
int
cfe_cpu_stop
(
int
cpu
);
...
...
include/asm-mips/fw/cfe/cfe_error.h
View file @
417345d8
...
...
@@ -16,18 +16,13 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* *********************************************************************
*
/*
* Broadcom Common Firmware Environment (CFE)
*
* Error codes File: cfe_error.h
*
* CFE's global error code list is here.
*
* Author: Mitch Lichtenberg
*
********************************************************************* */
*/
#define CFE_OK 0
#define CFE_ERR -1
/* generic error */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment