546 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			546 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *
 | |
|  * (C) COPYRIGHT 2008-2017 ARM Limited. All rights reserved.
 | |
|  *
 | |
|  * This program is free software and is provided to you under the terms of the
 | |
|  * GNU General Public License version 2 as published by the Free Software
 | |
|  * Foundation, and any use by you of this program is subject to the terms
 | |
|  * of such GNU licence.
 | |
|  *
 | |
|  * A copy of the licence is included with the program, and can also be obtained
 | |
|  * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | |
|  * Boston, MA  02110-1301, USA.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| #ifndef _KBASE_UKU_H_
 | |
| #define _KBASE_UKU_H_
 | |
| 
 | |
| #include "mali_uk.h"
 | |
| #include "mali_base_kernel.h"
 | |
| 
 | |
| /* This file needs to support being included from kernel and userside (which use different defines) */
 | |
| #if defined(CONFIG_MALI_ERROR_INJECT) || MALI_ERROR_INJECT_ON
 | |
| #define SUPPORT_MALI_ERROR_INJECT
 | |
| #endif /* defined(CONFIG_MALI_ERROR_INJECT) || MALI_ERROR_INJECT_ON */
 | |
| #if defined(CONFIG_MALI_NO_MALI)
 | |
| #define SUPPORT_MALI_NO_MALI
 | |
| #elif defined(MALI_NO_MALI)
 | |
| #if MALI_NO_MALI
 | |
| #define SUPPORT_MALI_NO_MALI
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #if defined(SUPPORT_MALI_NO_MALI) || defined(SUPPORT_MALI_ERROR_INJECT)
 | |
| #include "backend/gpu/mali_kbase_model_dummy.h"
 | |
| #endif
 | |
| 
 | |
| #include "mali_kbase_gpuprops_types.h"
 | |
| 
 | |
| /*
 | |
|  * 10.1:
 | |
|  * - Do mmap in kernel for SAME_VA memory allocations rather then
 | |
|  *   calling back into the kernel as a 2nd stage of the allocation request.
 | |
|  *
 | |
|  * 10.2:
 | |
|  * - Add KBASE_FUNC_MEM_JIT_INIT which allows clients to request a custom VA
 | |
|  *   region for use with JIT (ignored on 32-bit platforms)
 | |
|  *
 | |
|  * 10.3:
 | |
|  * - base_jd_core_req typedef-ed to u32 (instead of to u16)
 | |
|  * - two flags added: BASE_JD_REQ_SKIP_CACHE_STAT / _END
 | |
|  *
 | |
|  * 10.4:
 | |
|  * - Removed KBASE_FUNC_EXT_BUFFER_LOCK used only in internal tests
 | |
|  *
 | |
|  * 10.5:
 | |
|  * - Reverted to performing mmap in user space so that tools like valgrind work.
 | |
|  *
 | |
|  * 10.6:
 | |
|  * - Add flags input variable to KBASE_FUNC_TLSTREAM_ACQUIRE
 | |
|  */
 | |
| #define BASE_UK_VERSION_MAJOR 10
 | |
| #define BASE_UK_VERSION_MINOR 6
 | |
| 
 | |
| #define LINUX_UK_BASE_MAGIC 0x80
 | |
| 
 | |
| struct kbase_uk_mem_alloc {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u64 va_pages;
 | |
| 	u64 commit_pages;
 | |
| 	u64 extent;
 | |
| 	/* IN/OUT */
 | |
| 	u64 flags;
 | |
| 	/* OUT */
 | |
| 	u64 gpu_va;
 | |
| 	u16 va_alignment;
 | |
| 	u8  padding[6];
 | |
| };
 | |
| 
 | |
| struct kbase_uk_mem_free {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u64 gpu_addr;
 | |
| 	/* OUT */
 | |
| };
 | |
| 
 | |
