The read_register_64_bit and write_register_64_bit are used for mrrc and mccr instructions which read and write 64 bit values in to two registers.
The interface also defines a flag, finished, which indicates whether a memory transfer operation is finished or not.
The function reset is called when the cpu is reset, and allows the coprocessor to also do a reset, the argument hard_reset indicates whether the reset was soft (0) or hard (1).
SIM_INTERFACE(arm_coprocessor) { void (*process_data)(conf_object_t *NOTNULL obj, uint32 CRd, uint32 opcode_1, uint32 CRn, uint32 CRm, uint32 opcode_2, int type); void (*load_coprocessor)(conf_object_t *NOTNULL obj, uint32 CRd, uint32 N, uint32 Options, uint32 value, int type); uint32 (*read_register)(conf_object_t *NOTNULL obj, uint32 opcode_1, uint32 CRn, uint32 CRm, uint32 opcode_2, int type); void (*write_register)(conf_object_t *NOTNULL obj, uint32 value, uint32 opcode_1, uint32 CRn, uint32 CRm, uint32 opcode_2, int type); uint64 (*read_register_64_bit)(conf_object_t *NOTNULL obj, uint32 opcode_1, uint32 CRm, int type); void (*write_register_64_bit)(conf_object_t *NOTNULL obj, uint64 value, uint32 opcode_1, uint32 CRm, int type); uint32 (*store_coprocessor)(conf_object_t *NOTNULL obj, uint32 CRd, uint32 N, uint32 Options, int type); void (*reset)(conf_object_t *NOTNULL obj, int hard_reset); }; #define ARM_COPROCESSOR_INTERFACE "arm_coprocessor"