Changeset 8182031 in mainline for generic/include/mm/as.h


Ignore:
Timestamp:
2006-05-23T23:09:13Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
82da5f5
Parents:
56789125
Message:

Some shared memory stuff (not completed).
Support for address space area backends.
Add ELF and anonymous memory backends.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • generic/include/mm/as.h

    r56789125 r8182031  
    3535#define AS_AREA_EXEC    4
    3636#define AS_AREA_DEVICE  8
     37#define AS_AREA_ANON    16
    3738
    3839#ifdef KERNEL
     
    6162
    6263#define FLAG_AS_KERNEL      (1 << 0)    /**< Kernel address space. */
    63 
    64 
    65 /** Address space area attributes. */
    66 #define AS_AREA_ATTR_NONE       0
    67 #define AS_AREA_ATTR_PARTIAL    1       /* Not fully initialized area. */
    68 
    69 #define AS_PF_FAULT             0       /**< The page fault was not resolved by as_page_fault(). */
    70 #define AS_PF_OK                1       /**< The page fault was resolved by as_page_fault(). */
    71 #define AS_PF_DEFER             2       /**< The page fault was caused by memcpy_from_uspace()
    72                                              or memcpy_to_uspace(). */
    73 
    74 /** Address space area structure.
    75  *
    76  * Each as_area_t structure describes one contiguous area of virtual memory.
    77  * In the future, it should not be difficult to support shared areas.
    78  */
    79 struct as_area {
    80         mutex_t lock;
    81         int flags;              /**< Flags related to the memory represented by the address space area. */
    82         int attributes;         /**< Attributes related to the address space area itself. */
    83         count_t pages;          /**< Size of this area in multiples of PAGE_SIZE. */
    84         __address base;         /**< Base address of this area. */
    85         btree_t used_space;     /**< Map of used space. */
    86 };
    8764
    8865/** Address space structure.
     
    11996typedef struct as_operations as_operations_t;
    12097
     98/** Address space area attributes. */
     99#define AS_AREA_ATTR_NONE       0
     100#define AS_AREA_ATTR_PARTIAL    1       /**< Not fully initialized area. */
     101
     102#define AS_PF_FAULT             0       /**< The page fault was not resolved by as_page_fault(). */
     103#define AS_PF_OK                1       /**< The page fault was resolved by as_page_fault(). */
     104#define AS_PF_DEFER             2       /**< The page fault was caused by memcpy_from_uspace()
     105                                             or memcpy_to_uspace(). */
     106
     107typedef struct share_info share_info_t;
     108typedef struct mem_backend mem_backend_t;
     109
     110/** Address space area structure.
     111 *
     112 * Each as_area_t structure describes one contiguous area of virtual memory.
     113 * In the future, it should not be difficult to support shared areas.
     114 */
     115struct as_area {
     116        mutex_t lock;
     117        int flags;              /**< Flags related to the memory represented by the address space area. */
     118        int attributes;         /**< Attributes related to the address space area itself. */
     119        count_t pages;          /**< Size of this area in multiples of PAGE_SIZE. */
     120        __address base;         /**< Base address of this area. */
     121        btree_t used_space;     /**< Map of used space. */
     122        share_info_t *sh_info;  /**< If the address space area has been shared, this pointer will
     123                                     reference the share info structure. */
     124        mem_backend_t *backend; /**< Memory backend backing this address space area. */
     125        void *backend_data[2];  /**< Data to be used by the backend. */
     126};
     127
     128/** Address space area backend structure. */
     129struct mem_backend {
     130        int (* backend_page_fault)(as_area_t *area, __address addr);
     131        void (* backend_frame_free)(as_area_t *area, __address page, __address frame);
     132};
     133
    121134extern as_t *AS_KERNEL;
    122135extern as_operations_t *as_operations;
     
    127140extern void as_init(void);
    128141extern as_t *as_create(int flags);
    129 extern as_area_t *as_area_create(as_t *as, int flags, size_t size, __address base, int attrs);
     142extern as_area_t *as_area_create(as_t *as, int flags, size_t size, __address base, int attrs,
     143        mem_backend_t *backend, void **backend_data);
    130144extern int as_area_resize(as_t *as, __address address, size_t size, int flags);
    131145extern int as_area_destroy(as_t *as, __address address);
     146extern int as_area_get_flags(as_area_t *area);
    132147extern void as_set_mapping(as_t *as, __address page, __address frame);
    133148extern int as_page_fault(__address page, istate_t *istate);
     
    136151extern int as_area_steal(task_t *src_task, __address src_base, size_t acc_size, __address dst_base);
    137152extern size_t as_get_size(__address base);
     153extern int used_space_insert(as_area_t *a, __address page, count_t count);
     154extern int used_space_remove(as_area_t *a, __address page, count_t count);
    138155
    139156/* Interface to be implemented by architectures. */
     
    141158extern void as_install_arch(as_t *as);
    142159#endif /* !def as_install_arch */
     160
     161/* Backend declarations. */
     162extern mem_backend_t anon_backend;
     163extern mem_backend_t elf_backend;
    143164
    144165/* Address space area related syscalls. */
Note: See TracChangeset for help on using the changeset viewer.