| struct kbase_uk_mem_alias {
 | |
| 	union uk_header header;
 | |
| 	/* IN/OUT */
 | |
| 	u64 flags;
 | |
| 	/* IN */
 | |
| 	u64 stride;
 | |
| 	u64 nents;
 | |
| 	union kbase_pointer ai;
 | |
| 	/* OUT */
 | |
| 	u64         gpu_va;
 | |
| 	u64         va_pages;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_mem_import {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	union kbase_pointer phandle;
 | |
| 	u32 type;
 | |
| 	u32 padding;
 | |
| 	/* IN/OUT */
 | |
| 	u64         flags;
 | |
| 	/* OUT */
 | |
| 	u64 gpu_va;
 | |
| 	u64         va_pages;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_mem_flags_change {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u64 gpu_va;
 | |
| 	u64 flags;
 | |
| 	u64 mask;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_job_submit {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	union kbase_pointer addr;
 | |
| 	u32 nr_atoms;
 | |
| 	u32 stride;		/* bytes between atoms, i.e. sizeof(base_jd_atom_v2) */
 | |
| 	/* OUT */
 | |
| };
 | |
| 
 | |
| struct kbase_uk_post_term {
 | |
| 	union uk_header header;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_sync_now {
 | |
| 	union uk_header header;
 | |
| 
 | |
| 	/* IN */
 | |
| 	struct base_syncset sset;
 | |
| 
 | |
| 	/* OUT */
 | |
| };
 | |
| 
 | |
| struct kbase_uk_hwcnt_setup {
 | |
| 	union uk_header header;
 | |
| 
 | |
| 	/* IN */
 | |
| 	u64 dump_buffer;
 | |
| 	u32 jm_bm;
 | |
| 	u32 shader_bm;
 | |
| 	u32 tiler_bm;
 | |
| 	u32 unused_1; /* keep for backwards compatibility */
 | |
| 	u32 mmu_l2_bm;
 | |
| 	u32 padding;
 | |
| 	/* OUT */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct kbase_uk_hwcnt_reader_setup - User/Kernel space data exchange structure
 | |
|  * @header:       UK structure header
 | |
|  * @buffer_count: requested number of dumping buffers
 | |
|  * @jm_bm:        counters selection bitmask (JM)
 | |
|  * @shader_bm:    counters selection bitmask (Shader)
 | |
|  * @tiler_bm:     counters selection bitmask (Tiler)
 | |
|  * @mmu_l2_bm:    counters selection bitmask (MMU_L2)
 | |
|  * @fd:           dumping notification file descriptor
 | |
|  *
 | |
|  * This structure sets up HWC dumper/reader for this context.
 | |
|  * Multiple instances can be created for single context.
 | |
|  */
 | |
| struct kbase_uk_hwcnt_reader_setup {
 | |
| 	union uk_header header;
 | |
| 
 | |
| 	/* IN */
 | |
| 	u32 buffer_count;
 | |
| 	u32 jm_bm;
 | |
| 	u32 shader_bm;
 | |
| 	u32 tiler_bm;
 | |
| 	u32 mmu_l2_bm;
 | |
| 
 | |
| 	/* OUT */
 | |
| 	s32 fd;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_hwcnt_dump {
 | |
| 	union uk_header header;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_hwcnt_clear {
 | |
| 	union uk_header header;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_fence_validate {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	s32 fd;
 | |
| 	u32 padding;
 | |
| 	/* OUT */
 | |
| };
 | |
| 
 | |
| struct kbase_uk_stream_create {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	char name[32];
 | |
| 	/* OUT */
 | |
| 	s32 fd;
 | |
| 	u32 padding;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_gpuprops {
 | |
| 	union uk_header header;
 | |
| 
 | |
| 	/* IN */
 | |
| 	struct mali_base_gpu_props props;
 | |
| 	/* OUT */
 | |
| };
 | |
| 
 | |
| struct kbase_uk_mem_query {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u64 gpu_addr;
 | |
| #define KBASE_MEM_QUERY_COMMIT_SIZE  1
 | |
| #define KBASE_MEM_QUERY_VA_SIZE      2
 | |
| #define KBASE_MEM_QUERY_FLAGS        3
 | |
| 	u64         query;
 | |
| 	/* OUT */
 | |
| 	u64         value;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_mem_commit {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u64 gpu_addr;
 | |
| 	u64         pages;
 | |
| 	/* OUT */
 | |
| 	u32 result_subcode;
 | |
| 	u32 padding;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_find_cpu_offset {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u64 gpu_addr;
 | |
| 	u64 cpu_addr;
 | |
| 	u64 size;
 | |
| 	/* OUT */
 | |
| 	u64 offset;
 | |
| };
 | |
| 
 | |
| #define KBASE_GET_VERSION_BUFFER_SIZE 64
 | |
| struct kbase_uk_get_ddk_version {
 | |
| 	union uk_header header;
 | |
| 	/* OUT */
 | |
| 	char version_buffer[KBASE_GET_VERSION_BUFFER_SIZE];
 | |
| 	u32 version_string_size;
 | |
| 	u32 padding;
 | |
| 	u32 rk_version;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_disjoint_query {
 | |
| 	union uk_header header;
 | |
| 	/* OUT */
 | |
| 	u32 counter;
 | |
| 	u32 padding;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_set_flags {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u32 create_flags;
 | |
| 	u32 padding;
 | |
| };
 | |
| 
 | |
| #if MALI_UNIT_TEST
 | |
| #define TEST_ADDR_COUNT 4
 | |
| #define KBASE_TEST_BUFFER_SIZE 128
 | |
| struct kbase_exported_test_data {
 | |
| 	u64 test_addr[TEST_ADDR_COUNT];		/**< memory address */
 | |
| 	u32 test_addr_pages[TEST_ADDR_COUNT];		/**<  memory size in pages */
 | |
| 	union kbase_pointer kctx;				/**<  base context created by process */
 | |
| 	union kbase_pointer mm;				/**< pointer to process address space */
 | |
| 	u8 buffer1[KBASE_TEST_BUFFER_SIZE];   /**<  unit test defined parameter */
 | |
| 	u8 buffer2[KBASE_TEST_BUFFER_SIZE];   /**<  unit test defined parameter */
 | |
| };
 | |
| 
 | |
| struct kbase_uk_set_test_data {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	struct kbase_exported_test_data test_data;
 | |
| };
 | |
| 
 | |
| #endif				/* MALI_UNIT_TEST */
 | |
| 
 | |
| #ifdef SUPPORT_MALI_ERROR_INJECT
 | |
| struct kbase_uk_error_params {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	struct kbase_error_params params;
 | |
| };
 | |
| #endif				/* SUPPORT_MALI_ERROR_INJECT */
 | |
| 
 | |
| #ifdef SUPPORT_MALI_NO_MALI
 | |
| struct kbase_uk_model_control_params {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	struct kbase_model_control_params params;
 | |
| };
 | |
| #endif				/* SUPPORT_MALI_NO_MALI */
 | |
| 
 | |
| #ifdef BASE_LEGACY_UK8_SUPPORT
 | |
| struct kbase_uk_keep_gpu_powered {
 | |
| 	union uk_header header;
 | |
| 	u32       enabled;
 | |
| 	u32       padding;
 | |
| };
 | |
| #endif /* BASE_LEGACY_UK8_SUPPORT */
 | |
| 
 | |
| struct kbase_uk_profiling_controls {
 | |
| 	union uk_header header;
 | |
| 	u32 profiling_controls[FBDUMP_CONTROL_MAX];
 | |
| };
 | |
| 
 | |
| struct kbase_uk_debugfs_mem_profile_add {
 | |
| 	union uk_header header;
 | |
| 	u32 len;
 | |
| 	u32 padding;
 | |
| 	union kbase_pointer buf;
 | |
| };
 | |
| 
 | |
| struct kbase_uk_context_id {
 | |
| 	union uk_header header;
 | |
| 	/* OUT */
 | |
| 	int id;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct kbase_uk_tlstream_acquire - User/Kernel space data exchange structure
 | |
|  * @header: UK structure header
 | |
|  * @flags:  timeline stream flags
 | |
|  * @fd:     timeline stream file descriptor
 | |
|  *
 | |
|  * This structure is used when performing a call to acquire kernel side timeline
 | |
|  * stream file descriptor.
 | |
|  */
 | |
| struct kbase_uk_tlstream_acquire {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u32 flags;
 | |
| 	/* OUT */
 | |
| 	s32  fd;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct kbase_uk_tlstream_acquire_v10_4 - User/Kernel space data exchange
 | |
|  *                                          structure
 | |
|  * @header: UK structure header
 | |
|  * @fd:     timeline stream file descriptor
 | |
|  *
 | |
|  * This structure is used when performing a call to acquire kernel side timeline
 | |
|  * stream file descriptor.
 | |
|  */
 | |
| struct kbase_uk_tlstream_acquire_v10_4 {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	/* OUT */
 | |
| 	s32  fd;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct kbase_uk_tlstream_flush - User/Kernel space data exchange structure
 | |
|  * @header: UK structure header
 | |
|  *
 | |
|  * This structure is used when performing a call to flush kernel side
 | |
|  * timeline streams.
 | |
|  */
 | |
| struct kbase_uk_tlstream_flush {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	/* OUT */
 | |
| };
 | |
| 
 | |
| #if MALI_UNIT_TEST
 | |
| /**
 | |
|  * struct kbase_uk_tlstream_test - User/Kernel space data exchange structure
 | |
|  * @header:    UK structure header
 | |
|  * @tpw_count: number of trace point writers in each context
 | |
|  * @msg_delay: time delay between tracepoints from one writer in milliseconds
 | |
|  * @msg_count: number of trace points written by one writer
 | |
|  * @aux_msg:   if non-zero aux messages will be included
 | |
|  *
 | |
|  * This structure is used when performing a call to start timeline stream test
 | |
|  * embedded in kernel.
 | |
|  */
 | |
| struct kbase_uk_tlstream_test {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u32 tpw_count;
 | |
| 	u32 msg_delay;
 | |
| 	u32 msg_count;
 | |
| 	u32 aux_msg;
 | |
| 	/* OUT */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct kbase_uk_tlstream_stats - User/Kernel space data exchange structure
 | |
|  * @header:          UK structure header
 | |
|  * @bytes_collected: number of bytes read by user
 | |
|  * @bytes_generated: number of bytes generated by tracepoints
 | |
|  *
 | |
|  * This structure is used when performing a call to obtain timeline stream
 | |
|  * statistics.
 | |
|  */
 | |
| struct kbase_uk_tlstream_stats {
 | |
| 	union uk_header header; /**< UK structure header. */
 | |
| 	/* IN */
 | |
| 	/* OUT */
 | |
| 	u32 bytes_collected;
 | |
| 	u32 bytes_generated;
 | |
| };
 | |
| #endif /* MALI_UNIT_TEST */
 | |
| 
 | |
| /**
 | |
|  * struct struct kbase_uk_prfcnt_value for the KBASE_FUNC_SET_PRFCNT_VALUES ioctl
 | |
|  * @header:          UK structure header
 | |
|  * @data:            Counter samples for the dummy model
 | |
|  * @size:............Size of the counter sample data
 | |
|  */
 | |
| struct kbase_uk_prfcnt_values {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u32 *data;
 | |
| 	u32 size;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct kbase_uk_soft_event_update - User/Kernel space data exchange structure
 | |
|  * @header:     UK structure header
 | |
|  * @evt:        the GPU address containing the event
 | |
|  * @new_status: the new event status, must be either BASE_JD_SOFT_EVENT_SET or
 | |
|  *              BASE_JD_SOFT_EVENT_RESET
 | |
|  * @flags:      reserved for future uses, must be set to 0
 | |
|  *
 | |
|  * This structure is used to update the status of a software event. If the
 | |
|  * event's status is set to BASE_JD_SOFT_EVENT_SET, any job currently waiting
 | |
|  * on this event will complete.
 | |
|  */
 | |
| struct kbase_uk_soft_event_update {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u64 evt;
 | |
| 	u32 new_status;
 | |
| 	u32 flags;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * struct kbase_uk_mem_jit_init - User/Kernel space data exchange structure
 | |
|  * @header:     UK structure header
 | |
|  * @va_pages:   Number of virtual pages required for JIT
 | |
|  *
 | |
|  * This structure is used when requesting initialization of JIT.
 | |
|  */
 | |
| struct kbase_uk_mem_jit_init {
 | |
| 	union uk_header header;
 | |
| 	/* IN */
 | |
| 	u64 va_pages;
 | |
| };
 | |
| 
 | |
| enum kbase_uk_function_id {
 | |
| 	KBASE_FUNC_MEM_ALLOC = (UK_FUNC_ID + 0),
 | |
| 	KBASE_FUNC_MEM_IMPORT = (UK_FUNC_ID + 1),
 | |
| 	KBASE_FUNC_MEM_COMMIT = (UK_FUNC_ID + 2),
 | |
| 	KBASE_FUNC_MEM_QUERY = (UK_FUNC_ID + 3),
 | |
| 	KBASE_FUNC_MEM_FREE = (UK_FUNC_ID + 4),
 | |
| 	KBASE_FUNC_MEM_FLAGS_CHANGE = (UK_FUNC_ID + 5),
 | |
| 	KBASE_FUNC_MEM_ALIAS = (UK_FUNC_ID + 6),
 | |
| 
 | |
| #ifdef BASE_LEGACY_UK6_SUPPORT
 | |
| 	KBASE_FUNC_JOB_SUBMIT_UK6 = (UK_FUNC_ID + 7),
 | |
| #endif /* BASE_LEGACY_UK6_SUPPORT */
 | |
| 
 | |
| 	KBASE_FUNC_SYNC  = (UK_FUNC_ID + 8),
 | |
| 
 | |
| 	KBASE_FUNC_POST_TERM = (UK_FUNC_ID + 9),
 | |
| 
 | |
| 	KBASE_FUNC_HWCNT_SETUP = (UK_FUNC_ID + 10),
 | |
| 	KBASE_FUNC_HWCNT_DUMP = (UK_FUNC_ID + 11),
 | |
| 	KBASE_FUNC_HWCNT_CLEAR = (UK_FUNC_ID + 12),
 | |
| 
 | |
| 	KBASE_FUNC_GPU_PROPS_REG_DUMP = (UK_FUNC_ID + 14),
 | |
| 
 | |
| 	KBASE_FUNC_FIND_CPU_OFFSET = (UK_FUNC_ID + 15),
 | |
| 
 | |
| 	KBASE_FUNC_GET_VERSION = (UK_FUNC_ID + 16),
 | |
| 	KBASE_FUNC_SET_FLAGS = (UK_FUNC_ID + 18),
 | |
| 
 | |
| 	KBASE_FUNC_SET_TEST_DATA = (UK_FUNC_ID + 19),
 | |
| 	KBASE_FUNC_INJECT_ERROR = (UK_FUNC_ID + 20),
 | |
| 	KBASE_FUNC_MODEL_CONTROL = (UK_FUNC_ID + 21),
 | |
| 
 | |
| #ifdef BASE_LEGACY_UK8_SUPPORT
 | |
| 	KBASE_FUNC_KEEP_GPU_POWERED = (UK_FUNC_ID + 22),
 | |
| #endif /* BASE_LEGACY_UK8_SUPPORT */
 | |
| 
 | |
| 	KBASE_FUNC_FENCE_VALIDATE = (UK_FUNC_ID + 23),
 | |
| 	KBASE_FUNC_STREAM_CREATE = (UK_FUNC_ID + 24),
 | |
| 	KBASE_FUNC_GET_PROFILING_CONTROLS = (UK_FUNC_ID + 25),
 | |
| 	KBASE_FUNC_SET_PROFILING_CONTROLS = (UK_FUNC_ID + 26),
 | |
| 					    /* to be used only for testing
 | |
| 					    * purposes, otherwise these controls
 | |
| 					    * are set through gator API */
 | |
| 
 | |
| 	KBASE_FUNC_DEBUGFS_MEM_PROFILE_ADD = (UK_FUNC_ID + 27),
 | |
| 	KBASE_FUNC_JOB_SUBMIT = (UK_FUNC_ID + 28),
 | |
| 	KBASE_FUNC_DISJOINT_QUERY = (UK_FUNC_ID + 29),
 | |
| 
 | |
| 	KBASE_FUNC_GET_CONTEXT_ID = (UK_FUNC_ID + 31),
 | |
| 
 | |
| 	KBASE_FUNC_TLSTREAM_ACQUIRE_V10_4 = (UK_FUNC_ID + 32),
 | |
| #if MALI_UNIT_TEST
 | |
| 	KBASE_FUNC_TLSTREAM_TEST = (UK_FUNC_ID + 33),
 | |
| 	KBASE_FUNC_TLSTREAM_STATS = (UK_FUNC_ID + 34),
 | |
| #endif /* MALI_UNIT_TEST */
 | |
| 	KBASE_FUNC_TLSTREAM_FLUSH = (UK_FUNC_ID + 35),
 | |
| 
 | |
| 	KBASE_FUNC_HWCNT_READER_SETUP = (UK_FUNC_ID + 36),
 | |
| 
 | |
| #ifdef SUPPORT_MALI_NO_MALI
 | |
| 	KBASE_FUNC_SET_PRFCNT_VALUES = (UK_FUNC_ID + 37),
 | |
| #endif
 | |
| 
 | |
| 	KBASE_FUNC_SOFT_EVENT_UPDATE = (UK_FUNC_ID + 38),
 | |
| 
 | |
| 	KBASE_FUNC_MEM_JIT_INIT = (UK_FUNC_ID + 39),
 | |
| 
 | |
| 	KBASE_FUNC_TLSTREAM_ACQUIRE = (UK_FUNC_ID + 40),
 | |
| 
 | |
| 	KBASE_FUNC_MAX
 | |
| };
 | |
| 
 | |
| #endif				/* _KBASE_UKU_H_ */
 | |
| 
 |