mirror of
https://github.com/andreili/katapult.git
synced 2025-08-23 19:34:06 +02:00
Synchronize with the latest Klipper code. This pulls in the latest lib/ files (needed to use the pico-sdk v2.0.0 version). It updates to latest can2040 code (needed for pico-sdk v2.0.0 support). It implements USB double buffering (as is now done in Klipper). It adds in support for additional UART pins (as is now done in Klipper). It adds support for rp2350 chips. This replaces the execute in ram code previously implemented in Katapult with the execute in ram code that is now standard in Klipper. The CONFIG_RP2040_ADD_BOOT_SIGNATURE kconfig symbol was removed and the build now always produces a katapult.withclear.uf2 file. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
156 lines
3.2 KiB
C
156 lines
3.2 KiB
C
/*
|
|
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef _PICO_PLATFORM_H
|
|
#define _PICO_PLATFORM_H
|
|
|
|
#include "hardware/platform_defs.h"
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
#ifdef __unix__
|
|
|
|
#include <sys/cdefs.h>
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define __not_in_flash(group)
|
|
#define __not_in_flash_func(func) func
|
|
#define __no_inline_not_in_flash_func(func) func
|
|
#define __in_flash(group)
|
|
#define __scratch_x(group)
|
|
#define __scratch_y(group)
|
|
|
|
#ifndef _MSC_VER
|
|
#define __packed __attribute__((packed))
|
|
#define __packed_aligned __packed __attribute((aligned))
|
|
#else
|
|
// MSVC requires #pragma pack which isn't compatible with a single attribute style define
|
|
#define __packed
|
|
#define __packed_aligned
|
|
#endif
|
|
|
|
#define __time_critical_func(x) x
|
|
#define __after_data(group)
|
|
|
|
//int running_on_fpga() { return false; }
|
|
extern void tight_loop_contents();
|
|
|
|
#ifndef __STRING
|
|
#define __STRING(x) #x
|
|
#endif
|
|
|
|
#ifndef _MSC_VER
|
|
#ifndef __noreturn
|
|
#define __noreturn __attribute((noreturn))
|
|
#endif
|
|
|
|
#ifndef __unused
|
|
#define __unused __attribute__((unused))
|
|
#endif
|
|
|
|
#ifndef __noinline
|
|
#define __noinline __attribute__((noinline))
|
|
#endif
|
|
|
|
#ifndef __aligned
|
|
#define __aligned(x) __attribute__((aligned(x)))
|
|
#endif
|
|
|
|
#define PICO_WEAK_FUNCTION_DEF(x) _Pragma(__STRING(weak x))
|
|
#define PICO_WEAK_FUNCTION_IMPL_NAME(x) x
|
|
|
|
#ifndef __weak
|
|
#define __weak __attribute__((weak))
|
|
#endif
|
|
#else
|
|
#ifndef __noreturn
|
|
#define __noreturn __declspec(noreturn)
|
|
#endif
|
|
|
|
#ifndef __unused
|
|
#define __unused
|
|
#endif
|
|
|
|
#ifndef __noinline
|
|
#define __noinline __declspec(noinline)
|
|
#endif
|
|
|
|
#ifndef __aligned
|
|
#define __aligned(x) __declspec(align(x))
|
|
#endif
|
|
|
|
#ifndef __CONCAT
|
|
#define __CONCAT(x,y) x ## y
|
|
#endif
|
|
|
|
#define __thread __declspec( thread )
|
|
|
|
#define PICO_WEAK_FUNCTION_DEF(x) __pragma(comment(linker, __STRING(/alternatename:_##x=_##x##__weak)));
|
|
#define PICO_WEAK_FUNCTION_IMPL_NAME(x) x ## __weak
|
|
|
|
static __noreturn void __builtin_unreachable() {
|
|
}
|
|
|
|
#include <intrin.h>
|
|
#define __builtin_clz __lzcnt
|
|
#endif
|
|
|
|
#ifndef count_of
|
|
#define count_of(a) (sizeof(a)/sizeof((a)[0]))
|
|
#endif
|
|
|
|
#ifndef MAX
|
|
#define MAX(a, b) ((a)>(b)?(a):(b))
|
|
#endif
|
|
|
|
#ifndef MIN
|
|
#define MIN(a, b) ((b)>(a)?(a):(b))
|
|
#endif
|
|
|
|
// abort in our case
|
|
void __noreturn __breakpoint();
|
|
|
|
void __noreturn panic_unsupported();
|
|
|
|
void __noreturn panic(const char *fmt, ...);
|
|
|
|
// arggggghhhh there is a weak function called sem_init used by SDL
|
|
#define sem_init sem_init_alternative
|
|
|
|
extern uint32_t host_safe_hw_ptr_impl(uintptr_t x);
|
|
// return a 32 bit handle for a raw ptr; DMA chaining for example embeds pointers in 32 bit values
|
|
// which of course does not work if we're running the code natively on a 64 bit platforms. Therefore
|
|
// we provide this macro which allows that code to provide a 64->32 bit mapping in host mode
|
|
#define host_safe_hw_ptr(x) host_safe_hw_ptr_impl((uintptr_t)(x))
|
|
void *decode_host_safe_hw_ptr(uint32_t ptr);
|
|
|
|
#define __fast_mul(a,b) ((a)*(b))
|
|
|
|
typedef unsigned int uint;
|
|
|
|
static inline int32_t __mul_instruction(int32_t a,int32_t b)
|
|
{
|
|
return a*b;
|
|
}
|
|
|
|
static inline void __compiler_memory_barrier(void) {
|
|
}
|
|
|
|
uint get_core_num();
|
|
|
|
static inline uint __get_current_exception(void) {
|
|
return 0;
|
|
}
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|