Changeset b3f8fb7 in mainline for kernel/generic/include/mm


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

Location:
kernel/generic/include/mm
Files:
1 added
6 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. */
  • kernel/generic/include/mm/asid.h

    r1ba41c5 rb3f8fb7  
    4545#include <arch/mm/asid.h>
    4646#include <synch/spinlock.h>
    47 #include <typedefs.h>
     47#include <adt/list.h>
     48#include <mm/as.h>
    4849
    4950#endif
  • kernel/generic/include/mm/buddy.h

    r1ba41c5 rb3f8fb7  
    3737
    3838#include <arch/types.h>
    39 #include <typedefs.h>
     39#include <adt/list.h>
    4040
    4141#define BUDDY_SYSTEM_INNER_BLOCK        0xff
  • kernel/generic/include/mm/frame.h

    r1ba41c5 rb3f8fb7  
    3838
    3939#include <arch/types.h>
    40 #include <typedefs.h>
    4140#include <adt/list.h>
    4241#include <synch/spinlock.h>
  • kernel/generic/include/mm/page.h

    r1ba41c5 rb3f8fb7  
    3636#define KERN_PAGE_H_
    3737
    38 #include <arch/mm/asid.h>
    3938#include <arch/types.h>
    40 #include <typedefs.h>
     39#include <mm/as.h>
    4140#include <memstr.h>
    42 
    43 #define PAGE_CACHEABLE_SHIFT            0
    44 #define PAGE_NOT_CACHEABLE_SHIFT        PAGE_CACHEABLE_SHIFT
    45 #define PAGE_PRESENT_SHIFT              1
    46 #define PAGE_NOT_PRESENT_SHIFT          PAGE_PRESENT_SHIFT
    47 #define PAGE_USER_SHIFT                 2
    48 #define PAGE_KERNEL_SHIFT               PAGE_USER_SHIFT
    49 #define PAGE_READ_SHIFT                 3
    50 #define PAGE_WRITE_SHIFT                4
    51 #define PAGE_EXEC_SHIFT                 5
    52 #define PAGE_GLOBAL_SHIFT               6
    53 
    54 #define PAGE_NOT_CACHEABLE      (0<<PAGE_CACHEABLE_SHIFT)
    55 #define PAGE_CACHEABLE          (1<<PAGE_CACHEABLE_SHIFT)
    56 
    57 #define PAGE_PRESENT            (0<<PAGE_PRESENT_SHIFT)
    58 #define PAGE_NOT_PRESENT        (1<<PAGE_PRESENT_SHIFT)
    59 
    60 #define PAGE_USER               (1<<PAGE_USER_SHIFT)
    61 #define PAGE_KERNEL             (0<<PAGE_USER_SHIFT)
    62 
    63 #define PAGE_READ               (1<<PAGE_READ_SHIFT)
    64 #define PAGE_WRITE              (1<<PAGE_WRITE_SHIFT)
    65 #define PAGE_EXEC               (1<<PAGE_EXEC_SHIFT)
    66 
    67 #define PAGE_GLOBAL             (1<<PAGE_GLOBAL_SHIFT)
    68 
    6941
    7042/**
     
    7345#define PAGE_COLOR(va)  (((va) >> PAGE_WIDTH) & ((1 << PAGE_COLOR_BITS) - 1))
    7446
    75 /** Page fault access type. */
    76 enum pf_access {
    77         PF_ACCESS_READ,
    78         PF_ACCESS_WRITE,
    79         PF_ACCESS_EXEC
    80 };
    81 typedef enum pf_access pf_access_t;
    82 
    8347/** Operations to manipulate page mappings. */
    84 struct page_mapping_operations {
    85         void (* mapping_insert)(as_t *as, uintptr_t page, uintptr_t frame, int
    86                 flags);
     48typedef struct {
     49        void (* mapping_insert)(as_t *as, uintptr_t page, uintptr_t frame,
     50                int flags);
    8751        void (* mapping_remove)(as_t *as, uintptr_t page);
    8852        pte_t *(* mapping_find)(as_t *as, uintptr_t page);
    89 };
    90 typedef struct page_mapping_operations page_mapping_operations_t;
     53} page_mapping_operations_t;
    9154
    9255extern page_mapping_operations_t *page_mapping_operations;
     
    9558extern void page_table_lock(as_t *as, bool lock);
    9659extern void page_table_unlock(as_t *as, bool unlock);
    97 extern void page_mapping_insert(as_t *as, uintptr_t page, uintptr_t frame, int
    98         flags);
     60extern void page_mapping_insert(as_t *as, uintptr_t page, uintptr_t frame,
     61        int flags);
    9962extern void page_mapping_remove(as_t *as, uintptr_t page);
    10063extern pte_t *page_mapping_find(as_t *as, uintptr_t page);
  • kernel/generic/include/mm/tlb.h

    r1ba41c5 rb3f8fb7  
    3838#include <arch/mm/asid.h>
    3939#include <arch/types.h>
    40 #include <typedefs.h>
    4140
    4241/**
     
    4746
    4847/** Type of TLB shootdown message. */
    49 enum tlb_invalidate_type {
     48typedef enum {
    5049        TLB_INVL_INVALID = 0,           /**< Invalid type. */
    5150        TLB_INVL_ALL,                   /**< Invalidate all entries in TLB. */
    5251        TLB_INVL_ASID,                  /**< Invalidate all entries belonging to one address space. */
    5352        TLB_INVL_PAGES                  /**< Invalidate specified page range belonging to one address space. */
    54 };
    55 typedef enum tlb_invalidate_type tlb_invalidate_type_t;
     53} tlb_invalidate_type_t;
    5654
    5755/** TLB shootdown message. */
    58 struct tlb_shootdown_msg {
     56typedef struct {
    5957        tlb_invalidate_type_t type;     /**< Message type. */
    6058        asid_t asid;                    /**< Address space identifier. */
    6159        uintptr_t page;                 /**< Page address. */
    6260        count_t count;                  /**< Number of pages to invalidate. */
    63 };
    64 typedef struct tlb_shootdown_msg tlb_shootdown_msg_t;
     61} tlb_shootdown_msg_t;
    6562
    6663extern void tlb_init(void);
Note: See TracChangeset for help on using the changeset viewer.