Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/include/cap.h

    r9d58539 r120d5bc  
    11/*
    2  * Copyright (c) 2006 Jakub Jermar
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3030 * @{
    3131 */
    32 /** @file
     32/**
     33 * @file Storage capacity specification.
    3334 */
    3435
    35 #ifndef LIB_CAP_H_
    36 #define LIB_CAP_H_
     36#ifndef LIBC_CAP_H_
     37#define LIBC_CAP_H_
    3738
    38 #include <task.h>
     39#include <adt/list.h>
     40#include <loc.h>
     41#include <stdint.h>
     42#include <types/label.h>
     43#include <types/vol.h>
     44#include <vbd.h>
    3945
    40 extern int cap_grant(task_id_t id, unsigned int caps);
    41 extern int cap_revoke(task_id_t id, unsigned int caps);
     46/** Capacity unit */
     47typedef enum {
     48        cu_byte = 0,
     49        cu_kbyte,
     50        cu_mbyte,
     51        cu_gbyte,
     52        cu_tbyte,
     53        cu_pbyte,
     54        cu_ebyte,
     55        cu_zbyte,
     56        cu_ybyte
     57} cap_unit_t;
     58
     59/** Which of values within the precision of the capacity */
     60typedef enum {
     61        /** The nominal (middling) value */
     62        cv_nom,
     63        /** The minimum value */
     64        cv_min,
     65        /** The maximum value */
     66        cv_max
     67} cap_vsel_t;
     68
     69#define CU_LIMIT (cu_ybyte + 1)
     70
     71/** Storage capacity.
     72 *
     73 * Storage capacity represents both value and precision.
     74 * It is a decimal floating point value combined with a decimal
     75 * capacity unit. There is an integer mantisa @c m which in combination
     76 * with the number of decimal positions @c dp gives a decimal floating-point
     77 * number. E.g. for m = 1025 and dp = 2 the number is 10.25. If the unit
     78 * cunit = cu_kbyte, the capacity is 10.25 kByte, i.e. 10 250 bytes.
     79 *
     80 * Note that 1.000 kByte is equivalent to 1000 Byte, but 1 kByte is less
     81 * precise.
     82 */
     83typedef struct {
     84        /** Mantisa */
     85        uint64_t m;
     86        /** Decimal positions */
     87        unsigned dp;
     88        /** Capacity unit */
     89        cap_unit_t cunit;
     90} cap_spec_t;
     91
     92extern int cap_format(cap_spec_t *, char **);
     93extern int cap_parse(const char *, cap_spec_t *);
     94extern void cap_simplify(cap_spec_t *);
     95extern void cap_from_blocks(uint64_t, size_t, cap_spec_t *);
     96extern int cap_to_blocks(cap_spec_t *, cap_vsel_t, size_t, uint64_t *);
    4297
    4398#endif
Note: See TracChangeset for help on using the changeset viewer.