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