blob: c20576a6f4b204ea262a14f2533dd31d9f1ad3e7 [file] [log] [blame]
Yan Hec53399f2013-03-12 16:15:13 -07001/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13/* Smart-Peripheral-Switch (SPS) API. */
14
15#ifndef _SPS_H_
16#define _SPS_H_
17
18#include <linux/types.h> /* u32 */
19
20/* SPS device handle indicating use of system memory */
21#define SPS_DEV_HANDLE_MEM ((u32)0x7ffffffful)
22
23/* SPS device handle indicating use of BAM-DMA */
24
25/* SPS device handle invalid value */
26#define SPS_DEV_HANDLE_INVALID ((u32)0)
27
28/* BAM invalid IRQ value */
29#define SPS_IRQ_INVALID 0
30
31/* Invalid address value */
32#define SPS_ADDR_INVALID 0
33
34/* Invalid peripheral device enumeration class */
35#define SPS_CLASS_INVALID ((u32)-1)
36
37/*
38 * This value specifies different configurations for an SPS connection.
39 * A non-default value instructs the SPS driver to search for the configuration
40 * in the fixed connection mapping table.
41 */
42#define SPS_CONFIG_DEFAULT 0
43
44/*
45 * This value instructs the SPS driver to use the default BAM-DMA channel
46 * threshold
47 */
48#define SPS_DMA_THRESHOLD_DEFAULT 0
49
50/* Flag bits supported by SPS hardware for struct sps_iovec */
51#define SPS_IOVEC_FLAG_INT 0x8000 /* Generate interrupt */
52#define SPS_IOVEC_FLAG_EOT 0x4000 /* Generate end-of-transfer indication */
53#define SPS_IOVEC_FLAG_EOB 0x2000 /* Generate end-of-block indication */
Yan Hef879bb02011-12-22 15:38:03 -080054#define SPS_IOVEC_FLAG_NWD 0x1000 /* notify when done */
55#define SPS_IOVEC_FLAG_CMD 0x0800 /* command descriptor */
56#define SPS_IOVEC_FLAG_LOCK 0x0400 /* pipe lock */
57#define SPS_IOVEC_FLAG_UNLOCK 0x0200 /* pipe unlock */
58#define SPS_IOVEC_FLAG_IMME 0x0100 /* immediate command descriptor */
59#define SPS_IOVEC_FLAG_NO_SUBMIT 0x0002 /* Do not submit descriptor to HW */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070060#define SPS_IOVEC_FLAG_DEFAULT 0x0001 /* Use driver default */
61
Yan He9b453682012-08-07 11:32:17 -070062/* Maximum descriptor/iovec size */
63#define SPS_IOVEC_MAX_SIZE (32 * 1024 - 1) /* 32K-1 bytes due to HW limit */
64
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070065/* BAM device options flags */
66
67/*
68 * BAM will be configured and enabled at boot. Otherwise, BAM will be
69 * configured and enabled when first pipe connect occurs.
70 */
71#define SPS_BAM_OPT_ENABLE_AT_BOOT 1UL
72/* BAM IRQ is disabled */
73#define SPS_BAM_OPT_IRQ_DISABLED (1UL << 1)
74/* BAM peripheral is a BAM-DMA */
75#define SPS_BAM_OPT_BAMDMA (1UL << 2)
Yan Hec324a792011-11-10 17:19:48 -080076/* BAM IRQ is registered for apps wakeup */
77#define SPS_BAM_OPT_IRQ_WAKEUP (1UL << 3)
Yan He821e2762012-08-22 16:49:43 -070078/* Ignore external block pipe reset */
79#define SPS_BAM_NO_EXT_P_RST (1UL << 4)
Yan He7c775b42012-12-20 16:04:24 -080080/* Don't enable local clock gating */
81#define SPS_BAM_NO_LOCAL_CLK_GATING (1UL << 5)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070082
83/* BAM device management flags */
84
85/* BAM global device control is managed remotely */
86#define SPS_BAM_MGR_DEVICE_REMOTE 1UL
87/* BAM device supports multiple execution environments */
88#define SPS_BAM_MGR_MULTI_EE (1UL << 1)
89/* BAM pipes are *not* allocated locally */
90#define SPS_BAM_MGR_PIPE_NO_ALLOC (1UL << 2)
91/* BAM pipes are *not* configured locally */
92#define SPS_BAM_MGR_PIPE_NO_CONFIG (1UL << 3)
93/* BAM pipes are *not* controlled locally */
94#define SPS_BAM_MGR_PIPE_NO_CTRL (1UL << 4)
95/* "Globbed" management properties */
96#define SPS_BAM_MGR_NONE \
97 (SPS_BAM_MGR_DEVICE_REMOTE | SPS_BAM_MGR_PIPE_NO_ALLOC | \
98 SPS_BAM_MGR_PIPE_NO_CONFIG | SPS_BAM_MGR_PIPE_NO_CTRL)
99#define SPS_BAM_MGR_LOCAL 0
100#define SPS_BAM_MGR_LOCAL_SHARED SPS_BAM_MGR_MULTI_EE
101#define SPS_BAM_MGR_REMOTE_SHARED \
102 (SPS_BAM_MGR_DEVICE_REMOTE | SPS_BAM_MGR_MULTI_EE | \
103 SPS_BAM_MGR_PIPE_NO_ALLOC)
104#define SPS_BAM_MGR_ACCESS_MASK SPS_BAM_MGR_NONE
105
106/*
107 * BAM security configuration
108 */
109#define SPS_BAM_NUM_EES 4
110#define SPS_BAM_SEC_DO_NOT_CONFIG 0
111#define SPS_BAM_SEC_DO_CONFIG 0x0A434553
112
Yan He0eead892012-07-03 17:38:56 -0700113/* BAM pipe selection */
114#define SPS_BAM_PIPE(n) (1UL << (n))
115
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700116/* This enum specifies the operational mode for an SPS connection */
117enum sps_mode {
118 SPS_MODE_SRC = 0, /* end point is the source (producer) */
119 SPS_MODE_DEST, /* end point is the destination (consumer) */
120};
121
122
123/*
124 * This enum is a set of bit flag options for SPS connection.
125 * The enums should be OR'd together to create the option set
126 * for the SPS connection.
127 */
128enum sps_option {
129 /*
130 * Options to enable specific SPS hardware interrupts.
131 * These bit flags are also used to indicate interrupt source
132 * for the SPS_EVENT_IRQ event.
133 */
134 SPS_O_DESC_DONE = 0x00000001, /* Descriptor processed */
135 SPS_O_INACTIVE = 0x00000002, /* Inactivity timeout */
136 SPS_O_WAKEUP = 0x00000004, /* Peripheral wake up */
137 SPS_O_OUT_OF_DESC = 0x00000008,/* Out of descriptors */
138 SPS_O_ERROR = 0x00000010, /* Error */
139 SPS_O_EOT = 0x00000020, /* End-of-transfer */
140
141 /* Options to enable hardware features */
142 SPS_O_STREAMING = 0x00010000, /* Enable streaming mode (no EOT) */
143 /* Use MTI/SETPEND instead of BAM interrupt */
144 SPS_O_IRQ_MTI = 0x00020000,
Yan Hef879bb02011-12-22 15:38:03 -0800145 /* NWD bit written with EOT for BAM2BAM producer pipe */
146 SPS_O_WRITE_NWD = 0x00040000,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700147
148 /* Options to enable software features */
149 /* Transfer operation should be polled */
150 SPS_O_POLL = 0x01000000,
151 /* Disable queuing of transfer events for the connection end point */
152 SPS_O_NO_Q = 0x02000000,
153 SPS_O_FLOWOFF = 0x04000000, /* Graceful halt */
154 /* SPS_O_WAKEUP will be disabled after triggered */
155 SPS_O_WAKEUP_IS_ONESHOT = 0x08000000,
156 /**
157 * Client must read each descriptor from the FIFO
158 * using sps_get_iovec()
159 */
160 SPS_O_ACK_TRANSFERS = 0x10000000,
161 /* Connection is automatically enabled */
162 SPS_O_AUTO_ENABLE = 0x20000000,
163 /* DISABLE endpoint synchronization for config/enable/disable */
164 SPS_O_NO_EP_SYNC = 0x40000000,
Yan He2295c272012-11-26 16:56:11 -0800165 /* Allow partial polling duing IRQ mode */
166 SPS_O_HYBRID = 0x80000000,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700167};
168
169/**
170 * This enum specifies BAM DMA channel priority. Clients should use
171 * SPS_DMA_PRI_DEFAULT unless a specific priority is required.
172 */
173enum sps_dma_priority {
174 SPS_DMA_PRI_DEFAULT = 0,
175 SPS_DMA_PRI_LOW,
176 SPS_DMA_PRI_MED,
177 SPS_DMA_PRI_HIGH,
178};
179
180/*
181 * This enum specifies the ownership of a connection resource.
182 * Remote or shared ownership is only possible/meaningful on the processor
183 * that controls resource.
184 */
185enum sps_owner {
186 SPS_OWNER_LOCAL = 0x1, /* Resource is owned by local processor */
187 SPS_OWNER_REMOTE = 0x2, /* Resource is owned by a satellite processor */
188};
189
190/* This enum indicates the event associated with a client event trigger */
191enum sps_event {
192 SPS_EVENT_INVALID = 0,
193
194 SPS_EVENT_EOT, /* End-of-transfer */
195 SPS_EVENT_DESC_DONE, /* Descriptor processed */
196 SPS_EVENT_OUT_OF_DESC, /* Out of descriptors */
197 SPS_EVENT_WAKEUP, /* Peripheral wake up */
198 SPS_EVENT_FLOWOFF, /* Graceful halt (idle) */
199 SPS_EVENT_INACTIVE, /* Inactivity timeout */
200 SPS_EVENT_ERROR, /* Error */
201 SPS_EVENT_MAX,
202};
203
204/*
205 * This enum specifies the event trigger mode and is an argument for the
206 * sps_register_event() function.
207 */
208enum sps_trigger {
209 /* Trigger with payload for callback */
210 SPS_TRIGGER_CALLBACK = 0,
211 /* Trigger without payload for wait or poll */
212 SPS_TRIGGER_WAIT,
213};
214
215/*
216 * This enum indicates the desired halting mechanism and is an argument for the
217 * sps_flow_off() function
218 */
219enum sps_flow_off {
220 SPS_FLOWOFF_FORCED = 0, /* Force hardware into halt state */
221 /* Allow hardware to empty pipe before halting */
222 SPS_FLOWOFF_GRACEFUL,
223};
224
225/*
226 * This enum indicates the target memory heap and is an argument for the
227 * sps_mem_alloc() function.
228 */
229enum sps_mem {
230 SPS_MEM_LOCAL = 0, /* SPS subsystem local (pipe) memory */
231 SPS_MEM_UC, /* Microcontroller (ARM7) local memory */
232};
233
234/*
235 * This enum indicates a timer control operation and is an argument for the
236 * sps_timer_ctrl() function.
237 */
238enum sps_timer_op {
239 SPS_TIMER_OP_CONFIG = 0,
240 SPS_TIMER_OP_RESET,
241/* SPS_TIMER_OP_START, Not supported by hardware yet */
242/* SPS_TIMER_OP_STOP, Not supported by hardware yet */
243 SPS_TIMER_OP_READ,
244};
245
246/*
247 * This enum indicates the inactivity timer operating mode and is an
248 * argument for the sps_timer_ctrl() function.
249 */
250enum sps_timer_mode {
251 SPS_TIMER_MODE_ONESHOT = 0,
252/* SPS_TIMER_MODE_PERIODIC, Not supported by hardware yet */
253};
254
Yan Hefcddf6f2012-03-13 12:41:18 -0700255/* This enum indicates the cases when callback the user of BAM */
256enum sps_callback_case {
257 SPS_CALLBACK_BAM_ERROR_IRQ = 1, /* BAM ERROR IRQ */
258 SPS_CALLBACK_BAM_HRESP_ERR_IRQ, /* Erroneous HResponse */
259};
260
Yan Hef879bb02011-12-22 15:38:03 -0800261/*
262 * This enum indicates the command type in a command element
263 */
264enum sps_command_type {
265 SPS_WRITE_COMMAND = 0,
266 SPS_READ_COMMAND,
267};
268
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700269/**
270 * This data type corresponds to the native I/O vector (BAM descriptor)
271 * supported by SPS hardware
272 *
273 * @addr - Buffer physical address.
274 * @size - Buffer size in bytes.
275 * @flags -Flag bitmask (see SPS_IOVEC_FLAG_ #defines).
276 *
277 */
278struct sps_iovec {
279 u32 addr;
280 u32 size:16;
281 u32 flags:16;
282};
283
Yan Hef879bb02011-12-22 15:38:03 -0800284/**
285 * This data type corresponds to the native Command Element
286 * supported by SPS hardware
287 *
288 * @addr - register address.
289 * @command - command type.
290 * @data - for write command: content to be written into peripheral register.
291 * for read command: dest addr to write peripheral register value to.
292 * @mask - register mask.
293 * @reserved - for future usage.
294 *
295 */
296struct sps_command_element {
297 u32 addr:24;
298 u32 command:8;
299 u32 data;
300 u32 mask;
301 u32 reserved;
302};
303
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700304/*
305 * BAM device's security configuation
306 */
307struct sps_bam_pipe_sec_config_props {
308 u32 pipe_mask;
309 u32 vmid;
310};
311
312struct sps_bam_sec_config_props {
313 /* Per-EE configuration - This is a pipe bit mask for each EE */
314 struct sps_bam_pipe_sec_config_props ees[SPS_BAM_NUM_EES];
315};
316
317/**
318 * This struct defines a BAM device. The client must memset() this struct to
319 * zero before writing device information. A value of zero for uninitialized
320 * values will instruct the SPS driver to use general defaults or
321 * hardware/BIOS supplied values.
322 *
323 *
324 * @options - See SPS_BAM_OPT_* bit flag.
325 * @phys_addr - BAM base physical address (not peripheral address).
326 * @virt_addr - BAM base virtual address.
327 * @virt_size - For virtual mapping.
328 * @irq - IRQ enum for use in ISR vector install.
329 * @num_pipes - number of pipes. Can be read from hardware.
330 * @summing_threshold - BAM event threshold.
331 *
332 * @periph_class - Peripheral device enumeration class.
333 * @periph_dev_id - Peripheral global device ID.
334 * @periph_phys_addr - Peripheral base physical address, for BAM-DMA only.
335 * @periph_virt_addr - Peripheral base virtual address.
336 * @periph_virt_size - Size for virtual mapping.
337 *
Yan Hefcddf6f2012-03-13 12:41:18 -0700338 * @callback - callback function for BAM user.
339 * @user - pointer to user data.
340 *
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700341 * @event_threshold - Pipe event threshold.
342 * @desc_size - Size (bytes) of descriptor FIFO.
343 * @data_size - Size (bytes) of data FIFO.
344 * @desc_mem_id - Heap ID for default descriptor FIFO allocations.
345 * @data_mem_id - Heap ID for default data FIFO allocations.
346 *
347 * @manage - BAM device management flags (see SPS_BAM_MGR_*).
348 * @restricted_pipes - Bitmask of pipes restricted from local use.
349 * @ee - Local execution environment index.
350 *
351 * @irq_gen_addr - MTI interrupt generation address. This configuration only
352 * applies to BAM rev 1 and 2 hardware. MTIs are only supported on BAMs when
353 * global config is controlled by a remote processor.
354 * NOTE: This address must correspond to the MTI associated with the "irq" IRQ
355 * enum specified above.
356 *
357 * @sec_config - must be set to SPS_BAM_SEC_DO_CONFIG to perform BAM security
358 * configuration. Only the processor that manages the BAM is allowed to
359 * perform the configuration. The global (top-level) BAM interrupt will be
360 * assigned to the EE of the processor that manages the BAM.
361 *
362 * @p_sec_config_props - BAM device's security configuation
363 *
364 */
365struct sps_bam_props {
366
367 /* BAM device properties. */
368
369 u32 options;
370 u32 phys_addr;
371 void *virt_addr;
372 u32 virt_size;
373 u32 irq;
374 u32 num_pipes;
375 u32 summing_threshold;
376
377 /* Peripheral device properties */
378
379 u32 periph_class;
380 u32 periph_dev_id;
381 u32 periph_phys_addr;
382 void *periph_virt_addr;
383 u32 periph_virt_size;
384
385 /* Connection pipe parameter defaults. */
386
387 u32 event_threshold;
388 u32 desc_size;
389 u32 data_size;
390 u32 desc_mem_id;
391 u32 data_mem_id;
392
Yan Hefcddf6f2012-03-13 12:41:18 -0700393 /* Feedback to BAM user */
394 void (*callback)(enum sps_callback_case, void *);
395 void *user;
396
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700397 /* Security properties */
398
399 u32 manage;
400 u32 restricted_pipes;
401 u32 ee;
402
403 /* BAM MTI interrupt generation */
404
405 u32 irq_gen_addr;
406
407 /* Security configuration properties */
408
409 u32 sec_config;
410 struct sps_bam_sec_config_props *p_sec_config_props;
411};
412
413/**
414 * This struct specifies memory buffer properties.
415 *
416 * @base - Buffer virtual address.
417 * @phys_base - Buffer physical address.
418 * @size - Specifies buffer size (or maximum size).
419 * @min_size - If non-zero, specifies buffer minimum size.
420 *
421 */
422struct sps_mem_buffer {
423 void *base;
424 u32 phys_base;
425 u32 size;
426 u32 min_size;
427};
428
429/**
430 * This struct defines a connection's end point and is used as the argument
431 * for the sps_connect(), sps_get_config(), and sps_set_config() functions.
432 * For system mode pipe, use SPS_DEV_HANDLE_MEM for the end point that
433 * corresponds to system memory.
434 *
435 * The client can force SPS to reserve a specific pipe on a BAM.
436 * If the pipe is in use, the sps_connect/set_config() will fail.
437 *
438 * @source - Source BAM.
439 * @src_pipe_index - BAM pipe index, 0 to 30.
440 * @destination - Destination BAM.
441 * @dest_pipe_index - BAM pipe index, 0 to 30.
442 *
443 * @mode - specifies which end (source or destination) of the connection will
444 * be controlled/referenced by the client.
445 *
446 * @config - This value is for future use and should be set to
447 * SPS_CONFIG_DEFAULT or left as default from sps_get_config().
448 *
449 * @options - OR'd connection end point options (see SPS_O defines).
450 *
451 * WARNING: The memory provided should be physically contiguous and non-cached.
452 * The user can use one of the following:
453 * 1. sps_alloc_mem() - allocated from pipe-memory.
454 * 2. dma_alloc_coherent() - allocate coherent DMA memory.
455 * 3. dma_map_single() - for using memory allocated by kmalloc().
456 *
457 * @desc - Descriptor FIFO.
458 * @data - Data FIFO (BAM-to-BAM mode only).
459 *
460 * @event_thresh - Pipe event threshold or derivative.
Yan Hef879bb02011-12-22 15:38:03 -0800461 * @lock_group - The lock group this pipe belongs to.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700462 *
463 * @sps_reserved - Reserved word - client must not modify.
464 *
465 */
466struct sps_connect {
467 u32 source;
468 u32 src_pipe_index;
469 u32 destination;
470 u32 dest_pipe_index;
471
472 enum sps_mode mode;
473
474 u32 config;
475
476 enum sps_option options;
477
478 struct sps_mem_buffer desc;
479 struct sps_mem_buffer data;
480
481 u32 event_thresh;
482
Yan Hef879bb02011-12-22 15:38:03 -0800483 u32 lock_group;
484
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700485 /* SETPEND/MTI interrupt generation parameters */
486
487 u32 irq_gen_addr;
488 u32 irq_gen_data;
489
490 u32 sps_reserved;
491
492};
493
494/**
495 * This struct defines a satellite connection's end point. The client of the
496 * SPS driver on the satellite processor must call sps_get_config() to
497 * initialize a struct sps_connect, then copy the values from the struct
498 * sps_satellite to the struct sps_connect before making the sps_connect()
499 * call to the satellite SPS driver.
500 *
501 */
502struct sps_satellite {
503 /**
504 * These values must be copied to either the source or destination
505 * corresponding values in the connect struct.
506 */
507 u32 dev;
508 u32 pipe_index;
509
510 /**
511 * These values must be copied to the corresponding values in the
512 * connect struct
513 */
514 u32 config;
515 enum sps_option options;
516
517};
518
519/**
520 * This struct defines parameters for allocation of a BAM DMA channel. The
521 * client must memset() this struct to zero before writing allocation
522 * information. A value of zero for uninitialized values will instruct
523 * the SPS driver to use defaults or "don't care".
524 *
525 * @dev - Associated BAM device handle, or SPS_DEV_HANDLE_DMA.
526 *
527 * @src_owner - Source owner processor ID.
528 * @dest_owner - Destination owner processor ID.
529 *
530 */
531struct sps_alloc_dma_chan {
532 u32 dev;
533
534 /* BAM DMA channel configuration parameters */
535
536 u32 threshold;
537 enum sps_dma_priority priority;
538
539 /**
540 * Owner IDs are global host processor identifiers used by the system
541 * SROT when establishing execution environments.
542 */
543 u32 src_owner;
544 u32 dest_owner;
545
546};
547
548/**
549 * This struct defines parameters for an allocated BAM DMA channel.
550 *
551 * @dev - BAM DMA device handle.
552 * @dest_pipe_index - Destination/input/write pipe index.
553 * @src_pipe_index - Source/output/read pipe index.
554 *
555 */
556struct sps_dma_chan {
557 u32 dev;
558 u32 dest_pipe_index;
559 u32 src_pipe_index;
560};
561
562/**
563 * This struct is an argument passed payload when triggering a callback event
564 * object registered for an SPS connection end point.
565 *
566 * @user - Pointer registered with sps_register_event().
567 *
568 * @event_id - Which event.
569 *
570 * @iovec - The associated I/O vector. If the end point is a system-mode
571 * producer, the size will reflect the actual number of bytes written to the
572 * buffer by the pipe. NOTE: If this I/O vector was part of a set submitted to
573 * sps_transfer(), then the vector array itself will be updated with all of
574 * the actual counts.
575 *
576 * @user - Pointer registered with the transfer.
577 *
578 */
579struct sps_event_notify {
580 void *user;
581
582 enum sps_event event_id;
583
584 /* Data associated with the event */
585
586 union {
587 /* Data for SPS_EVENT_IRQ */
588 struct {
589 u32 mask;
590 } irq;
591
592 /* Data for SPS_EVENT_EOT or SPS_EVENT_DESC_DONE */
593
594 struct {
595 struct sps_iovec iovec;
596 void *user;
597 } transfer;
598
599 /* Data for SPS_EVENT_ERROR */
600
601 struct {
602 u32 status;
603 } err;
604
605 } data;
606};
607
608/**
609 * This struct defines a event registration parameters and is used as the
610 * argument for the sps_register_event() function.
611 *
612 * @options - Event options that will trigger the event object.
613 * @mode - Event trigger mode.
614 *
615 * @xfer_done - a pointer to a completion object. NULL if not in use.
616 *
617 * @callback - a callback to call on completion. NULL if not in use.
618 *
619 * @user - User pointer that will be provided in event callback data.
620 *
621 */
622struct sps_register_event {
623 enum sps_option options;
624 enum sps_trigger mode;
625 struct completion *xfer_done;
626 void (*callback)(struct sps_event_notify *notify);
627 void *user;
628};
629
630/**
631 * This struct defines a system memory transfer's parameters and is used as the
632 * argument for the sps_transfer() function.
633 *
634 * @iovec_phys - Physical address of I/O vectors buffer.
635 * @iovec - Pointer to I/O vectors buffer.
636 * @iovec_count - Number of I/O vectors.
637 * @user - User pointer passed in callback event.
638 *
639 */
640struct sps_transfer {
641 u32 iovec_phys;
642 struct sps_iovec *iovec;
643 u32 iovec_count;
644 void *user;
645};
646
647/**
648 * This struct defines a timer control operation parameters and is used as an
649 * argument for the sps_timer_ctrl() function.
650 *
651 * @op - Timer control operation.
652 * @timeout_msec - Inactivity timeout (msec).
653 *
654 */
655struct sps_timer_ctrl {
656 enum sps_timer_op op;
657
658 /**
659 * The following configuration parameters must be set when the timer
660 * control operation is SPS_TIMER_OP_CONFIG.
661 */
662 enum sps_timer_mode mode;
663 u32 timeout_msec;
664};
665
666/**
667 * This struct defines a timer control operation result and is used as an
668 * argument for the sps_timer_ctrl() function.
669 */
670struct sps_timer_result {
671 u32 current_timer;
672};
673
674
675/*----------------------------------------------------------------------------
676 * Functions specific to sps interface
677 * -------------------------------------------------------------------------*/
678struct sps_pipe; /* Forward declaration */
679
Yan He2eafd742012-04-09 16:07:15 -0700680#ifdef CONFIG_SPS
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700681/**
682 * Register a BAM device
683 *
684 * This function registers a BAM device with the SPS driver. For each
685 *peripheral that includes a BAM, the peripheral driver must register
686 * the BAM with the SPS driver.
687 *
688 * A requirement is that the peripheral driver must remain attached
689 * to the SPS driver until the BAM is deregistered. Otherwise, the
690 * system may attempt to unload the SPS driver. BAM registrations would
691 * be lost.
692 *
693 * @bam_props - Pointer to struct for BAM device properties.
694 *
695 * @dev_handle - Device handle will be written to this location (output).
696 *
697 * @return 0 on success, negative value on error
698 *
699 */
700int sps_register_bam_device(const struct sps_bam_props *bam_props,
701 u32 *dev_handle);
702
703/**
704 * Deregister a BAM device
705 *
706 * This function deregisters a BAM device from the SPS driver. The peripheral
707 * driver should deregister a BAM when the peripheral driver is shut down or
708 * when BAM use should be disabled.
709 *
710 * A BAM cannot be deregistered if any of its pipes is in an active connection.
711 *
712 * When all BAMs have been deregistered, the system is free to unload the
713 * SPS driver.
714 *
715 * @dev_handle - BAM device handle.
716 *
717 * @return 0 on success, negative value on error
718 *
719 */
720int sps_deregister_bam_device(u32 dev_handle);
721
722/**
723 * Allocate client state context
724 *
725 * This function allocate and initializes a client state context struct.
726 *
727 * @return pointer to client state context
728 *
729 */
730struct sps_pipe *sps_alloc_endpoint(void);
731
732/**
733 * Free client state context
734 *
735 * This function de-initializes and free a client state context struct.
736 *
737 * @ctx - client context for SPS connection end point
738 *
739 * @return 0 on success, negative value on error
740 *
741 */
742int sps_free_endpoint(struct sps_pipe *h);
743
744/**
745 * Get the configuration parameters for an SPS connection end point
746 *
747 * This function retrieves the configuration parameters for an SPS connection
748 * end point.
749 * This function may be called before the end point is connected (before
750 * sps_connect is called). This allows the client to specify parameters before
751 * the connection is established.
752 *
753 * The client must call this function to fill it's struct sps_connect
754 * struct before modifying values and passing the struct to sps_set_config().
755 *
756 * @h - client context for SPS connection end point
757 *
758 * @config - Pointer to buffer for the end point's configuration parameters.
759 * Must not be NULL.
760 *
761 * @return 0 on success, negative value on error
762 *
763 */
764int sps_get_config(struct sps_pipe *h, struct sps_connect *config);
765
766/**
767 * Allocate memory from the SPS Pipe-Memory.
768 *
769 * @h - client context for SPS connection end point
770 *
771 * @mem - memory type - N/A.
772 *
773 * @mem_buffer - Pointer to struct for allocated memory properties.
774 *
775 * @return 0 on success, negative value on error
776 *
777 */
778int sps_alloc_mem(struct sps_pipe *h, enum sps_mem mem,
779 struct sps_mem_buffer *mem_buffer);
780
781/**
782 * Free memory from the SPS Pipe-Memory.
783 *
784 * @h - client context for SPS connection end point
785 *
786 * @mem_buffer - Pointer to struct for allocated memory properties.
787 *
788 * @return 0 on success, negative value on error
789 *
790 */
791int sps_free_mem(struct sps_pipe *h, struct sps_mem_buffer *mem_buffer);
792
793/**
794 * Connect an SPS connection end point
795 *
796 * This function creates a connection between two SPS peripherals or between
797 * an SPS peripheral and the local host processor (via system memory, end
798 *point SPS_DEV_HANDLE_MEM). Establishing the connection includes
799 * initialization of the SPS hardware and allocation of any other connection
800 * resources (buffer memory, etc.).
801 *
802 * This function requires the client to specify both the source and
803 * destination end points of the SPS connection. However, the handle
804 * returned applies only to the end point of the connection that the client
805 * controls. The end point under control must be specified by the
806 * enum sps_mode mode argument, either SPS_MODE_SRC, SPS_MODE_DEST, or
807 * SPS_MODE_CTL. Note that SPS_MODE_CTL is only supported for I/O
808 * accelerator connections, and only a limited set of control operations are
809 * allowed (TBD).
810 *
811 * For a connection involving system memory
812 * (SPS_DEV_HANDLE_MEM), the peripheral end point must be
813 * specified. For example, SPS_MODE_SRC must be specified for a
814 * BAM-to-system connection, since the BAM pipe is the data
815 * producer.
816 *
817 * For a specific peripheral-to-peripheral connection, there may be more than
818 * one required configuration. For example, there might be high-performance
819 * and low-power configurations for a connection between the two peripherals.
820 * The config argument allows the client to specify different configurations,
821 * which may require different system resource allocations and hardware
822 * initialization.
823 *
824 * A client is allowed to create one and only one connection for its
825 * struct sps_pipe. The handle is used to identify the connection end point
826 * in subsequent SPS driver calls. A specific connection source or
827 * destination end point can be associated with one and only one
828 * struct sps_pipe.
829 *
830 * The client must establish an open device handle to the SPS. To do so, the
831 * client must attach to the SPS driver and open the SPS device by calling
832 * the following functions.
833 *
834 * @h - client context for SPS connection end point
835 *
836 * @connect - Pointer to connection parameters
837 *
838 * @return 0 on success, negative value on error
839 *
840 */
841int sps_connect(struct sps_pipe *h, struct sps_connect *connect);
842
843/**
844 * Disconnect an SPS connection end point
845 *
846 * This function disconnects an SPS connection end point.
847 * The SPS hardware associated with that end point will be disabled.
848 * For a connection involving system memory (SPS_DEV_HANDLE_MEM), all
849 * connection resources are deallocated. For a peripheral-to-peripheral
850 * connection, the resources associated with the connection will not be
851 * deallocated until both end points are closed.
852 *
853 * The client must call sps_connect() for the handle before calling
854 * this function.
855 *
856 * @h - client context for SPS connection end point
857 *
858 * @return 0 on success, negative value on error
859 *
860 */
861int sps_disconnect(struct sps_pipe *h);
862
863/**
864 * Register an event object for an SPS connection end point
865 *
866 * This function registers a callback event object for an SPS connection end
867 *point. The registered event object will be triggered for the set of
868 * events specified in reg->options that are enabled for the end point.
869 *
870 * There can only be one registered event object for each event. If an event
871 * object is already registered for an event, it will be replaced. If
872 *reg->event handle is NULL, then any registered event object for the
873 * event will be deregistered. Option bits in reg->options not associated
874 * with events are ignored.
875 *
876 * The client must call sps_connect() for the handle before calling
877 * this function.
878 *
879 * @h - client context for SPS connection end point
880 *
881 * @reg - Pointer to event registration parameters
882 *
883 * @return 0 on success, negative value on error
884 *
885 */
886int sps_register_event(struct sps_pipe *h, struct sps_register_event *reg);
887
888/**
889 * Perform a single DMA transfer on an SPS connection end point
890 *
891 * This function submits a DMA transfer request consisting of a single buffer
892 * for an SPS connection end point associated with a peripheral-to/from-memory
893 * connection. The request will be submitted immediately to hardware if the
894 * hardware is idle (data flow off, no other pending transfers). Otherwise, it
895 * will be queued for later handling in the SPS driver work loop.
896 *
897 * The data buffer must be DMA ready. The client is responsible for insuring
898 *physically contiguous memory, cache maintenance, and memory barrier. For
899 * more information, see Appendix A.
900 *
901 * The client must not modify the data buffer until the completion indication is
902 * received.
903 *
904 * This function cannot be used if transfer queuing is disabled (see option
905 * SPS_O_NO_Q). The client must set the SPS_O_EOT option to receive a callback
906 * event trigger when the transfer is complete. The SPS driver will insure the
907 * appropriate flags in the I/O vectors are set to generate the completion
908 * indication.
909 *
910 * The return value from this function may indicate that an error occurred.
911 * Possible causes include invalid arguments.
912 *
913 * @h - client context for SPS connection end point
914 *
915 * @addr - Physical address of buffer to transfer.
916 *
917 * WARNING: The memory provided should be physically contiguous and
918 * non-cached.
919 *
920 * The user can use one of the following:
921 * 1. sps_alloc_mem() - allocated from pipe-memory.
922 * 2. dma_alloc_coherent() - allocate DMA memory.
923 * 3. dma_map_single() for memory allocated by kmalloc().
924 *
925 * @size - Size in bytes of buffer to transfer
926 *
927 * @user - User pointer that will be returned to user as part of
928 * event payload
929 *
930 * @return 0 on success, negative value on error
931 *
932 */
933int sps_transfer_one(struct sps_pipe *h, u32 addr, u32 size,
934 void *user, u32 flags);
935
936/**
937 * Read event queue for an SPS connection end point
938 *
939 * This function reads event queue for an SPS connection end point.
940 *
941 * @h - client context for SPS connection end point
942 *
943 * @event - pointer to client's event data buffer
944 *
945 * @return 0 on success, negative value on error
946 *
947 */
948int sps_get_event(struct sps_pipe *h, struct sps_event_notify *event);
949
950/**
951 * Get processed I/O vector (completed transfers)
952 *
953 * This function fetches the next processed I/O vector.
954 *
955 * @h - client context for SPS connection end point
956 *
957 * @iovec - Pointer to I/O vector struct (output).
958 * This struct will be zeroed if there are no more processed I/O vectors.
959 *
960 * @return 0 on success, negative value on error
961 *
962 */
963int sps_get_iovec(struct sps_pipe *h, struct sps_iovec *iovec);
964
965/**
966 * Enable an SPS connection end point
967 *
968 * This function enables an SPS connection end point.
969 *
970 * @h - client context for SPS connection end point
971 *
972 * @return 0 on success, negative value on error
973 *
974 */
975int sps_flow_on(struct sps_pipe *h);
976
977/**
978 * Disable an SPS connection end point
979 *
980 * This function disables an SPS connection end point.
981 *
982 * @h - client context for SPS connection end point
983 *
984 * @mode - Desired mode for disabling pipe data flow
985 *
986 * @return 0 on success, negative value on error
987 *
988 */
989int sps_flow_off(struct sps_pipe *h, enum sps_flow_off mode);
990
991/**
992 * Perform a Multiple DMA transfer on an SPS connection end point
993 *
994 * This function submits a DMA transfer request for an SPS connection end point
995 * associated with a peripheral-to/from-memory connection. The request will be
996 * submitted immediately to hardware if the hardware is idle (data flow off, no
997 * other pending transfers). Otherwise, it will be queued for later handling in
998 * the SPS driver work loop.
999 *
1000 * The data buffers referenced by the I/O vectors must be DMA ready.
1001 * The client is responsible for insuring physically contiguous memory,
1002 * any cache maintenance, and memory barrier. For more information,
1003 * see Appendix A.
1004 *
1005 * The I/O vectors must specify physical addresses for the referenced buffers.
1006 *
1007 * The client must not modify the data buffers referenced by I/O vectors until
1008 * the completion indication is received.
1009 *
1010 * If transfer queuing is disabled (see option SPS_O_NO_Q), the client is
1011 * responsible for setting the appropriate flags in the I/O vectors to generate
1012 * the completion indication. Also, the client is responsible for enabling the
1013 * appropriate connection callback event options for completion indication (see
1014 * sps_connect(), sps_set_config()).
1015 *
1016 * If transfer queuing is enabled, the client must set the SPS_O_EOT option to
1017 * receive a callback event trigger when the transfer is complete. The SPS
1018 * driver will insure the appropriate flags in the I/O vectors are set to
1019 * generate the completion indication. The client must not set any flags in the
1020 * I/O vectors, as this may cause the SPS driver to become out of sync with the
1021 * hardware.
1022 *
1023 * The return value from this function may indicate that an error occurred.
1024 * Possible causes include invalid arguments. If transfer queuing is disabled,
1025 * an error will occur if the pipe is already processing a transfer.
1026 *
1027 * @h - client context for SPS connection end point
1028 *
1029 * @transfer - Pointer to transfer parameter struct
1030 *
1031 * @return 0 on success, negative value on error
1032 *
1033 */
1034int sps_transfer(struct sps_pipe *h, struct sps_transfer *transfer);
1035
1036/**
1037 * Determine whether an SPS connection end point FIFO is empty
1038 *
1039 * This function returns the empty state of an SPS connection end point.
1040 *
1041 * @h - client context for SPS connection end point
1042 *
1043 * @empty - pointer to client's empty status word (boolean)
1044 *
1045 * @return 0 on success, negative value on error
1046 *
1047 */
1048int sps_is_pipe_empty(struct sps_pipe *h, u32 *empty);
1049
1050/**
1051 * Reset an SPS BAM device
1052 *
1053 * This function resets an SPS BAM device.
1054 *
1055 * @dev - device handle for the BAM
1056 *
1057 * @return 0 on success, negative value on error
1058 *
1059 */
1060int sps_device_reset(u32 dev);
1061
1062/**
1063 * Set the configuration parameters for an SPS connection end point
1064 *
1065 * This function sets the configuration parameters for an SPS connection
1066 * end point. This function may be called before the end point is connected
1067 * (before sps_connect is called). This allows the client to specify
1068 *parameters before the connection is established. The client is allowed
1069 * to pre-allocate resources and override driver defaults.
1070 *
1071 * The client must call sps_get_config() to fill it's struct sps_connect
1072 * struct before modifying values and passing the struct to this function.
1073 * Only those parameters that differ from the current configuration will
1074 * be processed.
1075 *
1076 * @h - client context for SPS connection end point
1077 *
1078 * @config - Pointer to the end point's new configuration parameters.
1079 *
1080 * @return 0 on success, negative value on error
1081 *
1082 */
1083int sps_set_config(struct sps_pipe *h, struct sps_connect *config);
1084
1085/**
1086 * Set ownership of an SPS connection end point
1087 *
1088 * This function sets the ownership of an SPS connection end point to
1089 * either local (default) or non-local. This function is used to
1090 * retrieve the struct sps_connect data that must be used by a
1091 * satellite processor when calling sps_connect().
1092 *
1093 * Non-local ownership is only possible/meaningful on the processor
1094 * that controls resource allocations (apps processor). Setting ownership
1095 * to non-local on a satellite processor will fail.
1096 *
1097 * Setting ownership from non-local to local will succeed only if the
1098 * owning satellite processor has properly brought the end point to
1099 * an idle condition.
1100 *
1101 * This function will succeed if the connection end point is already in
1102 * the specified ownership state.
1103 *
1104 * @h - client context for SPS connection end point
1105 *
1106 * @owner - New ownership of the connection end point
1107 *
1108 * @connect - Pointer to buffer for satellite processor connect data.
1109 * Can be NULL to avoid retrieving the connect data. Will be ignored
1110 * if the end point ownership is set to local.
1111 *
1112 * @return 0 on success, negative value on error
1113 *
1114 */
1115int sps_set_owner(struct sps_pipe *h, enum sps_owner owner,
1116 struct sps_satellite *connect);
1117
1118/**
1119 * Allocate a BAM DMA channel
1120 *
1121 * This function allocates a BAM DMA channel. A "BAM DMA" is a special
1122 * DMA peripheral with a BAM front end. The DMA peripheral acts as a conduit
1123 * for data to flow into a consumer pipe and then out of a producer pipe.
1124 * It's primarily purpose is to serve as a path for interprocessor communication
1125 * that allows each processor to control and protect it's own memory space.
1126 *
1127 * @alloc - Pointer to struct for BAM DMA channel allocation properties.
1128 *
1129 * @chan - Allocated channel information will be written to this
1130 * location (output).
1131 *
1132 * @return 0 on success, negative value on error
1133 *
1134 */
1135int sps_alloc_dma_chan(const struct sps_alloc_dma_chan *alloc,
1136 struct sps_dma_chan *chan);
1137
1138/**
1139 * Free a BAM DMA channel
1140 *
1141 * This function frees a BAM DMA channel.
1142 *
1143 * @chan - Pointer to information for channel to free
1144 *
1145 * @return 0 on success, negative value on error
1146 *
1147 */
1148int sps_free_dma_chan(struct sps_dma_chan *chan);
1149
1150/**
1151 * Get the BAM handle for BAM-DMA.
1152 *
1153 * The BAM handle should be use as source/destination in the sps_connect().
1154 *
1155 * @return handle on success, zero on error
1156 *
1157 */
1158u32 sps_dma_get_bam_handle(void);
1159
1160/**
1161 * Free the BAM handle for BAM-DMA.
1162 *
1163 */
1164void sps_dma_free_bam_handle(u32 h);
1165
1166
1167/**
1168 * Get number of free transfer entries for an SPS connection end point
1169 *
1170 * This function returns the number of free transfer entries for an
1171 * SPS connection end point.
1172 *
1173 * @h - client context for SPS connection end point
1174 *
1175 * @count - pointer to count status
1176 *
1177 * @return 0 on success, negative value on error
1178 *
1179 */
1180int sps_get_free_count(struct sps_pipe *h, u32 *count);
1181
1182/**
1183 * Perform timer control
1184 *
1185 * This function performs timer control operations.
1186 *
1187 * @h - client context for SPS connection end point
1188 *
1189 * @timer_ctrl - Pointer to timer control specification
1190 *
1191 * @timer_result - Pointer to buffer for timer operation result.
1192 * This argument can be NULL if no result is expected for the operation.
1193 * If non-NULL, the current timer value will always provided.
1194 *
1195 * @return 0 on success, negative value on error
1196 *
1197 */
1198int sps_timer_ctrl(struct sps_pipe *h,
1199 struct sps_timer_ctrl *timer_ctrl,
1200 struct sps_timer_result *timer_result);
1201
Yan He2027bd82011-11-05 14:43:01 -07001202/**
1203 * Find the handle of a BAM device based on the physical address
1204 *
1205 * This function finds a BAM device in the BAM registration list that
1206 * matches the specified physical address, and returns its handle.
1207 *
1208 * @phys_addr - physical address of the BAM
1209 *
1210 * @h - device handle of the BAM
1211 *
1212 * @return 0 on success, negative value on error
1213 *
1214 */
1215int sps_phy2h(u32 phys_addr, u32 *handle);
1216
1217/**
1218 * Setup desc/data FIFO for bam-to-bam connection
1219 *
1220 * @mem_buffer - Pointer to struct for allocated memory properties.
1221 *
1222 * @addr - address of FIFO
1223 *
1224 * @size - FIFO size
1225 *
1226 * @use_offset - use address offset instead of absolute address
1227 *
1228 * @return 0 on success, negative value on error
1229 *
1230 */
1231int sps_setup_bam2bam_fifo(struct sps_mem_buffer *mem_buffer,
1232 u32 addr, u32 size, int use_offset);
1233
Yan Hece596c12012-04-06 10:42:33 -07001234/**
1235 * Get the number of unused descriptors in the descriptor FIFO
1236 * of a pipe
1237 *
1238 * @h - client context for SPS connection end point
1239 *
1240 * @desc_num - number of unused descriptors
1241 *
1242 * @return 0 on success, negative value on error
1243 *
1244 */
1245int sps_get_unused_desc_num(struct sps_pipe *h, u32 *desc_num);
1246
Yan He0eead892012-07-03 17:38:56 -07001247/**
1248 * Get the debug info of BAM registers and descriptor FIFOs
1249 *
1250 * @dev - BAM device handle
1251 *
1252 * @option - debugging option
1253 *
1254 * @para - parameter used for an option (such as pipe combination)
1255 *
Yan Hefc1aa892012-08-13 15:03:09 -07001256 * @tb_sel - testbus selection
1257 *
Yan He4f9f6952012-09-10 18:39:46 -07001258 * @desc_sel - selection of descriptors
Yan Hefc1aa892012-08-13 15:03:09 -07001259 *
Yan He0eead892012-07-03 17:38:56 -07001260 * @return 0 on success, negative value on error
1261 *
1262 */
Yan Hefc1aa892012-08-13 15:03:09 -07001263int sps_get_bam_debug_info(u32 dev, u32 option, u32 para,
Yan Hec53399f2013-03-12 16:15:13 -07001264 u32 tb_sel, u32 desc_sel);
Yan He0eead892012-07-03 17:38:56 -07001265
Yan He2eafd742012-04-09 16:07:15 -07001266#else
1267static inline int sps_register_bam_device(const struct sps_bam_props
1268 *bam_props, u32 *dev_handle)
1269{
1270 return -EPERM;
1271}
1272
1273static inline int sps_deregister_bam_device(u32 dev_handle)
1274{
1275 return -EPERM;
1276}
1277
1278static inline struct sps_pipe *sps_alloc_endpoint(void)
1279{
1280 return NULL;
1281}
1282
1283static inline int sps_free_endpoint(struct sps_pipe *h)
1284{
1285 return -EPERM;
1286}
1287
1288static inline int sps_get_config(struct sps_pipe *h, struct sps_connect *config)
1289{
1290 return -EPERM;
1291}
1292
1293static inline int sps_alloc_mem(struct sps_pipe *h, enum sps_mem mem,
1294 struct sps_mem_buffer *mem_buffer)
1295{
1296 return -EPERM;
1297}
1298
1299static inline int sps_free_mem(struct sps_pipe *h,
1300 struct sps_mem_buffer *mem_buffer)
1301{
1302 return -EPERM;
1303}
1304
1305static inline int sps_connect(struct sps_pipe *h, struct sps_connect *connect)
1306{
1307 return -EPERM;
1308}
1309
1310static inline int sps_disconnect(struct sps_pipe *h)
1311{
1312 return -EPERM;
1313}
1314
1315static inline int sps_register_event(struct sps_pipe *h,
1316 struct sps_register_event *reg)
1317{
1318 return -EPERM;
1319}
1320
1321static inline int sps_transfer_one(struct sps_pipe *h, u32 addr, u32 size,
1322 void *user, u32 flags)
1323{
1324 return -EPERM;
1325}
1326
1327static inline int sps_get_event(struct sps_pipe *h,
1328 struct sps_event_notify *event)
1329{
1330 return -EPERM;
1331}
1332
1333static inline int sps_get_iovec(struct sps_pipe *h, struct sps_iovec *iovec)
1334{
1335 return -EPERM;
1336}
1337
1338static inline int sps_flow_on(struct sps_pipe *h)
1339{
1340 return -EPERM;
1341}
1342
1343static inline int sps_flow_off(struct sps_pipe *h, enum sps_flow_off mode)
1344{
1345 return -EPERM;
1346}
1347
1348static inline int sps_transfer(struct sps_pipe *h,
1349 struct sps_transfer *transfer)
1350{
1351 return -EPERM;
1352}
1353
1354static inline int sps_is_pipe_empty(struct sps_pipe *h, u32 *empty)
1355{
1356 return -EPERM;
1357}
1358
1359static inline int sps_device_reset(u32 dev)
1360{
1361 return -EPERM;
1362}
1363
1364static inline int sps_set_config(struct sps_pipe *h, struct sps_connect *config)
1365{
1366 return -EPERM;
1367}
1368
1369static inline int sps_set_owner(struct sps_pipe *h, enum sps_owner owner,
1370 struct sps_satellite *connect)
1371{
1372 return -EPERM;
1373}
1374
1375static inline int sps_get_free_count(struct sps_pipe *h, u32 *count)
1376{
1377 return -EPERM;
1378}
1379
1380static inline int sps_alloc_dma_chan(const struct sps_alloc_dma_chan *alloc,
1381 struct sps_dma_chan *chan)
1382{
1383 return -EPERM;
1384}
1385
1386static inline int sps_free_dma_chan(struct sps_dma_chan *chan)
1387{
1388 return -EPERM;
1389}
1390
1391static inline u32 sps_dma_get_bam_handle(void)
1392{
1393 return 0;
1394}
1395
1396static inline void sps_dma_free_bam_handle(u32 h)
1397{
1398}
1399
1400static inline int sps_timer_ctrl(struct sps_pipe *h,
1401 struct sps_timer_ctrl *timer_ctrl,
1402 struct sps_timer_result *timer_result)
1403{
1404 return -EPERM;
1405}
1406
1407static inline int sps_phy2h(u32 phys_addr, u32 *handle)
1408{
1409 return -EPERM;
1410}
1411
1412static inline int sps_setup_bam2bam_fifo(struct sps_mem_buffer *mem_buffer,
1413 u32 addr, u32 size, int use_offset)
1414{
1415 return -EPERM;
1416}
1417
1418static inline int sps_get_unused_desc_num(struct sps_pipe *h, u32 *desc_num)
1419{
1420 return -EPERM;
1421}
Yan He0eead892012-07-03 17:38:56 -07001422
Yan Hefc1aa892012-08-13 15:03:09 -07001423static inline int sps_get_bam_debug_info(u32 dev, u32 option, u32 para,
Yan Hec53399f2013-03-12 16:15:13 -07001424 u32 tb_sel, u32 desc_sel)
Yan He0eead892012-07-03 17:38:56 -07001425{
1426 return -EPERM;
1427}
Yan He2eafd742012-04-09 16:07:15 -07001428#endif
1429
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001430#endif /* _SPS_H_ */