Add Broadcom / Netgear changes from RAXE 1.0.0.48
[project/bcm63xx/u-boot.git] / arch / arm / mach-bcmbca / xrdp / bdmf_session.h
diff --git a/arch/arm/mach-bcmbca/xrdp/bdmf_session.h b/arch/arm/mach-bcmbca/xrdp/bdmf_session.h
new file mode 100644 (file)
index 0000000..a039af7
--- /dev/null
@@ -0,0 +1,247 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2019 Broadcom
+ */
+/*
+ * 
+ */
+
+/*******************************************************************
+ * bdmf_session.h
+ *
+ * BL framework - management session
+ *
+ *******************************************************************/
+
+#ifndef BDMF_SESSION_H
+
+#define BDMF_SESSION_H
+
+#include <bdmf_system.h>
+#include <stdarg.h>
+
+/** Access rights */
+typedef enum {
+       BDMF_ACCESS_GUEST,      /* Guest. Doesn't have access to commands and
+                                * directories registered with ADMIN rights */
+       BDMF_ACCESS_ADMIN,      /* Administrator: full access */
+       BDMF_ACCESS_DEBUG,      /* Administrator: full access + extended debug
+                                * features */
+} bdmf_access_right_t;
+
+/** Line edit mode */
+typedef enum {
+       BDMF_LINE_EDIT_DEFAULT, /* Enable line editing and history if
+                                * CONFIG_EDITLINE is defined, disable otherwise */
+       BDMF_LINE_EDIT_ENABLE,  /* Enable line editing. Requires CONFIG_EDITLINE
+                                * define and libedit-dev library */
+       BDMF_LINE_EDIT_DISABLE, /* Disable line editing and history */
+} bdmf_line_edit_mode_t;
+
+/** Hex dump format */
+typedef enum {
+       BDMF_HEX_DUMP_FORMAT_DEFAULT,   /* Default format of hex dump */
+       BDMF_HEX_DUMP_FORMAT_BYTE,      /* Hex dump format of separate bytes */
+} bdmf_hex_dump_format_t;
+
+/* Management session handle */
+typedef struct bdmf_session bdmf_session;
+
+/* Management session handle */
+typedef struct bdmf_session *bdmf_session_handle;
+
+/** Session parameters structure.
+ * See \ref bdmf_session_open
+ */
+typedef struct bdmf_session_parm {
+       const char *name;       /**< Session name */
+       void *user_priv;        /**< Private user's data */
+
+       /** Session's output function. NULL=use write(stdout)
+        * returns the number of bytes written or <0 if error
+        */
+       int (*write)(bdmf_session_handle session, const char *buf, uint32_t size);
+
+       /** Session line input function. NULL=use default(stdin[+line edit) */
+       char *(*gets)(bdmf_session_handle session, char *buf, uint32_t size);
+
+       /** Access rights */
+       bdmf_access_right_t access_right;
+
+       /** Line editing mode */
+       bdmf_line_edit_mode_t line_edit_mode;
+
+       /** Extra data size to be allocated along with session control block.
+        * The extra data is accessible using bdmf_session_data().
+        */
+       uint32_t extra_size;
+
+       /** Hex dump format */
+       bdmf_hex_dump_format_t hex_dump_format;
+} bdmf_session_parm_t;
+
+
+/** Open management session
+ *
+ * Monitor supports multiple simultaneous sessions with different
+ * access rights.
+ *
+ * \param[in]   parm - Session parameters. Must not be allocated on the stack.
+ * \param[out]  p_session - Session handle
+ * \return     0 = ok, <0 = error code
+ */
+int bdmf_session_open(const bdmf_session_parm_t *parm,
+                     bdmf_session_handle *p_session);
+
+
+/** Close management session.
+ * \param[in]   session - Session handle
+ */
+void bdmf_session_close(bdmf_session_handle session);
+
+
+/** Write function.
+ * Write buffer to the current session.
+ * \param[in]   session - Session handle. NULL=use stdout
+ * \param[in]   buf - output buffer
+ * \param[in]   size - number of bytes to be written
+ * \return     >=0 - number of bytes written. <0 - output error
+ */
+int bdmf_session_write(bdmf_session_handle session, const char *buf,
+                      uint32_t size);
+
+
+/** Read line
+ * \param[in]          session - Session handle. NULL=use default
+ * \param[in,out]      buf - input buffer
+ * \param[in]          size - buf size
+ * \return             buf if successful, NULL if EOF or error
+ */
+char *bdmf_session_gets(bdmf_session_handle session, char *buf, uint32_t size);
+
+
+/** Print function.
+ * Prints in the context of current session.
+ * \param[in]  session - Session handle. NULL=use stdout
+ * \param[in]  format - print format - as in printf
+ */
+void bdmf_session_print(bdmf_session_handle session, const char *format, ...)
+#ifndef BDMF_SESSION_DISABLE_FORMAT_CHECK
+__attribute__((format(printf, 2, 3)))
+#endif
+;
+
+
+/** Print function.
+ * Prints in the context of current session.
+ * \param[in]  session - Session handle. NULL=use stdout
+ * \param[in]  format - print format - as in printf
+ * \param[in]  ap - parameters list. Undefined after the call
+ */
+void bdmf_session_vprint(bdmf_session_handle session, const char *format,
+                        va_list ap);
+
+/** Print buffer in hexadecimal format
+ * \param[in]  session - Session handle. NULL=use stdout
+ * \param[in]  buffer - Buffer address
+ * \param[in]  offset - Start offset in the buffer
+ * \param[in]  count - Number of bytes to dump
+ */
+void bdmf_session_hexdump(bdmf_session_handle session, void *buffer,
+                         uint32_t offset, uint32_t count);
+
+/** Get extra data associated with the session
+ * \param[in]  session - Session handle. NULL=default session
+ * \return extra_data pointer or NULL if there is no extra data
+ */
+void *bdmf_session_data(bdmf_session_handle session);
+
+
+/** Get user_priv provided in session parameters when it was registered
+ * \param[in]  session - Session handle. NULL=default session
+ * \return usr_priv value
+ */
+void *bdmf_session_user_priv(bdmf_session_handle session);
+
+
+/** Set user_priv provided in session parameters when it was registered
+ * \param[in]  session - Session handle. NULL=default session
+ * \param[in]  usr_priv - user_priv value
+ * \return old usr_priv value
+ */
+void *bdmf_session_user_priv_set(bdmf_session_handle session, void *user_priv);
+
+
+/** Get session name
+ * \param[in]  session - Session handle. NULL=use stdin
+ * \return session name
+ */
+const char *bdmf_session_name(bdmf_session_handle session);
+
+
+/** Get session access rights
+ * \param[in]  session - Session handle. NULL=default debug session
+ * \return session access right
+ */
+bdmf_access_right_t bdmf_session_access_right(bdmf_session_handle session);
+
+
+/** Context extension
+ *
+ * - if no command - display list of command or extend command
+ * - if prev char is " "
+ *      - if positional and next parm is enum - show/extends list of matching values
+ *      - else - show/extend list of unused parameters
+ *   else
+ *      - if entering value and enum - show/extends list of matching values
+ *      - else - show/extend list of matching unused parameters
+ *
+ * \param[in]  session - Session handle
+ * \param[in]  input_string - String to be parsed
+ * \param[out] insert_str - String to insert at cursor position
+ * \param[in]  insert_size - Insert buffer size
+ * \return     =0  - OK; -EINVAL - parsing error
+ */
+int bdmf_extend(bdmf_session_handle session, char *input_string,
+               char *insert_str, uint32_t insert_size);
+
+
+#ifdef BDMF_INTERNAL
+
+#define BDMF_SESSION_OUTBUF_LEN   2048
+
+/* editline functionality */
+/* If libedit is included - it takes precedence */
+#ifdef CONFIG_LIBEDIT
+#include <histedit.h>
+#undef CONFIG_LINENOISE
+#endif /* #ifdef CONFIG_LIBEDIT */
+
+#ifdef CONFIG_LINENOISE
+#include <linenoise.h>
+#endif
+
+/* Management session structure */
+struct bdmf_session {
+       bdmf_session *next;
+       bdmf_session_parm_t parms;
+       uint32_t magic;
+#define BDMF_SESSION_MAGIC     (('s'<<24)|('e'<<16)|('s'<<8)|'s')
+#define BDMF_SESSION_MAGIC_DEL (('s'<<24)|('e'<<16)|('s'<<8)|'~')
+
+       /* Line editing and history support */
+#ifdef CONFIG_LIBEDIT
+       EditLine *el;
+       History *history;
+       HistEvent histevent;
+#endif
+#ifdef CONFIG_LINENOISE
+       linenoiseSession *ln_session;
+#endif
+       char outbuf[BDMF_SESSION_OUTBUF_LEN];
+
+       /* Followed by session data */
+};
+#endif
+
+#endif /* #ifndef BDMF_SESSION_H */