1 /* 2 * Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License as published by 6 * the Free Software Foundation; either version 2.1 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 */ 18 19 #ifndef __GRULIB_H__ 20 #define __GRULIB_H__ 21 22 #define GRU_BASENAME "gru" 23 #define GRU_FULLNAME "/dev/gru" 24 #define GRU_IOCTL_NUM 'G' 25 26 /* 27 * Maximum number of GRU segments that a user can have open 28 * ZZZ temp - set high for testing. Revisit. 29 */ 30 #define GRU_MAX_OPEN_CONTEXTS 32 31 32 /* Set Number of Request Blocks */ 33 #define GRU_CREATE_CONTEXT _IOWR(GRU_IOCTL_NUM, 1, void *) 34 35 /* Register task as using the slice */ 36 #define GRU_SET_TASK_SLICE _IOWR(GRU_IOCTL_NUM, 5, void *) 37 38 /* Fetch exception detail */ 39 #define GRU_USER_GET_EXCEPTION_DETAIL _IOWR(GRU_IOCTL_NUM, 6, void *) 40 41 /* For user call_os handling - normally a TLB fault */ 42 #define GRU_USER_CALL_OS _IOWR(GRU_IOCTL_NUM, 8, void *) 43 44 /* For user unload context */ 45 #define GRU_USER_UNLOAD_CONTEXT _IOWR(GRU_IOCTL_NUM, 9, void *) 46 47 /* For fetching GRU chiplet status */ 48 #define GRU_GET_CHIPLET_STATUS _IOWR(GRU_IOCTL_NUM, 10, void *) 49 50 /* For user TLB flushing (primarily for tests) */ 51 #define GRU_USER_FLUSH_TLB _IOWR(GRU_IOCTL_NUM, 50, void *) 52 53 /* Get some config options (primarily for tests & emulator) */ 54 #define GRU_GET_CONFIG_INFO _IOWR(GRU_IOCTL_NUM, 51, void *) 55 56 #define CONTEXT_WINDOW_BYTES(th) (GRU_GSEG_PAGESIZE * (th)) 57 #define THREAD_POINTER(p, th) (p + GRU_GSEG_PAGESIZE * (th)) 58 59 /* 60 * Structure used to pass TLB flush parameters to the driver 61 */ 62 struct gru_create_context_req { 63 unsigned long gseg; 64 unsigned int data_segment_bytes; 65 unsigned int control_blocks; 66 unsigned int maximum_thread_count; 67 unsigned int options; 68 }; 69 70 /* 71 * Structure used to pass unload context parameters to the driver 72 */ 73 struct gru_unload_context_req { 74 unsigned long gseg; 75 }; 76 77 /* 78 * Structure used to pass TLB flush parameters to the driver 79 */ 80 struct gru_flush_tlb_req { 81 unsigned long gseg; 82 unsigned long vaddr; 83 size_t len; 84 }; 85 86 /* 87 * GRU configuration info (temp - for testing) 88 */ 89 struct gru_config_info { 90 int cpus; 91 int blades; 92 int nodes; 93 int chiplets; 94 int fill[16]; 95 }; 96 97 #endif /* __GRULIB_H__ */ 98