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


Ignore:
Timestamp:
2007-01-28T13:25:49Z (18 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8e8c1a5
Parents:
1ba41c5
Message:

huge type system cleanup
remove cyclical type dependencies across multiple header files
many minor coding style fixes

File:
1 edited

Legend:

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

    r1ba41c5 rb3f8fb7  
    4848#include <arch/mm/asid.h>
    4949#include <arch/types.h>
    50 #include <typedefs.h>
    5150#include <synch/spinlock.h>
    5251#include <synch/mutex.h>
     
    6766#define FLAG_AS_KERNEL      (1 << 0)    /**< Kernel address space. */
    6867
    69 /** Address space structure.
    70  *
    71  * as_t contains the list of as_areas of userspace accessible
    72  * pages for one or more tasks. Ranges of kernel memory pages are not
    73  * supposed to figure in the list as they are shared by all tasks and
    74  * set up during system initialization.
    75  */
    76 struct as {
    77         /** Protected by asidlock. */
    78         link_t inactive_as_with_asid_link;
    79 
    80         mutex_t lock;
    81 
    82         /** Number of references (i.e tasks that reference this as). */
    83         count_t refcount;
    84 
    85         /** Number of processors on wich is this address space active. */
    86         count_t cpu_refcount;
    87 
    88         /** B+tree of address space areas. */
    89         btree_t as_area_btree;
    90 
    91         /** Page table pointer. Constant on architectures that use global page hash table. */
    92         pte_t *page_table;
    93 
    94         /** Address space identifier. Constant on architectures that do not support ASIDs.*/
    95         asid_t asid;
    96        
    97         /** Architecture specific content. */
    98         as_arch_t arch;
    99 };
    100 
    101 struct as_operations {
     68/** Address space area attributes. */
     69#define AS_AREA_ATTR_NONE       0
     70#define AS_AREA_ATTR_PARTIAL    1       /**< Not fully initialized area. */
     71
     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(). */
     75
     76typedef struct {
    10277        pte_t *(* page_table_create)(int flags);
    10378        void (* page_table_destroy)(pte_t *page_table);
    10479        void (* page_table_lock)(as_t *as, bool lock);
    10580        void (* page_table_unlock)(as_t *as, bool unlock);
    106 };
    107 typedef struct as_operations as_operations_t;
    108 
    109 /** Address space area attributes. */
    110 #define AS_AREA_ATTR_NONE       0
    111 #define AS_AREA_ATTR_PARTIAL    1       /**< Not fully initialized area. */
    112 
    113 #define AS_PF_FAULT             0       /**< The page fault was not resolved by as_page_fault(). */
    114 #define AS_PF_OK                1       /**< The page fault was resolved by as_page_fault(). */
    115 #define AS_PF_DEFER             2       /**< The page fault was caused by memcpy_from_uspace()
    116                                              or memcpy_to_uspace(). */
     81} as_operations_t;
    11782
    11883/** This structure contains information associated with the shared address space area. */
     
    12388} share_info_t;
    12489
    125 /** Address space area backend structure. */
    126 typedef struct {
    127         int (* page_fault)(as_area_t *area, uintptr_t addr, pf_access_t access);
    128         void (* frame_free)(as_area_t *area, uintptr_t page, uintptr_t frame);
    129         void (* share)(as_area_t *area);
    130 } mem_backend_t;
     90/** Page fault access type. */
     91typedef enum {
     92        PF_ACCESS_READ,
     93        PF_ACCESS_WRITE,
     94        PF_ACCESS_EXEC
     95} pf_access_t;
     96
     97struct mem_backend;
    13198
    13299/** Backend data stored in address space area. */
    133 typedef union {
     100typedef union mem_backend_data {
    134101        struct {        /**< elf_backend members */
    135102                elf_header_t *elf;
     
    147114 * In the future, it should not be difficult to support shared areas.
    148115 */
    149 struct as_area {
     116typedef struct {
    150117        mutex_t lock;
    151118        as_t *as;               /**< Containing address space. */
     
    157124        share_info_t *sh_info;  /**< If the address space area has been shared, this pointer will
    158125                                     reference the share info structure. */
    159         mem_backend_t *backend; /**< Memory backend backing this address space area. */
     126        struct mem_backend *backend;    /**< Memory backend backing this address space area. */
    160127
    161128        /** Data to be used by the backend. */
    162129        mem_backend_data_t backend_data;
    163 };
     130} as_area_t;
     131
     132/** Address space area backend structure. */
     133typedef struct mem_backend {
     134        int (* page_fault)(as_area_t *area, uintptr_t addr, pf_access_t access);
     135        void (* frame_free)(as_area_t *area, uintptr_t page, uintptr_t frame);
     136        void (* share)(as_area_t *area);
     137} mem_backend_t;
    164138
    165139extern as_t *AS_KERNEL;
     
    207181#endif /* !def as_deinstall_arch */
    208182
    209 /* Backend declarations. */
     183/* Backend declarations and functions. */
    210184extern mem_backend_t anon_backend;
    211185extern mem_backend_t elf_backend;
    212186extern mem_backend_t phys_backend;
     187
     188extern int elf_load(elf_header_t *header, as_t *as);
    213189
    214190/* Address space area related syscalls. */
Note: See TracChangeset for help on using the changeset viewer.