aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/omap_hsi/hsi-protocol-if.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/omap_hsi/hsi-protocol-if.h')
-rw-r--r--drivers/omap_hsi/hsi-protocol-if.h187
1 files changed, 187 insertions, 0 deletions
diff --git a/drivers/omap_hsi/hsi-protocol-if.h b/drivers/omap_hsi/hsi-protocol-if.h
new file mode 100644
index 0000000..f56ef36
--- /dev/null
+++ b/drivers/omap_hsi/hsi-protocol-if.h
@@ -0,0 +1,187 @@
+/*
+ * hsi-if.h
+ *
+ * Part of the HSI character driver, private headers.
+ *
+ * Copyright (C) 2009 Nokia Corporation. All rights reserved.
+ * Copyright (C) 2009 Texas Instruments, Inc.
+ *
+ * Author: Andras Domokos <andras.domokos@nokia.com>
+ * Author: Sebastien JAN <s-jan@ti.com>
+ *
+ * This package is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _HSI_IF_H
+#define _HSI_IF_H
+
+#define HSI_EV_MASK (0xffff << 0)
+#define HSI_EV_TYPE_MASK (0x0f << 16)
+#define HSI_EV_IN (0x01 << 16)
+#define HSI_EV_OUT (0x02 << 16)
+#define HSI_EV_EXCEP (0x03 << 16)
+#define HSI_EV_AVAIL (0x04 << 16)
+#define HSI_EV_TYPE(event) ((event) & HSI_EV_TYPE_MASK)
+
+#define HSI_HWBREAK 1
+#define HSI_ERROR 2
+
+#define HSI_MAX_CHANNELS 16
+#define CHANNEL_MASK 0xFF
+#define HSI_LL_INVALID_CHANNEL 0xFF
+
+struct hsi_event {
+ unsigned int event;
+ u32 *data;
+ unsigned int count;
+};
+
+struct if_hsi_channel {
+ struct hsi_device *dev;
+ unsigned int channel_id;
+ u32 *tx_data;
+ unsigned int tx_count;
+ u32 *rx_data;
+ unsigned int rx_count;
+ unsigned int opened;
+ unsigned int state;
+ u32 *tx_buf;
+ u32 *rx_buf;
+ unsigned int tx_state;
+ unsigned int rx_state;
+ unsigned int tx_nak_count;
+ unsigned int rx_nak_count;
+ spinlock_t lock; /* Serializes access to channel data */
+};
+
+struct if_hsi_iface {
+ struct if_hsi_channel channels[HSI_MAX_CHANNELS];
+#if 0
+ int bootstrap;
+#endif
+ unsigned long init_chan_map;
+ spinlock_t lock; /* Serializes access to HSI functional interface */
+};
+
+struct if_hsi_cmd {
+ u32 tx_cmd[50];
+ u32 rx_cmd[50];
+ struct timespec tx_cmd_time[50];
+ struct timespec rx_cmd_time[50];
+};
+
+enum {
+ HSI_LL_MSG_BREAK = 0x00,
+ HSI_LL_MSG_ECHO = 0x01,
+ HSI_LL_MSG_INFO_REQ = 0x02,
+ HSI_LL_MSG_INFO = 0x03,
+ HSI_LL_MSG_CONFIGURE = 0x04,
+ HSI_LL_MSG_ALLOCATE_CH = 0x05,
+ HSI_LL_MSG_RELEASE_CH = 0x06,
+ HSI_LL_MSG_OPEN_CONN = 0x07,
+ HSI_LL_MSG_CONN_READY = 0x08,
+ HSI_LL_MSG_CONN_CLOSED = 0x09,
+ HSI_LL_MSG_CANCEL_CONN = 0x0A,
+ HSI_LL_MSG_ACK = 0x0B,
+ HSI_LL_MSG_NAK = 0x0C,
+ HSI_LL_MSG_CONF_RATE = 0x0D,
+ HSI_LL_MSG_OPEN_CONN_OCTET = 0x0E,
+ HSI_LL_MSG_INVALID = 0xFF,
+};
+
+enum {
+ HSI_LL_TX_STATE_UNDEF,
+ HSI_LL_TX_STATE_CLOSED,
+ HSI_LL_TX_STATE_IDLE,
+ HSI_LL_TX_STATE_POWER_DOWN,
+ HSI_LL_TX_STATE_ERROR,
+ HSI_LL_TX_STATE_SEND_OPEN_CONN,
+ HSI_LL_TX_STATE_WAIT_FOR_ACK,
+ HSI_LL_TX_STATE_NACK,
+ HSI_LL_TX_STATE_WAIT_FOR_CONN_READY,
+ HSI_LL_TX_STATE_SEND_CONF_RATE,
+ HSI_LL_TX_STATE_WAIT_FOR_CONF_ACK,
+ HSI_LL_TX_STATE_TX,
+ HSI_LL_TX_STATE_WAIT_FOR_CONN_CLOSED,
+ HSI_LL_TX_STATE_TO_OPEN_CONN,
+ HSI_LL_TX_STATE_TO_ACK,
+ HSI_LL_TX_STATE_TO_READY,
+ HSI_LL_TX_STATE_TO_CONF,
+ HSI_LL_TX_STATE_TO_CONF_ACK,
+ HSI_LL_TX_STATE_TO_TX,
+ HSI_LL_TX_STATE_TO_CLOSE,
+ HSI_LL_TX_STATE_SEND_BREAK,
+};
+
+enum {
+ HSI_LL_RX_STATE_UNDEF,
+ HSI_LL_RX_STATE_CLOSED,
+ HSI_LL_RX_STATE_IDLE,
+ HSI_LL_RX_STATE_POWER_DOWN,
+ HSI_LL_RX_STATE_ERROR,
+ HSI_LL_RX_STATE_BLOCKED,
+ HSI_LL_RX_STATE_SEND_ACK,
+ HSI_LL_RX_STATE_SEND_NACK,
+ HSI_LL_RX_STATE_SEND_CONN_READY,
+ HSI_LL_RX_STATE_RX,
+ HSI_LL_RX_STATE_SEND_CONN_CLOSED,
+ HSI_LL_RX_STATE_SEND_CONN_CANCEL,
+ HSI_LL_RX_STATE_WAIT_FOR_CANCEL_CONN_ACK,
+ HSI_LL_RX_STATE_SEND_CONF_ACK,
+ HSI_LL_RX_STATE_SEND_CONF_NACK,
+ HSI_LL_RX_STATE_TO_RX,
+ HSI_LL_RX_STATE_TO_ACK,
+ HSI_LL_RX_STATE_TO_NACK,
+ HSI_LL_RX_STATE_TO_CONN_READY,
+ HSI_LL_RX_STATE_TO_CONN_CLOSED,
+ HSI_LL_RX_STATE_TO_CONN_CANCEL,
+ HSI_LL_RX_STATE_TO_CONN_CANCEL_ACK,
+ HSI_LL_RX_STATE_TO_CONF_ACK,
+ HSI_LL_RX_STATE_SEND_BREAK,
+};
+
+
+int if_hsi_init(void);
+int if_hsi_exit(void);
+
+int if_hsi_start(int ch);
+void if_hsi_stop(int ch);
+
+void if_hsi_send_break(int ch);
+void if_hsi_flush_rx(int ch);
+void if_hsi_flush_tx(int ch);
+void if_hsi_bootstrap(int ch);
+void if_hsi_set_wakeline(int ch, unsigned int state);
+void if_hsi_get_wakeline(int ch, unsigned int *state);
+
+#if 0
+int if_hsi_set_rx(int ch, struct hsi_rx_config *cfg);
+void if_hsi_get_rx(int ch, struct hsi_rx_config *cfg);
+int if_hsi_set_tx(int ch, struct hsi_tx_config *cfg);
+void if_hsi_get_tx(int ch, struct hsi_tx_config *cfg);
+#endif
+
+int if_hsi_read(int ch, u32 *data, unsigned int count);
+int if_hsi_poll(int ch);
+int if_hsi_write(int ch, u32 *data, unsigned int count);
+
+void if_hsi_cancel_read(int ch);
+void if_hsi_cancel_write(int ch);
+
+void if_notify(int ch, struct hsi_event *ev);
+int hsi_proto_read(int ch, u32 *buffer, int count);
+int hsi_proto_write(int ch, u32 *buffer, int length);
+int hsi_decode_cmd(u32 *data, u32 *cmd, u32 *ch, u32 *param);
+int protocol_create_cmd(int cmd_type, unsigned int channel, void *arg);
+int hsi_protocol_send_command(u32 cmd, u32 channel, u32 param);
+void rx_stm(u32 cmd, u32 ch, u32 param);
+#if 0
+int hsi_start_protocol(void);
+#endif
+#endif /* _HSI_IF_H */