1/* 2 * dbdefs.h 3 * 4 * DSP-BIOS Bridge driver support functions for TI OMAP processors. 5 * 6 * Global definitions and constants for DSP/BIOS Bridge. 7 * 8 * Copyright (C) 2005-2006 Texas Instruments, Inc. 9 * 10 * This package is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 as 12 * published by the Free Software Foundation. 13 * 14 * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 15 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 16 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 17 */ 18 19#ifndef DBDEFS_ 20#define DBDEFS_ 21 22#include <linux/types.h> 23 24#include <dspbridge/rms_sh.h> /* Types shared between GPP and DSP */ 25 26#define PG_SIZE4K 4096 27#define PG_MASK(pg_size) (~((pg_size)-1)) 28#define PG_ALIGN_LOW(addr, pg_size) ((addr) & PG_MASK(pg_size)) 29#define PG_ALIGN_HIGH(addr, pg_size) (((addr)+(pg_size)-1) & PG_MASK(pg_size)) 30 31/* API return value and calling convention */ 32#define DBAPI int 33 34/* Maximum length of node name, used in dsp_ndbprops */ 35#define DSP_MAXNAMELEN 32 36 37/* notify_type values for the RegisterNotify() functions. */ 38#define DSP_SIGNALEVENT 0x00000001 39 40/* Types of events for processors */ 41#define DSP_PROCESSORSTATECHANGE 0x00000001 42#define DSP_PROCESSORATTACH 0x00000002 43#define DSP_PROCESSORDETACH 0x00000004 44#define DSP_PROCESSORRESTART 0x00000008 45 46/* DSP exception events (DSP/BIOS and DSP MMU fault) */ 47#define DSP_MMUFAULT 0x00000010 48#define DSP_SYSERROR 0x00000020 49#define DSP_EXCEPTIONABORT 0x00000300 50#define DSP_PWRERROR 0x00000080 51#define DSP_WDTOVERFLOW 0x00000040 52 53/* IVA exception events (IVA MMU fault) */ 54#define IVA_MMUFAULT 0x00000040 55/* Types of events for nodes */ 56#define DSP_NODESTATECHANGE 0x00000100 57#define DSP_NODEMESSAGEREADY 0x00000200 58 59/* Types of events for streams */ 60#define DSP_STREAMDONE 0x00001000 61#define DSP_STREAMIOCOMPLETION 0x00002000 62 63/* Handle definition representing the GPP node in DSPNode_Connect() calls */ 64#define DSP_HGPPNODE 0xFFFFFFFF 65 66/* Node directions used in DSPNode_Connect() */ 67#define DSP_TONODE 1 68#define DSP_FROMNODE 2 69 70/* Define Node Minimum and Maximum Priorities */ 71#define DSP_NODE_MIN_PRIORITY 1 72#define DSP_NODE_MAX_PRIORITY 15 73 74/* msg_ctrl contains SM buffer description */ 75#define DSP_RMSBUFDESC RMS_BUFDESC 76 77/* Processor ID numbers */ 78#define DSP_UNIT 0 79#define IVA_UNIT 1 80 81#define DSPWORD unsigned char 82#define DSPWORDSIZE sizeof(DSPWORD) 83 84#define MAX_PROFILES 16 85 86/* DSP chip type */ 87#define DSPTYPE64 0x99 88 89/* Handy Macros */ 90#define VALID_PROC_EVENT (DSP_PROCESSORSTATECHANGE | DSP_PROCESSORATTACH | \ 91 DSP_PROCESSORDETACH | DSP_PROCESSORRESTART | DSP_NODESTATECHANGE | \ 92 DSP_STREAMDONE | DSP_STREAMIOCOMPLETION | DSP_MMUFAULT | \ 93 DSP_SYSERROR | DSP_WDTOVERFLOW | DSP_PWRERROR) 94 95static inline bool is_valid_proc_event(u32 x) 96{ 97 return (x == 0 || (x & VALID_PROC_EVENT && !(x & ~VALID_PROC_EVENT))); 98} 99 100/* The Node UUID structure */ 101struct dsp_uuid { 102 u32 data1; 103 u16 data2; 104 u16 data3; 105 u8 data4; 106 u8 data5; 107 u8 data6[6]; 108}; 109 110/* DCD types */ 111enum dsp_dcdobjtype { 112 DSP_DCDNODETYPE, 113 DSP_DCDPROCESSORTYPE, 114 DSP_DCDLIBRARYTYPE, 115 DSP_DCDCREATELIBTYPE, 116 DSP_DCDEXECUTELIBTYPE, 117 DSP_DCDDELETELIBTYPE, 118 /* DSP_DCDMAXOBJTYPE is meant to be the last DCD object type */ 119 DSP_DCDMAXOBJTYPE 120}; 121 122/* Processor states */ 123enum dsp_procstate { 124 PROC_STOPPED, 125 PROC_LOADED, 126 PROC_RUNNING, 127 PROC_ERROR 128}; 129 130/* 131 * Node types: Message node, task node, xDAIS socket node, and 132 * device node. _NODE_GPP is used when defining a stream connection 133 * between a task or socket node and the GPP. 134 * 135 */ 136enum node_type { 137 NODE_DEVICE, 138 NODE_TASK, 139 NODE_DAISSOCKET, 140 NODE_MESSAGE, 141 NODE_GPP 142}; 143 144/* 145 * ======== node_state ======== 146 * Internal node states. 147 */ 148enum node_state { 149 NODE_ALLOCATED, 150 NODE_CREATED, 151 NODE_RUNNING, 152 NODE_PAUSED, 153 NODE_DONE, 154 NODE_CREATING, 155 NODE_STARTING, 156 NODE_PAUSING, 157 NODE_TERMINATING, 158 NODE_DELETING, 159}; 160 161/* Stream states */ 162enum dsp_streamstate { 163 STREAM_IDLE, 164 STREAM_READY, 165 STREAM_PENDING, 166 STREAM_DONE 167}; 168 169/* Stream connect types */ 170enum dsp_connecttype { 171 CONNECTTYPE_NODEOUTPUT, 172 CONNECTTYPE_GPPOUTPUT, 173 CONNECTTYPE_NODEINPUT, 174 CONNECTTYPE_GPPINPUT 175}; 176 177/* Stream mode types */ 178enum dsp_strmmode { 179 STRMMODE_PROCCOPY, /* Processor(s) copy stream data payloads */ 180 STRMMODE_ZEROCOPY, /* Strm buffer ptrs swapped no data copied */ 181 STRMMODE_LDMA, /* Local DMA : OMAP's System-DMA device */ 182 STRMMODE_RDMA /* Remote DMA: OMAP's DSP-DMA device */ 183}; 184 185/* Resource Types */ 186enum dsp_resourceinfotype { 187 DSP_RESOURCE_DYNDARAM = 0, 188 DSP_RESOURCE_DYNSARAM, 189 DSP_RESOURCE_DYNEXTERNAL, 190 DSP_RESOURCE_DYNSRAM, 191 DSP_RESOURCE_PROCLOAD 192}; 193 194/* Memory Segment Types */ 195enum dsp_memtype { 196 DSP_DYNDARAM = 0, 197 DSP_DYNSARAM, 198 DSP_DYNEXTERNAL, 199 DSP_DYNSRAM 200}; 201 202/* Memory Flush Types */ 203enum dsp_flushtype { 204 PROC_INVALIDATE_MEM = 0, 205 PROC_WRITEBACK_MEM, 206 PROC_WRITEBACK_INVALIDATE_MEM, 207}; 208 209/* Memory Segment Status Values */ 210struct dsp_memstat { 211 u32 size; 212 u32 total_free_size; 213 u32 len_max_free_block; 214 u32 num_free_blocks; 215 u32 num_alloc_blocks; 216}; 217 218/* Processor Load information Values */ 219struct dsp_procloadstat { 220 u32 curr_load; 221 u32 predicted_load; 222 u32 curr_dsp_freq; 223 u32 predicted_freq; 224}; 225 226/* Attributes for STRM connections between nodes */ 227struct dsp_strmattr { 228 u32 seg_id; /* Memory segment on DSP to allocate buffers */ 229 u32 buf_size; /* Buffer size (DSP words) */ 230 u32 num_bufs; /* Number of buffers */ 231 u32 buf_alignment; /* Buffer alignment */ 232 u32 timeout; /* Timeout for blocking STRM calls */ 233 enum dsp_strmmode strm_mode; /* mode of stream when opened */ 234 /* DMA chnl id if dsp_strmmode is LDMA or RDMA */ 235 u32 dma_chnl_id; 236 u32 dma_priority; /* DMA channel priority 0=lowest, >0=high */ 237}; 238 239/* The dsp_cbdata structure */ 240struct dsp_cbdata { 241 u32 cb_data; 242 u8 node_data[1]; 243}; 244 245/* The dsp_msg structure */ 246struct dsp_msg { 247 u32 cmd; 248 u32 arg1; 249 u32 arg2; 250}; 251 252/* The dsp_resourcereqmts structure for node's resource requirements */ 253struct dsp_resourcereqmts { 254 u32 cb_struct; 255 u32 static_data_size; 256 u32 global_data_size; 257 u32 program_mem_size; 258 u32 wc_execution_time; 259 u32 wc_period; 260 u32 wc_deadline; 261 u32 avg_exection_time; 262 u32 minimum_period; 263}; 264 265/* 266 * The dsp_streamconnect structure describes a stream connection 267 * between two nodes, or between a node and the GPP 268 */ 269struct dsp_streamconnect { 270 u32 cb_struct; 271 enum dsp_connecttype connect_type; 272 u32 this_node_stream_index; 273 void *connected_node; 274 struct dsp_uuid ui_connected_node_id; 275 u32 connected_node_stream_index; 276}; 277 278struct dsp_nodeprofs { 279 u32 heap_size; 280}; 281 282/* The dsp_ndbprops structure reports the attributes of a node */ 283struct dsp_ndbprops { 284 u32 cb_struct; 285 struct dsp_uuid ui_node_id; 286 char ac_name[DSP_MAXNAMELEN]; 287 enum node_type ntype; 288 u32 cache_on_gpp; 289 struct dsp_resourcereqmts dsp_resource_reqmts; 290 s32 prio; 291 u32 stack_size; 292 u32 sys_stack_size; 293 u32 stack_seg; 294 u32 message_depth; 295 u32 num_input_streams; 296 u32 num_output_streams; 297 u32 timeout; 298 u32 count_profiles; /* Number of supported profiles */ 299 /* Array of profiles */ 300 struct dsp_nodeprofs node_profiles[MAX_PROFILES]; 301 u32 stack_seg_name; /* Stack Segment Name */ 302}; 303 304 /* The dsp_nodeattrin structure describes the attributes of a 305 * node client */ 306struct dsp_nodeattrin { 307 u32 cb_struct; 308 s32 prio; 309 u32 timeout; 310 u32 profile_id; 311 /* Reserved, for Bridge Internal use only */ 312 u32 heap_size; 313 void *pgpp_virt_addr; /* Reserved, for Bridge Internal use only */ 314}; 315 316 /* The dsp_nodeinfo structure is used to retrieve information 317 * about a node */ 318struct dsp_nodeinfo { 319 u32 cb_struct; 320 struct dsp_ndbprops nb_node_database_props; 321 u32 execution_priority; 322 enum node_state ns_execution_state; 323 void *device_owner; 324 u32 number_streams; 325 struct dsp_streamconnect sc_stream_connection[16]; 326 u32 node_env; 327}; 328 329 /* The dsp_nodeattr structure describes the attributes of a node */ 330struct dsp_nodeattr { 331 u32 cb_struct; 332 struct dsp_nodeattrin in_node_attr_in; 333 u32 node_attr_inputs; 334 u32 node_attr_outputs; 335 struct dsp_nodeinfo node_info; 336}; 337 338/* 339 * Notification type: either the name of an opened event, or an event or 340 * window handle. 341 */ 342struct dsp_notification { 343 char *name; 344 void *handle; 345}; 346 347/* The dsp_processorattrin structure describes the attributes of a processor */ 348struct dsp_processorattrin { 349 u32 cb_struct; 350 u32 timeout; 351}; 352/* 353 * The dsp_processorinfo structure describes basic capabilities of a 354 * DSP processor 355 */ 356struct dsp_processorinfo { 357 u32 cb_struct; 358 int processor_family; 359 int processor_type; 360 u32 clock_rate; 361 u32 internal_mem_size; 362 u32 external_mem_size; 363 u32 processor_id; 364 int ty_running_rtos; 365 s32 node_min_priority; 366 s32 node_max_priority; 367}; 368 369/* Error information of last DSP exception signalled to the GPP */ 370struct dsp_errorinfo { 371 u32 err_mask; 372 u32 val1; 373 u32 val2; 374 u32 val3; 375}; 376 377/* The dsp_processorstate structure describes the state of a DSP processor */ 378struct dsp_processorstate { 379 u32 cb_struct; 380 enum dsp_procstate proc_state; 381}; 382 383/* 384 * The dsp_resourceinfo structure is used to retrieve information about a 385 * processor's resources 386 */ 387struct dsp_resourceinfo { 388 u32 cb_struct; 389 enum dsp_resourceinfotype resource_type; 390 union { 391 u32 resource; 392 struct dsp_memstat mem_stat; 393 struct dsp_procloadstat proc_load_stat; 394 } result; 395}; 396 397/* 398 * The dsp_streamattrin structure describes the attributes of a stream, 399 * including segment and alignment of data buffers allocated with 400 * DSPStream_AllocateBuffers(), if applicable 401 */ 402struct dsp_streamattrin { 403 u32 cb_struct; 404 u32 timeout; 405 u32 segment_id; 406 u32 buf_alignment; 407 u32 num_bufs; 408 enum dsp_strmmode strm_mode; 409 u32 dma_chnl_id; 410 u32 dma_priority; 411}; 412 413/* The dsp_bufferattr structure describes the attributes of a data buffer */ 414struct dsp_bufferattr { 415 u32 cb_struct; 416 u32 segment_id; 417 u32 buf_alignment; 418}; 419 420/* 421 * The dsp_streaminfo structure is used to retrieve information 422 * about a stream. 423 */ 424struct dsp_streaminfo { 425 u32 cb_struct; 426 u32 number_bufs_allowed; 427 u32 number_bufs_in_stream; 428 u32 number_bytes; 429 void *sync_object_handle; 430 enum dsp_streamstate ss_stream_state; 431}; 432 433/* DMM MAP attributes 434It is a bit mask with each bit value indicating a specific attribute 435bit 0 - GPP address type (user virtual=0, physical=1) 436bit 1 - MMU Endianism (Big Endian=1, Little Endian=0) 437bit 2 - MMU mixed page attribute (Mixed/ CPUES=1, TLBES =0) 438bit 3 - MMU element size = 8bit (valid only for non mixed page entries) 439bit 4 - MMU element size = 16bit (valid only for non mixed page entries) 440bit 5 - MMU element size = 32bit (valid only for non mixed page entries) 441bit 6 - MMU element size = 64bit (valid only for non mixed page entries) 442 443bit 14 - Input (read only) buffer 444bit 15 - Output (writeable) buffer 445*/ 446 447/* Types of mapping attributes */ 448 449/* MPU address is virtual and needs to be translated to physical addr */ 450#define DSP_MAPVIRTUALADDR 0x00000000 451#define DSP_MAPPHYSICALADDR 0x00000001 452 453/* Mapped data is big endian */ 454#define DSP_MAPBIGENDIAN 0x00000002 455#define DSP_MAPLITTLEENDIAN 0x00000000 456 457/* Element size is based on DSP r/w access size */ 458#define DSP_MAPMIXEDELEMSIZE 0x00000004 459 460/* 461 * Element size for MMU mapping (8, 16, 32, or 64 bit) 462 * Ignored if DSP_MAPMIXEDELEMSIZE enabled 463 */ 464#define DSP_MAPELEMSIZE8 0x00000008 465#define DSP_MAPELEMSIZE16 0x00000010 466#define DSP_MAPELEMSIZE32 0x00000020 467#define DSP_MAPELEMSIZE64 0x00000040 468 469#define DSP_MAPVMALLOCADDR 0x00000080 470 471#define DSP_MAPDONOTLOCK 0x00000100 472 473#define DSP_MAP_DIR_MASK 0x3FFF 474 475#define GEM_CACHE_LINE_SIZE 128 476#define GEM_L1P_PREFETCH_SIZE 128 477 478/* 479 * Definitions from dbreg.h 480 */ 481 482#define DSPPROCTYPE_C64 6410 483#define IVAPROCTYPE_ARM7 470 484 485/* Max registry path length. Also the max registry value length. */ 486#define MAXREGPATHLENGTH 255 487 488#endif /* DBDEFS_ */ 489