cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

block.h (4038B)


      1/*
      2 * Common code for block device models
      3 *
      4 * Copyright (C) 2012 Red Hat, Inc.
      5 * Copyright (c) 2003-2008 Fabrice Bellard
      6 *
      7 * This work is licensed under the terms of the GNU GPL, version 2 or
      8 * later.  See the COPYING file in the top-level directory.
      9 */
     10
     11#ifndef HW_BLOCK_H
     12#define HW_BLOCK_H
     13
     14#include "exec/hwaddr.h"
     15#include "qapi/qapi-types-block-core.h"
     16#include "hw/qdev-properties-system.h"
     17
     18/* Configuration */
     19
     20typedef struct BlockConf {
     21    BlockBackend *blk;
     22    OnOffAuto backend_defaults;
     23    uint32_t physical_block_size;
     24    uint32_t logical_block_size;
     25    uint32_t min_io_size;
     26    uint32_t opt_io_size;
     27    int32_t bootindex;
     28    uint32_t discard_granularity;
     29    /* geometry, not all devices use this */
     30    uint32_t cyls, heads, secs;
     31    uint32_t lcyls, lheads, lsecs;
     32    OnOffAuto wce;
     33    bool share_rw;
     34    BlockdevOnError rerror;
     35    BlockdevOnError werror;
     36} BlockConf;
     37
     38static inline unsigned int get_physical_block_exp(BlockConf *conf)
     39{
     40    unsigned int exp = 0, size;
     41
     42    for (size = conf->physical_block_size;
     43        size > conf->logical_block_size;
     44        size >>= 1) {
     45        exp++;
     46    }
     47
     48    return exp;
     49}
     50
     51#define DEFINE_BLOCK_PROPERTIES_BASE(_state, _conf)                     \
     52    DEFINE_PROP_ON_OFF_AUTO("backend_defaults", _state,                 \
     53                            _conf.backend_defaults, ON_OFF_AUTO_AUTO),  \
     54    DEFINE_PROP_BLOCKSIZE("logical_block_size", _state,                 \
     55                          _conf.logical_block_size),                    \
     56    DEFINE_PROP_BLOCKSIZE("physical_block_size", _state,                \
     57                          _conf.physical_block_size),                   \
     58    DEFINE_PROP_SIZE32("min_io_size", _state, _conf.min_io_size, 0),    \
     59    DEFINE_PROP_SIZE32("opt_io_size", _state, _conf.opt_io_size, 0),    \
     60    DEFINE_PROP_SIZE32("discard_granularity", _state,                   \
     61                       _conf.discard_granularity, -1),                  \
     62    DEFINE_PROP_ON_OFF_AUTO("write-cache", _state, _conf.wce,           \
     63                            ON_OFF_AUTO_AUTO),                          \
     64    DEFINE_PROP_BOOL("share-rw", _state, _conf.share_rw, false)
     65
     66#define DEFINE_BLOCK_PROPERTIES(_state, _conf)                          \
     67    DEFINE_PROP_DRIVE("drive", _state, _conf.blk),                      \
     68    DEFINE_BLOCK_PROPERTIES_BASE(_state, _conf)
     69
     70#define DEFINE_BLOCK_CHS_PROPERTIES(_state, _conf)                      \
     71    DEFINE_PROP_UINT32("cyls", _state, _conf.cyls, 0),                  \
     72    DEFINE_PROP_UINT32("heads", _state, _conf.heads, 0),                \
     73    DEFINE_PROP_UINT32("secs", _state, _conf.secs, 0),                  \
     74    DEFINE_PROP_UINT32("lcyls", _state, _conf.lcyls, 0),                \
     75    DEFINE_PROP_UINT32("lheads", _state, _conf.lheads, 0),              \
     76    DEFINE_PROP_UINT32("lsecs", _state, _conf.lsecs, 0)
     77
     78#define DEFINE_BLOCK_ERROR_PROPERTIES(_state, _conf)                    \
     79    DEFINE_PROP_BLOCKDEV_ON_ERROR("rerror", _state, _conf.rerror,       \
     80                                  BLOCKDEV_ON_ERROR_AUTO),              \
     81    DEFINE_PROP_BLOCKDEV_ON_ERROR("werror", _state, _conf.werror,       \
     82                                  BLOCKDEV_ON_ERROR_AUTO)
     83
     84/* Backend access helpers */
     85
     86bool blk_check_size_and_read_all(BlockBackend *blk, void *buf, hwaddr size,
     87                                 Error **errp);
     88
     89/* Configuration helpers */
     90
     91bool blkconf_geometry(BlockConf *conf, int *trans,
     92                      unsigned cyls_max, unsigned heads_max, unsigned secs_max,
     93                      Error **errp);
     94bool blkconf_blocksizes(BlockConf *conf, Error **errp);
     95bool blkconf_apply_backend_options(BlockConf *conf, bool readonly,
     96                                   bool resizable, Error **errp);
     97
     98/* Hard disk geometry */
     99
    100void hd_geometry_guess(BlockBackend *blk,
    101                       uint32_t *pcyls, uint32_t *pheads, uint32_t *psecs,
    102                       int *ptrans);
    103int hd_bios_chs_auto_trans(uint32_t cyls, uint32_t heads, uint32_t secs);
    104
    105#endif