Changeset 80bcaed in mainline for kernel/generic/include/mm/as.h


Ignore:
Timestamp:
2007-02-03T13:22:24Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f619ec11
Parents:
fa8e7d2
Message:

Merge as_t structure into one and leave the differring parts in as_genarch_t.

Indentation and formatting changes in header files.

File:
1 edited

Legend:

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

    rfa8e7d2 r80bcaed  
    5454#include <lib/elf.h>
    5555
    56 /** Defined to be true if user address space and kernel address space shadow each other. */
     56/**
     57 * Defined to be true if user address space and kernel address space shadow each
     58 * other.
     59 */
    5760#define KERNEL_ADDRESS_SPACE_SHADOWED   KERNEL_ADDRESS_SPACE_SHADOWED_ARCH
    5861
     
    6265#define USER_ADDRESS_SPACE_END          USER_ADDRESS_SPACE_END_ARCH
    6366
    64 #define USTACK_ADDRESS  USTACK_ADDRESS_ARCH
    65 
    66 #define FLAG_AS_KERNEL      (1 << 0)    /**< Kernel address space. */
    67 
    68 /** Address space area attributes. */
     67#define USTACK_ADDRESS                  USTACK_ADDRESS_ARCH
     68
     69/** Kernel address space. */
     70#define FLAG_AS_KERNEL                  (1 << 0)       
     71
     72/* Address space area attributes. */
    6973#define AS_AREA_ATTR_NONE       0
    7074#define AS_AREA_ATTR_PARTIAL    1       /**< Not fully initialized area. */
    7175
    72 #define AS_PF_FAULT             0       /**< The page fault was not resolved by as_page_fault(). */
    73 #define AS_PF_OK                1       /**< The page fault was resolved by as_page_fault(). */
    74 #define AS_PF_DEFER             2       /**< The page fault was caused by memcpy_from_uspace() or memcpy_to_uspace(). */
     76/** The page fault was not resolved by as_page_fault(). */
     77#define AS_PF_FAULT             0
     78/** The page fault was resolved by as_page_fault(). */
     79#define AS_PF_OK                1
     80/** The page fault was caused by memcpy_from_uspace() or memcpy_to_uspace(). */
     81#define AS_PF_DEFER             2
     82
     83/** Address space structure.
     84 *
     85 * as_t contains the list of as_areas of userspace accessible
     86 * pages for one or more tasks. Ranges of kernel memory pages are not
     87 * supposed to figure in the list as they are shared by all tasks and
     88 * set up during system initialization.
     89 */
     90typedef struct as {
     91        /** Protected by asidlock. */
     92        link_t inactive_as_with_asid_link;
     93
     94        mutex_t lock;
     95
     96        /** Number of references (i.e tasks that reference this as). */
     97        count_t refcount;
     98
     99        /** Number of processors on wich is this address space active. */
     100        count_t cpu_refcount;
     101
     102        /** B+tree of address space areas. */
     103        btree_t as_area_btree;
     104       
     105        /**
     106         *  Address space identifier.
     107         *  Constant on architectures that do not support ASIDs.
     108         */
     109        asid_t asid;
     110       
     111        /** Non-generic content. */
     112        as_genarch_t genarch;
     113
     114        /** Architecture specific content. */
     115        as_arch_t arch;
     116} as_t;
    75117
    76118typedef struct {
     
    81123} as_operations_t;
    82124
    83 /** This structure contains information associated with the shared address space area. */
     125/**
     126 * This structure contains information associated with the shared address space
     127 * area.
     128 */
    84129typedef struct {
    85         mutex_t lock;           /**< This lock must be acquired only when the as_area lock is held. */
    86         count_t refcount;       /**< This structure can be deallocated if refcount drops to 0. */
    87         btree_t pagemap;        /**< B+tree containing complete map of anonymous pages of the shared area. */
     130        /** This lock must be acquired only when the as_area lock is held. */
     131        mutex_t lock;           
     132        /** This structure can be deallocated if refcount drops to 0. */
     133        count_t refcount;
     134        /**
     135         * B+tree containing complete map of anonymous pages of the shared area.
     136         */
     137        btree_t pagemap;
    88138} share_info_t;
    89139
     
    116166typedef struct {
    117167        mutex_t lock;
    118         as_t *as;               /**< Containing address space. */
    119         int flags;              /**< Flags related to the memory represented by the address space area. */
    120         int attributes;         /**< Attributes related to the address space area itself. */
    121         count_t pages;          /**< Size of this area in multiples of PAGE_SIZE. */
    122         uintptr_t base;         /**< Base address of this area. */
    123         btree_t used_space;     /**< Map of used space. */
    124         share_info_t *sh_info;  /**< If the address space area has been shared, this pointer will
    125                                      reference the share info structure. */
    126         struct mem_backend *backend;    /**< Memory backend backing this address space area. */
     168        /** Containing address space. */
     169        as_t *as;               
     170        /** Flags related to the memory represented by the address space area. */
     171        int flags;
     172        /** Attributes related to the address space area itself. */
     173        int attributes;
     174        /** Size of this area in multiples of PAGE_SIZE. */
     175        count_t pages;
     176        /** Base address of this area. */
     177        uintptr_t base;
     178        /** Map of used space. */
     179        btree_t used_space;
     180
     181        /**
     182         * If the address space area has been shared, this pointer will reference
     183         * the share info structure.
     184         */
     185        share_info_t *sh_info;
     186
     187        /** Memory backend backing this address space area. */
     188        struct mem_backend *backend;
    127189
    128190        /** Data to be used by the backend. */
     
    147209extern as_t *as_create(int flags);
    148210extern void as_destroy(as_t *as);
    149 extern void as_switch(as_t *old, as_t *replace);
     211extern void as_switch(as_t *old_as, as_t *new_as);
    150212extern int as_page_fault(uintptr_t page, pf_access_t access, istate_t *istate);
    151213
    152 extern as_area_t *as_area_create(as_t *as, int flags, size_t size, uintptr_t base, int attrs,
    153         mem_backend_t *backend, mem_backend_data_t *backend_data);
     214extern as_area_t *as_area_create(as_t *as, int flags, size_t size,
     215    uintptr_t base, int attrs, mem_backend_t *backend,
     216    mem_backend_data_t *backend_data);
    154217extern int as_area_destroy(as_t *as, uintptr_t address);       
    155218extern int as_area_resize(as_t *as, uintptr_t address, size_t size, int flags);
    156219int as_area_share(as_t *src_as, uintptr_t src_base, size_t acc_size,
    157                   as_t *dst_as, uintptr_t dst_base, int dst_flags_mask);
     220    as_t *dst_as, uintptr_t dst_base, int dst_flags_mask);
    158221
    159222extern int as_area_get_flags(as_area_t *area);
Note: See TracChangeset for help on using the changeset viewer.