modified entry point for XHDI routines

This commit is contained in:
Markus Fröschle
2013-05-10 13:16:00 +00:00
parent dc98071e96
commit 62c264975f
5 changed files with 21 additions and 4 deletions

View File

@@ -81,7 +81,8 @@ ASRCS= \
$(SRCDIR)/mmu.S \ $(SRCDIR)/mmu.S \
$(SRCDIR)/exceptions.S \ $(SRCDIR)/exceptions.S \
$(SRCDIR)/supervisor.S \ $(SRCDIR)/supervisor.S \
$(SRCDIR)/illegal_instruction.S $(SRCDIR)/illegal_instruction.S \
$(SRCDIR)/xhdi_vec.S
COBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(CSRCS))) COBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(CSRCS)))
AOBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.S,%.o,$(ASRCS))) AOBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.S,%.o,$(ASRCS)))

View File

@@ -46,6 +46,7 @@ SECTIONS
objs/illegal_instruction.o(.text) objs/illegal_instruction.o(.text)
objs/xhdi_sd.o(.text) objs/xhdi_sd.o(.text)
objs/xhdi_interface.o(text) objs/xhdi_interface.o(text)
objs/xhdi_vec.o(text)
*(.data) *(.data)
*(.bss) *(.bss)

View File

@@ -89,7 +89,7 @@ struct XHDICALL_args
uint16_t opcode; uint16_t opcode;
}; };
extern unsigned long xhdi_call(struct XHDICALL_args stack); extern unsigned long xhdi_call(struct XHDICALL_args *stack);
extern xhdi_call_fun xhdi_sd_install(xhdi_call_fun old_vector) __attribute__((__interrupt__)); extern xhdi_call_fun xhdi_sd_install(xhdi_call_fun old_vector) __attribute__((__interrupt__));

View File

@@ -29,10 +29,10 @@
#define DRIVER_VERSION 0x130 #define DRIVER_VERSION 0x130
static BPB sd_bpb[4]; /* space for four partitions on SD card */ static BPB sd_bpb[4]; /* space for four partitions on SD card */
static xhdi_call_fun old_vector = NULL; static xhdi_call_fun old_vector = NULL;
extern xhdi_call_fun xhdi_vec;
__attribute__((__interrupt__)) xhdi_call_fun xhdi_sd_install(xhdi_call_fun ov) __attribute__((__interrupt__)) xhdi_call_fun xhdi_sd_install(xhdi_call_fun ov)
{ {
@@ -43,7 +43,7 @@ __attribute__((__interrupt__)) xhdi_call_fun xhdi_sd_install(xhdi_call_fun ov)
"move.l %[xhdi_call],d1\n\t" "move.l %[xhdi_call],d1\n\t"
"move.l d1,(sp)\n\t" /* FIXME: dirty overwrite of saved register on stack with return value */ "move.l d1,(sp)\n\t" /* FIXME: dirty overwrite of saved register on stack with return value */
: /* output */ : /* output */
: [xhdi_call]"g"(xhdi_call) : [xhdi_call]"g"(xhdi_vec)
: "d1","memory"); : "d1","memory");
*_drvbits |= (uint32_t) 1 << ('S' - 'A'); *_drvbits |= (uint32_t) 1 << ('S' - 'A');

View File

@@ -0,0 +1,15 @@
//
// XHDI entry point
//
.extern _xhdi_call
.globl _xhdi_vec
_xhdi_vec:
lea -12(sp),sp
movem.l d1/a0-a1,(sp)
pea 16(sp)
jsr _xhdi_call
addq.l #4,sp
movem.l (sp),d1/a0-a1
lea 12(sp),sp
rts