Changeset 00b1d20e in mainline for uspace/lib/libblock/libblock.c


Ignore:
Timestamp:
2009-08-31T20:15:35Z (15 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
822d22a, d061efe
Parents:
a830611
Message:

Add PC MBR partition driver (mbr_part). Only supports primary partitions a.t.m.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libblock/libblock.c

    ra830611 r00b1d20e  
    8686static int read_blocks(devcon_t *devcon, bn_t ba, size_t cnt);
    8787static int write_blocks(devcon_t *devcon, bn_t ba, size_t cnt);
    88 static size_t get_block_size(int dev_phone, size_t *bsize);
     88static int get_block_size(int dev_phone, size_t *bsize);
    8989
    9090static devcon_t *devcon_search(dev_handle_t dev_handle)
     
    652652}
    653653
     654/** Read blocks directly from device (bypass cache).
     655 *
     656 * @param dev_handle    Device handle of the block device.
     657 * @param ba            Address of first block.
     658 * @param cnt           Number of blocks.
     659 * @param src           Buffer for storing the data.
     660 *
     661 * @return              EOK on success or negative error code on failure.
     662 */
     663int block_read_direct(dev_handle_t dev_handle, bn_t ba, size_t cnt, void *buf)
     664{
     665        devcon_t *devcon;
     666        int rc;
     667
     668        devcon = devcon_search(dev_handle);
     669        assert(devcon);
     670       
     671        fibril_mutex_lock(&devcon->comm_area_lock);
     672
     673        rc = read_blocks(devcon, ba, cnt);
     674        if (rc == EOK)
     675                memcpy(buf, devcon->comm_area, devcon->pblock_size * cnt);
     676
     677        fibril_mutex_unlock(&devcon->comm_area_lock);
     678
     679        return rc;
     680}
     681
     682/** Write blocks directly to device (bypass cache).
     683 *
     684 * @param dev_handle    Device handle of the block device.
     685 * @param ba            Address of first block.
     686 * @param cnt           Number of blocks.
     687 * @param src           The data to be written.
     688 *
     689 * @return              EOK on success or negative error code on failure.
     690 */
     691int block_write_direct(dev_handle_t dev_handle, bn_t ba, size_t cnt,
     692    const void *data)
     693{
     694        devcon_t *devcon;
     695        int rc;
     696
     697        devcon = devcon_search(dev_handle);
     698        assert(devcon);
     699       
     700        fibril_mutex_lock(&devcon->comm_area_lock);
     701
     702        memcpy(devcon->comm_area, data, devcon->pblock_size * cnt);
     703        rc = read_blocks(devcon, ba, cnt);
     704
     705        fibril_mutex_unlock(&devcon->comm_area_lock);
     706
     707        return rc;
     708}
     709
     710/** Get device block size.
     711 *
     712 * @param dev_handle    Device handle of the block device.
     713 * @param bsize         Output block size.
     714 *
     715 * @return              EOK on success or negative error code on failure.
     716 */
     717int block_get_bsize(dev_handle_t dev_handle, size_t *bsize)
     718{
     719        devcon_t *devcon;
     720
     721        devcon = devcon_search(dev_handle);
     722        assert(devcon);
     723       
     724        return get_block_size(devcon->dev_phone, bsize);
     725}
     726
    654727/** Read blocks from block device.
    655728 *
     
    691764
    692765/** Get block size used by the device. */
    693 static size_t get_block_size(int dev_phone, size_t *bsize)
     766static int get_block_size(int dev_phone, size_t *bsize)
    694767{
    695768        ipcarg_t bs;
Note: See TracChangeset for help on using the changeset viewer.