fileio.h

来自「AMLOGIC DPF source code」· C头文件 代码 · 共 216 行

H
216
字号
/*******************************************************************
 * 
 *  Copyright C 2005 by Amlogic, Inc. All Rights Reserved.
 *
 *  Description: 
 *
 *  Author: Amlogic Software
 *  Created: Fri Nov 11 00:24:17 2005
 *
 *******************************************************************/
#ifndef _FILEIO_H_
#define _FILEIO_H_

#include "buffer.h"
#include <stdlib.h>
#include <stdio.h>
#include "includes.h"
#include <chain.h>
#include <status.h>
#include <fs.h>
	
	#define AV_MAX_FILES				8
    #define FILE_IO_TASK_STACK_SIZE		512
    
	#define AV_SEEK_CUR SEEK_CUR
	#define AV_SEEK_SET SEEK_SET
	#define AV_SEEK_END SEEK_END

	#define F_FLUSH	1
	#define F_ABORT	2

	#define FIO_INITED	1
	#define FIO_SHUTDOWN	2
	
	#define AV_FILE \
		av_file_t

    #define AV_SIZE_T \
		size_t

	#define AV_FILEOFFSET_T \
		long

	#define AV_FOPEN(name, mode, bd) \
		av_fopen(name, mode, bd)

	#define AV_FCLOSE(fp) \
		av_fclose(fp)

	#define AV_FREAD(a, bsize, n, fp, cb) \
		av_fread(a, bsize, n, fp, cb)

	#define AV_FGETC(fp) \
		av_fgetc(fp)

	#define AV_FEOF(fp) \
		av_feof(fp)

	#define AV_FERROR(fp) \
		av_ferror(fp)

	#define AV_FSEEK(fp, offset, origin) \
		av_fseek(fp, offset, origin)

	#define AV_FTELL(fp) \
		av_ftell(fp)

    typedef struct transfer_request_s{
        Chain_Node link;
        unsigned char transfer_src_type;
        unsigned char transfer_dst_type;
        unsigned char endian;
        unsigned char option;
        unsigned transfer_size;
        unsigned src_start_addr;
        unsigned dst_start_addr;
        char *src_buffer;
        char *dst_buffer;
        void (*transfer_done_callback)(void *arg, avfs_status_code status, int error);
        void (*request_done_callback)(void *arg, avfs_status_code status, int error);
        void *request_done_arg;
    } transfer_request_t;

	// for src type
	#define READ_FROM_DEVICE		1
	#define READ_FROM_SDRAM			0

    #define READ_TO_VIDEO_BUFFER      0x3
    #define READ_TO_AUDIO_BUFFER      0x2
    #define READ_TO_USERDATA_BUFFER   0x1
    #define READ_TO_SDRAM             0x0

	// for dst type and fread param: void* buffer
    #define TARGET_MASK               0xc0000000
    #define TO_VIDEO_BUFFER      	(0x3<<30)
    #define TO_AUDIO_BUFFER      	(0x2<<30)
    #define TO_USERDATA_BUFFER   	(0x1<<30)
    #define TO_SDRAM             	(0x0<<30)
    #define target_type(addr)	((((addr)&TARGET_MASK)>>30)&3)

    #define ENDIAN_MASK               0x30000000
    #define NO_ENDIAN_CHANGE          (ENDIAN_ABCD_ABCD<<28)
    #define ABCD_TO_BADC              (ENDIAN_ABCD_BADC<<28)
    #define ABCD_TO_CDAB			  (ENDIAN_ABCD_CDAB<<28)
    #define ABCD_TO_DCBA		      (ENDIAN_ABCD_DCBA<<28)
    #define endian_type(addr)	((((addr)&ENDIAN_MASK)>>28)&3)

    #define OPTION_MASK               0x0c000000
    #define DRM_ENABLE	              0x2
    #define CSS_ENABLE                0x1
    #define NO_OPTION      	          0x0
    #define option_of(addr)	((((addr)&OPTION_MASK)>>26)&3)

	#define ADDR_MASK                 0x03ffffff 
	#define address_of(addr)	((addr)&ADDR_MASK)

	#define BUF_CTL_REFILL_EN		0x01

    typedef struct av_file_s{
        int fd;
    	long offset;                       // current read offset
    	long total_bytes;				   // total bytes of file
    	unsigned32 dev_blk_size;
    	unsigned32 dev_feature;
    	av_buffer_t buf;
    	int buf_control;
	  	int (*init)(struct av_file_s *);
	   	int (*refill)(struct av_file_s *);
	   	int (*read)(struct av_file_s *, void *, size_t);
	   	int (*seek)(struct av_file_s *, unsigned);
	   	int (*shutdown)(struct av_file_s *);
	   	int (*stat)(struct av_file_s *, buffer_status_t *);
	   	int (*flush)(struct av_file_s *, unsigned char mode);    	
    	unsigned short file_io_task_id;
    	unsigned short state;
    	OS_STK *file_io_task_stack;
    	void (*transfer_done_call_back)(void *arg, avfs_status_code status, int error);
    	OS_EVENT *request_event;
    	OS_EVENT *transfer_done_event;
    	OS_EVENT *target_done_event;
    	OS_EVENT *device_done_event;
    	Chain_Control *transfer_request_chain;
    	int status;
    	int target_fd[4];
    } av_file_t;

	typedef void (*av_file_transfer_done_cb_t)(void *arg, avfs_status_code status, int error);
	
	typedef struct buffer_operation_s
	{
	  	int (*init)(struct av_file_s *);
	   	int (*refill)(struct av_file_s *);
	   	int (*read)(struct av_file_s *, void *, size_t);
	   	int (*seek)(struct av_file_s *, unsigned);
	   	int (*shutdown)(struct av_file_s *);
	   	int (*stat)(struct av_file_s *, buffer_status_t *);
	   	int (*flush)(struct av_file_s *, unsigned char mode); 
	} buffer_operation_t;

    typedef struct{
        void* chain;
        int size;
        char type;
    }file_datachain_req_t;
    #define CHAIN_TYPE_NULL	0
    #define CHAIN_TYPE_PBUF	1

	AV_FILE* av_fopen(const char *name, const char *mode, buffer_descriptor_t *bd);
	int av_fclose( AV_FILE *stream );
	int av_fgetc( AV_FILE *stream );
	int av_feof( AV_FILE *stream );
	int av_ferror(AV_FILE* fp);
	int av_fseek( AV_FILE *stream, long offset, int origin );
	size_t av_fread( void *buffer, size_t size, size_t count, AV_FILE *stream, av_file_transfer_done_cb_t cb);
	size_t av_fwrite( const void *buffer, size_t size, size_t count, AV_FILE *stream );
	long av_ftell( AV_FILE *stream );
    int av_ferror( AV_FILE *stream );
	/* mode "ABORT" -- cancel last unfinished read operation and force data into target 
	   mode "FLUSH" -- wait read operation done and force pending data into target */
    int av_fflush( AV_FILE *stream, const char *mode );

    /** Read a 32-bit value from an file. */
    int read_val32(unsigned32 *val32, AV_FILE *f);

    /** Read a 16-bit value from an file. */
    int read_val16(unsigned16 *val16, AV_FILE *f);

    /** Read an 8-bit value from an file. */
    int read_val8(unsigned8 *val8, AV_FILE *f);
	
	#ifndef RC_OK
	#define RC_OK 0x00000000
	#endif

	#define FILE_IOCTL_DEV_READ	1
	#define FILE_IOCTL_DEV_FEATURE 2
	#define FILE_IOCTL_DEV_WRITE   3
	#define FILE_IOCTL_EXTEND_FILE 4

	#define FILE_IOCTL_GET_RESOURCE             0xf1
	#define FILE_IOCTL_GET_LABEL	            0xf2
	#define FILE_IOCTL_CHECK_FREESPC            0xf3
	#define FILE_IOCTL_GET_COUNT	            0xf4
        #define FILE_IOCTL_REGISTER_INTERRUPT_CB    0xf5
        #define FILE_IOCTL_SET_OPT                  0xf6
        #define FILE_IOCTL_SYNC                     0xf7
        #define FILE_IOCTL_GET_DATACHAIN            0xf8
        #define FILE_IOCTL_SET_READ_UNIT            0xf9
        #define FILE_IOCTL_SET_TIMEOUT              0xfa
        #define FILE_IOCTL_GET_DEV_INFO             0xfb
	extern avfs_filesystem_operations_table iso9660_ops;

#endif //_FILEIO_H_


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?