Changeset 57da95c in mainline for kernel/arch/sparc64/include/mm/tsb.h


Ignore:
Timestamp:
2006-09-18T11:47:28Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
29b2bbf
Parents:
f1d1f5d3
Message:
  • Create a dedicated slab cache for as_t objects and switch from malloc/free to slab_alloc/slab_free for

them.

  • Slightly fix and improve both the kernel and userspace atomic_add() on sparc64.
  • More TSB work on the sparc64 front.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/include/mm/tsb.h

    rf1d1f5d3 r57da95c  
    3737
    3838#include <arch/mm/tte.h>
     39#include <arch/mm/mmu.h>
    3940#include <arch/types.h>
    4041#include <typedefs.h>
     
    4748 * in TLBs - only one TLB entry will do.
    4849 */
    49 #define ITSB_ENTRY_COUNT                2048
    50 #define DTSB_ENTRY_COUNT                2048
     50#define TSB_SIZE                        2                       /* when changing this, change as.c as well */
     51#define ITSB_ENTRY_COUNT                (512*(1<<TSB_SIZE))
     52#define DTSB_ENTRY_COUNT                (512*(1<<TSB_SIZE))
    5153
    5254struct tsb_entry {
     
    5456        tte_data_t data;
    5557} __attribute__ ((packed));
     58typedef struct tsb_entry tsb_entry_t;
    5659
    57 typedef struct tsb_entry tsb_entry_t;
     60/** TSB Base register. */
     61union tsb_base_reg {
     62        uint64_t value;
     63        struct {
     64                uint64_t base : 51;     /**< TSB base address, bits 63:13. */
     65                unsigned split : 1;     /**< Split vs. common TSB for 8K and 64K pages.
     66                                          *  HelenOS uses only 8K pages for user mappings,
     67                                          *  so we always set this to 0.
     68                                          */
     69                unsigned : 9;
     70                unsigned size : 3;      /**< TSB size. Number of entries is 512*2^size. */
     71        } __attribute__ ((packed));
     72};
     73typedef union tsb_base_reg tsb_base_reg_t;
     74
     75/** Read ITSB Base register.
     76 *
     77 * @return Content of the ITSB Base register.
     78 */
     79static inline uint64_t itsb_base_read(void)
     80{
     81        return asi_u64_read(ASI_IMMU, VA_IMMU_TSB_BASE);
     82}
     83
     84/** Read DTSB Base register.
     85 *
     86 * @return Content of the DTSB Base register.
     87 */
     88static inline uint64_t dtsb_base_read(void)
     89{
     90        return asi_u64_read(ASI_DMMU, VA_DMMU_TSB_BASE);
     91}
     92
     93/** Write ITSB Base register.
     94 *
     95 * @param v New content of the ITSB Base register.
     96 */
     97static inline void itsb_base_write(uint64_t v)
     98{
     99        asi_u64_write(ASI_IMMU, VA_IMMU_TSB_BASE, v);
     100}
     101
     102/** Write DTSB Base register.
     103 *
     104 * @param v New content of the DTSB Base register.
     105 */
     106static inline void dtsb_base_write(uint64_t v)
     107{
     108        asi_u64_write(ASI_DMMU, VA_DMMU_TSB_BASE, v);
     109}
    58110
    59111extern void tsb_invalidate(as_t *as, uintptr_t page, count_t pages);
Note: See TracChangeset for help on using the changeset viewer.