X-Git-Url: https://git.libre-soc.org/?p=riscv-isa-sim.git;a=blobdiff_plain;f=riscv%2Fdebug_module.h;h=813c6472189b00e16da5aae099bceed692ba8bf1;hp=82c449ef6a70a699af5438db8a9adc83e353a356;hb=9d1e10a36e771bf8cfbf515e07e856e021c1007a;hpb=4a97a05a6e806f7abcb6cd30685093aa5b9331a9 diff --git a/riscv/debug_module.h b/riscv/debug_module.h index 82c449e..813c647 100644 --- a/riscv/debug_module.h +++ b/riscv/debug_module.h @@ -74,7 +74,14 @@ typedef struct { class debug_module_t : public abstract_device_t { public: - debug_module_t(sim_t *sim, unsigned progbufsize, unsigned max_bus_master_bits); + /* + * If require_authentication is true, then a debugger must authenticate as + * follows: + * 1. Read a 32-bit value from authdata: + * 2. Write the value that was read back, plus one, to authdata. + */ + debug_module_t(sim_t *sim, unsigned progbufsize, unsigned max_bus_master_bits, + bool require_authentication); ~debug_module_t(); void add_device(bus_t *bus); @@ -96,7 +103,8 @@ class debug_module_t : public abstract_device_t // Actual size of the program buffer, which is 1 word bigger than we let on // to implement the implicit ebreak at the end. unsigned program_buffer_bytes; - unsigned max_bus_master_bits ; + unsigned max_bus_master_bits; + bool require_authentication; static const unsigned debug_data_start = 0x380; unsigned debug_progbuf_start; @@ -134,6 +142,9 @@ class debug_module_t : public abstract_device_t uint32_t sbaddress[4]; uint32_t sbdata[4]; + uint32_t challenge; + const uint32_t secret = 1; + processor_t *current_proc() const; void reset(); bool perform_abstract_command();