openocd: remove recently added CamelCase symbols
[fw/openocd] / src / target / semihosting_common.h
index 404080f023401b81f0871c58900afc286c5e17f5..7c5f748f4336c4cfc03dd7509748f494a871eacf 100644 (file)
@@ -1,22 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
 /***************************************************************************
  *   Copyright (C) 2018 by Liviu Ionescu                                   *
  *   <ilg@livius.net>                                                      *
  *                                                                         *
  *   Copyright (C) 2009 by Marvell Technology Group Ltd.                   *
  *   Written by Nicolas Pitre <nico@marvell.com>                           *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifndef OPENOCD_TARGET_SEMIHOSTING_COMMON_H
@@ -76,9 +65,9 @@ enum semihosting_operation_numbers {
        SEMIHOSTING_SYS_WRITE = 0x05,
        SEMIHOSTING_SYS_WRITEC = 0x03,
        SEMIHOSTING_SYS_WRITE0 = 0x04,
-       SEMIHOSTING_USER_CMD_0x100 = 0x100, /* First user cmd op code */
-       SEMIHOSTING_USER_CMD_0x107 = 0x107, /* Last supported user cmd op code */
-       SEMIHOSTING_USER_CMD_0x1FF = 0x1FF, /* Last user cmd op code */
+       SEMIHOSTING_USER_CMD_0X100 = 0x100, /* First user cmd op code */
+       SEMIHOSTING_USER_CMD_0X107 = 0x107, /* Last supported user cmd op code */
+       SEMIHOSTING_USER_CMD_0X1FF = 0x1FF, /* Last user cmd op code */
 };
 
 /** Maximum allowed Tcl command segment length in bytes*/
@@ -103,6 +92,13 @@ enum semihosting_redirect_config {
        SEMIHOSTING_REDIRECT_CFG_ALL,
 };
 
+enum semihosting_result {
+       SEMIHOSTING_NONE,               /* Not halted for a semihosting call. */
+       SEMIHOSTING_HANDLED,    /* Call handled, and target was resumed. */
+       SEMIHOSTING_WAITING,    /* Call handled, target is halted waiting until we can resume. */
+       SEMIHOSTING_ERROR               /* Something went wrong. */
+};
+
 struct target;
 
 /*
@@ -179,6 +175,13 @@ struct semihosting {
        /** Base directory for semihosting I/O operations. */
        char *basedir;
 
+       /**
+        * Target's extension of semihosting user commands.
+        * @returns ERROR_NOT_IMPLEMENTED when user command is not handled, otherwise
+        * sets semihosting->result and semihosting->sys_errno and returns ERROR_OK.
+        */
+       int (*user_command_extension)(struct target *target);
+
        int (*setup)(struct target *target, int enable);
        int (*post_result)(struct target *target);
 };
@@ -187,4 +190,17 @@ int semihosting_common_init(struct target *target, void *setup,
        void *post_result);
 int semihosting_common(struct target *target);
 
+/* utility functions which may also be used by semihosting extensions (custom vendor-defined syscalls) */
+int semihosting_read_fields(struct target *target, size_t number,
+       uint8_t *fields);
+int semihosting_write_fields(struct target *target, size_t number,
+       uint8_t *fields);
+uint64_t semihosting_get_field(struct target *target, size_t index,
+       uint8_t *fields);
+void semihosting_set_field(struct target *target, uint64_t value,
+       size_t index,
+       uint8_t *fields);
+
+extern const struct command_registration semihosting_common_handlers[];
+
 #endif /* OPENOCD_TARGET_SEMIHOSTING_COMMON_H */