The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/xen/interface/io/fsif.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /******************************************************************************
    2  * fsif.h
    3  * 
    4  * Interface to FS level split device drivers.
    5  * 
    6  * Permission is hereby granted, free of charge, to any person obtaining a copy
    7  * of this software and associated documentation files (the "Software"), to
    8  * deal in the Software without restriction, including without limitation the
    9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   10  * sell copies of the Software, and to permit persons to whom the Software is
   11  * furnished to do so, subject to the following conditions:
   12  *
   13  * The above copyright notice and this permission notice shall be included in
   14  * all copies or substantial portions of the Software.
   15  *
   16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
   22  * DEALINGS IN THE SOFTWARE.
   23  *
   24  * Copyright (c) 2007, Grzegorz Milos, <gm281@cam.ac.uk>.
   25  */
   26 
   27 #ifndef __XEN_PUBLIC_IO_FSIF_H__
   28 #define __XEN_PUBLIC_IO_FSIF_H__
   29 
   30 #include "ring.h"
   31 #include "../grant_table.h"
   32 
   33 #define REQ_FILE_OPEN        1
   34 #define REQ_FILE_CLOSE       2
   35 #define REQ_FILE_READ        3
   36 #define REQ_FILE_WRITE       4
   37 #define REQ_STAT             5
   38 #define REQ_FILE_TRUNCATE    6
   39 #define REQ_REMOVE           7
   40 #define REQ_RENAME           8
   41 #define REQ_CREATE           9
   42 #define REQ_DIR_LIST        10
   43 #define REQ_CHMOD           11
   44 #define REQ_FS_SPACE        12
   45 #define REQ_FILE_SYNC       13
   46 
   47 struct fsif_open_request {
   48     grant_ref_t gref;
   49 };
   50 
   51 struct fsif_close_request {
   52     uint32_t fd;
   53 };
   54 
   55 struct fsif_read_request {
   56     uint32_t fd;
   57     int32_t pad;
   58     uint64_t len;
   59     uint64_t offset;
   60     grant_ref_t grefs[1];  /* Variable length */
   61 };
   62 
   63 struct fsif_write_request {
   64     uint32_t fd;
   65     int32_t pad;
   66     uint64_t len;
   67     uint64_t offset;
   68     grant_ref_t grefs[1];  /* Variable length */
   69 };
   70 
   71 struct fsif_stat_request {
   72     uint32_t fd;
   73 };
   74 
   75 /* This structure is a copy of some fields from stat structure, returned
   76  * via the ring. */
   77 struct fsif_stat_response {
   78     int32_t  stat_mode;
   79     uint32_t stat_uid;
   80     uint32_t stat_gid;
   81     int32_t  stat_ret;
   82     int64_t  stat_size;
   83     int64_t  stat_atime;
   84     int64_t  stat_mtime;
   85     int64_t  stat_ctime;
   86 };
   87 
   88 struct fsif_truncate_request {
   89     uint32_t fd;
   90     int32_t pad;
   91     int64_t length;
   92 };
   93 
   94 struct fsif_remove_request {
   95     grant_ref_t gref;
   96 };
   97 
   98 struct fsif_rename_request {
   99     uint16_t old_name_offset;
  100     uint16_t new_name_offset;
  101     grant_ref_t gref;
  102 };
  103 
  104 struct fsif_create_request {
  105     int8_t directory;
  106     int8_t pad;
  107     int16_t pad2;
  108     int32_t mode;
  109     grant_ref_t gref;
  110 };
  111 
  112 struct fsif_list_request {
  113     uint32_t offset;
  114     grant_ref_t gref;
  115 };
  116 
  117 #define NR_FILES_SHIFT  0
  118 #define NR_FILES_SIZE   16   /* 16 bits for the number of files mask */
  119 #define NR_FILES_MASK   (((1ULL << NR_FILES_SIZE) - 1) << NR_FILES_SHIFT)
  120 #define ERROR_SIZE      32   /* 32 bits for the error mask */
  121 #define ERROR_SHIFT     (NR_FILES_SIZE + NR_FILES_SHIFT)
  122 #define ERROR_MASK      (((1ULL << ERROR_SIZE) - 1) << ERROR_SHIFT)
  123 #define HAS_MORE_SHIFT  (ERROR_SHIFT + ERROR_SIZE)    
  124 #define HAS_MORE_FLAG   (1ULL << HAS_MORE_SHIFT)
  125 
  126 struct fsif_chmod_request {
  127     uint32_t fd;
  128     int32_t mode;
  129 };
  130 
  131 struct fsif_space_request {
  132     grant_ref_t gref;
  133 };
  134 
  135 struct fsif_sync_request {
  136     uint32_t fd;
  137 };
  138 
  139 
  140 /* FS operation request */
  141 struct fsif_request {
  142     uint8_t type;                 /* Type of the request                  */
  143     uint8_t pad;
  144     uint16_t id;                  /* Request ID, copied to the response   */
  145     uint32_t pad2;
  146     union {
  147         struct fsif_open_request     fopen;
  148         struct fsif_close_request    fclose;
  149         struct fsif_read_request     fread;
  150         struct fsif_write_request    fwrite;
  151         struct fsif_stat_request     fstat;
  152         struct fsif_truncate_request ftruncate;
  153         struct fsif_remove_request   fremove;
  154         struct fsif_rename_request   frename;
  155         struct fsif_create_request   fcreate;
  156         struct fsif_list_request     flist;
  157         struct fsif_chmod_request    fchmod;
  158         struct fsif_space_request    fspace;
  159         struct fsif_sync_request     fsync;
  160     } u;
  161 };
  162 typedef struct fsif_request fsif_request_t;
  163 
  164 /* FS operation response */
  165 struct fsif_response {
  166     uint16_t id;
  167     uint16_t pad1;
  168     uint32_t pad2;
  169     union {
  170         uint64_t ret_val;
  171         struct fsif_stat_response fstat;
  172     } u;
  173 };
  174 
  175 typedef struct fsif_response fsif_response_t;
  176 
  177 #define FSIF_RING_ENTRY_SIZE   64
  178 
  179 #define FSIF_NR_READ_GNTS  ((FSIF_RING_ENTRY_SIZE - sizeof(struct fsif_read_request)) /  \
  180                                 sizeof(grant_ref_t) + 1)
  181 #define FSIF_NR_WRITE_GNTS ((FSIF_RING_ENTRY_SIZE - sizeof(struct fsif_write_request)) / \
  182                                 sizeof(grant_ref_t) + 1)
  183 
  184 DEFINE_RING_TYPES(fsif, struct fsif_request, struct fsif_response);
  185 
  186 #define STATE_INITIALISED     "init"
  187 #define STATE_READY           "ready"
  188 #define STATE_CLOSING         "closing"
  189 #define STATE_CLOSED          "closed"
  190 
  191 
  192 #endif

Cache object: 1b9614075cc03d604192bdc909cf6ce5


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.