⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blib.h

📁 eCos操作系统源码
💻 H
字号:
#ifndef CYGONCE_BLIB_H#define CYGONCE_BLIB_H//==========================================================================////      blib.h////      Block cache and access library  ////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 2003 Savin Zlobec //// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):     savin // Date:          2003-08-29// Description: ////####DESCRIPTIONEND####////==========================================================================#include <cyg/infra/cyg_type.h> #include <cyg/kernel/kapi.h> #include <cyg/io/io.h> #include <linux/rbtree.h>#include <linux/list.h>// --------------------------------------------------------------------typedef int (*cyg_blib_bread_fn) (    void*,       // private data    void*,       // block buffer    cyg_uint32*, // number of blocks to read    cyg_uint32   // starting block number);typedef int (*cyg_blib_bwrite_fn) (    void*,       // private data    const void*, // block buffer    cyg_uint32*, // number of blocks to write     cyg_uint32   // starting block number);typedef struct {    cyg_uint32  n_gets;     // number of block gets    cyg_uint32  n_reads;    // number of block reads    cyg_uint32  n_writes;   // number of block writes} cyg_blib_stat_t;typedef struct {    void                 *priv;            // private data    struct list_head      list_head;       // head of block list     struct rb_root        rb_root;         // block red-black tree root    cyg_uint32            block_size;      // block size    cyg_uint32            block_size_log2; // block size log2    cyg_uint8            *mem_base;        // memory base    cyg_uint32            mem_size;        // memory size    cyg_mempool_fix       mem_pool;        // memory pool struct    cyg_handle_t          mem_pool_h;      // memory pool handle    cyg_blib_bread_fn     bread_fn;        // block read function    cyg_blib_bwrite_fn    bwrite_fn;       // block write function#ifdef CYGIMP_BLOCK_LIB_STATISTICS    cyg_blib_stat_t       stat;            // statistics#endif} cyg_blib_t;// --------------------------------------------------------------------// --------------------------------------------------------------------// Creates a block lib instance// //   priv_data  - private data to pass to bread_fn and bwrite_fn//   mem_base   - block cache memory base//   mem_size   - block cache memory size//   block_size - block size//   bread_fn   - function which reads blocks//   bwrite_fn  - function which writes blocks//   bl         - block lib instance space holder//   //   returns ENOERR if create succeded//int cyg_blib_create(void               *priv_data,                    void               *mem_base,                    cyg_uint32          mem_size,                    cyg_uint32          block_size,                    cyg_blib_bread_fn   bread_fn,                    cyg_blib_bwrite_fn  bwrite_fn,                    cyg_blib_t         *bl);// --------------------------------------------------------------------// Creates a block lib instance on top of IO system //   (cyg_io_bread and cyg_io_bwrite)// //   handle     - cyg_io_handle_t//   mem_base   - block cache memory base//   mem_size   - block cache memory size//   block_size - block size//   bl         - block lib instance space holder//   //   returns ENOERR if create succeded//int cyg_blib_io_create(cyg_io_handle_t     handle,                       void               *mem_base,                       cyg_uint32          mem_size,                       cyg_uint32          block_size,                       cyg_blib_t         *bl);// --------------------------------------------------------------------// Deletes a block lib instance//   //   bl - block lib instance////   The block cache is synced before////   returns ENOERR if delete succeded//int cyg_blib_delete(cyg_blib_t *bl);// --------------------------------------------------------------------// Reads a number of blocks////   bl  - block lib instance//   buf - block buffer ptr //   len - number of blocks to read//   pos - starting block number//       //   returns ENOERR if read succeded//           int cyg_blib_bread(cyg_blib_t *bl,                   void       *buf,                   cyg_uint32 *len,                   cyg_uint32  pos);// --------------------------------------------------------------------// Writes a number of blocks////   bl  - block lib instance//   buf - block buffer ptr //   len - number of blocks to write //   pos - starting block number//       //   returns ENOERR if write succeded//    int cyg_blib_bwrite(cyg_blib_t *bl,                    const void *buf,                    cyg_uint32 *len,                    cyg_uint32  pos);// --------------------------------------------------------------------// Reads data////   bl   - block lib instance//   buf  - data buffer ptr //   len  - number of bytes to read//   bnum - starting block number //   pos  - starting position inside starting block//       //   returns ENOERR if read succeded//   //   The block number is automatically adjusted if//   position is greater than block size// int cyg_blib_read(cyg_blib_t *bl,                  void       *buf,                  cyg_uint32 *len,                  cyg_uint32  bnum,                  cyg_uint32  pos);// --------------------------------------------------------------------// Writes data////   bl   - block lib instance//   buf  - data buffer ptr //   len  - number of bytes to write //   bnum - starting block number //   pos  - starting position inside starting block//       //   returns ENOERR if write succeded////   The block number is automatically adjusted if//   position is greater than block size//     int cyg_blib_write(cyg_blib_t *bl,                   const void *buf,                   cyg_uint32 *len,                   cyg_uint32  bnum,                   cyg_uint32  pos);// --------------------------------------------------------------------// Syncs block cache - ie write modified blocks////   bl - block lib instance////   returns ENOERR if sync succeded//int cyg_blib_sync(cyg_blib_t *bl);// --------------------------------------------------------------------// Syncs block - ie write if modified////   bl  - block lib instance//   num - block number to sync////   returns ENOERR if sync succeded//int cyg_blib_sync_block(cyg_blib_t *bl, cyg_uint32 num);// --------------------------------------------------------------------// Flushes block cache ////   bl  - block lib instance////   returns ENOERR if flush succeded////   The block cache is synced before//int cyg_blib_flush(cyg_blib_t *bl);// --------------------------------------------------------------------// Sets block size ////   bl         - block lib instance//   block_size - new block size////   returns ENOERR if set succeded////   The block cache is synced before//int cyg_blib_set_block_size(cyg_blib_t *bl, cyg_uint32 block_size);// --------------------------------------------------------------------// Gets block cache statistics ////   bl - block lib instance////   returns ENOERR if get succeded//int cyg_blib_get_stat(cyg_blib_t *bl, cyg_blib_stat_t *stat);#endif // CYGONCE_BLIB_H// --------------------------------------------------------------------// EOF blib.h

⌨️ 快捷键说明

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