From: Albert H. <he...@us...> - 2008-04-04 19:20:05
|
Update of /cvsroot/gc-linux/linux/include/asm-powerpc In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv22259/include/asm-powerpc Modified Files: starlet.h Log Message: - added starlet_kzalloc/starlet_kfree interfaces - added async ipc calls - added async ioctl api - added ioctlv apis - added useful hardware fixups - stop dvd motor (to preserve the dvd unit) - disconnect wiimote (to preserve batteries) - turn off the front blue light (to preserve the led) - added module information Index: starlet.h =================================================================== RCS file: /cvsroot/gc-linux/linux/include/asm-powerpc/starlet.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- starlet.h 26 Mar 2008 20:15:23 -0000 1.2 +++ starlet.h 4 Apr 2008 19:19:55 -0000 1.3 @@ -20,6 +20,7 @@ #include <linux/dmapool.h> #include <linux/list.h> #include <linux/platform_device.h> +#include <linux/scatterlist.h> #define STARLET_IPC_DMA_ALIGN 0x1f /* 32 bytes */ @@ -42,15 +43,100 @@ }; +struct starlet_iovec { + dma_addr_t dma_addr; + u32 dma_len; +}; + +struct starlet_ipc_request; +typedef int (*starlet_ipc_callback_t)(struct starlet_ipc_request *req); + +struct starlet_ipc_request { + /* begin starlet firmware request format */ + u32 cmd; + s32 result; + union { + s32 fd; + u32 req_cmd; + }; + union { + struct { + dma_addr_t pathname; + u32 mode; + } open; + struct { + u32 request; + dma_addr_t ibuf; + u32 ilen; + dma_addr_t obuf; + u32 olen; + } ioctl; + struct { + u32 request; + u32 argc_in; + u32 argc_out; + dma_addr_t iovec_da; + } ioctlv; + u32 argv[5]; + }; + /* end starlet firmware request format */ + + dma_addr_t dma_addr; /* request dma address */ + + /* ioctlv related data */ + struct starlet_iovec *iovec; + size_t iovec_size; + + struct scatterlist *sgl_in; + unsigned sgl_nents_in; + struct scatterlist *sgl_out; + unsigned sgl_nents_out; + + void *done_data; + starlet_ipc_callback_t done; + + struct list_head node; /* for queueing */ + + struct starlet_ipc_device *ipc_dev; +}; + + + /* from starlet-ipc.c */ +extern void *starlet_kzalloc(size_t size, gfp_t flags); +extern void starlet_kfree(void *ptr); + extern struct starlet_ipc_device *starlet_ipc_get_device(void); +extern void *starlet_ipc_request_priv(struct starlet_ipc_request *req); +extern void starlet_ipc_free_request(struct starlet_ipc_request *req); + extern int starlet_ios_open(const char *pathname, int flags); extern int starlet_ios_close(int fd); + extern int starlet_ios_ioctl(int fd, int request, void *ibuf, size_t ilen, void *obuf, size_t olen); +extern int starlet_ios_ioctl_nowait(int fd, int request, + void *ibuf, size_t ilen, + void *obuf, size_t olen, + starlet_ipc_callback_t callback, + void *arg); + +extern int starlet_ios_ioctlv(int fd, int request, + unsigned int nents_in, + struct scatterlist *sgl_in, + unsigned int nents_out, + struct scatterlist *sgl_out); +extern int starlet_ios_ioctlv_nowait(int fd, int request, + unsigned int nents_in, + struct scatterlist *sgl_in, + unsigned int nents_out, + struct scatterlist *sgl_out, + starlet_ipc_callback_t callback, + void *arg); +extern void starlet_ios_ioctlv_complete(struct starlet_ipc_request *req); /* from starlet-stm.c */ |