Source
...
Target
Commits (2)
/* (5.52) /* (5.53)
* *
* This file is automatically maintained by srccommit, do not edit manually. * This file is automatically maintained by srccommit, do not edit manually.
* Last processed by srccommit version: 1.1. * Last processed by srccommit version: 1.1.
* *
*/ */
#define Module_MajorVersion_CMHG 5.52 #define Module_MajorVersion_CMHG 5.53
#define Module_MinorVersion_CMHG #define Module_MinorVersion_CMHG
#define Module_Date_CMHG 22 Dec 2008 #define Module_Date_CMHG 15 Dec 2011
#define Module_MajorVersion "5.52" #define Module_MajorVersion "5.53"
#define Module_Version 552 #define Module_Version 553
#define Module_MinorVersion "" #define Module_MinorVersion ""
#define Module_Date "22 Dec 2008" #define Module_Date "15 Dec 2011"
#define Module_ApplicationDate "22-Dec-08" #define Module_ApplicationDate "15-Dec-11"
#define Module_ComponentName "Internet" #define Module_ComponentName "Internet"
#define Module_ComponentPath "mixed/RiscOS/Sources/Networking/AUN/Internet" #define Module_ComponentPath "mixed/RiscOS/Sources/Networking/AUN/Internet"
#define Module_FullVersion "5.52" #define Module_FullVersion "5.53"
#define Module_HelpVersion "5.52 (22 Dec 2008)" #define Module_HelpVersion "5.53 (15 Dec 2011)"
#define Module_LibraryVersionInfo "5:52" #define Module_LibraryVersionInfo "5:53"
...@@ -63,14 +63,7 @@ CPFLAGS = ~cfr~v ...@@ -63,14 +63,7 @@ CPFLAGS = ~cfr~v
LDFLAGS = -linkversion 514 LDFLAGS = -linkversion 514
WFLAGS = ~c~v WFLAGS = ~c~v
# include ModuleLibs
# Libraries
#
ANSILIB = CLib:o.ansilib
CLIB = CLIB:o.stubs
RLIB = RISCOSLIB:o.risc_oslib
ROMCSTUBS = RISCOSLIB:o.romcstubs
ABSSYM = RISC_OSLib:o.abssym
OBJS =\ OBJS =\
InetHdr.o\ InetHdr.o\
...@@ -138,10 +131,10 @@ OBJS =\ ...@@ -138,10 +131,10 @@ OBJS =\
# Main rules: # Main rules:
# #
all: ${TARGET} all: ${TARGET}
@echo ${COMPONENT}: Module built (Relocatable) @echo ${COMPONENT}: Module built (Relocatable)
${TARGET}: ${OBJS} ${CLIB} ${TARGET}: ${OBJS} ${CLIB}
${LD} ${LDFLAGS} -rmf -o $@ ${OBJS} ${CLIB} -s Syms ${LD} ${LDFLAGS} -rmf -o $@ ${OBJS} ${CLIB} ${ASMUTILS} -s Syms
${MODSQZ} $@ ${MODSQZ} $@
Access $@ WR/r Access $@ WR/r
...@@ -170,7 +163,7 @@ clean: ...@@ -170,7 +163,7 @@ clean:
@echo ${COMPONENT}: cleaned @echo ${COMPONENT}: cleaned
${ROM_MODULE}: ${OBJS} ${ROMCSTUBS} ${ROM_MODULE}: ${OBJS} ${ROMCSTUBS}
${LD} ${LDFLAGS} -o $@ -aof ${OBJS} ${ROMCSTUBS} ${LD} ${LDFLAGS} -o $@ -aof ${OBJS} ${ROMCSTUBS} ${ASMUTILS}
o.socket_swi: InetHdr.h o.socket_swi: InetHdr.h
......
...@@ -48,8 +48,6 @@ void callback_finalise(void); ...@@ -48,8 +48,6 @@ void callback_finalise(void);
void revarpintr(void); void revarpintr(void);
void callo_handler(void); void callo_handler(void);
void user_mode_donothing(void);
_kernel_oserror *calleverytick(void (*fun)(void)); _kernel_oserror *calleverytick(void (*fun)(void));
void removetickerevent(void (*fun)(void)); void removetickerevent(void (*fun)(void));
......
...@@ -18,44 +18,27 @@ ...@@ -18,44 +18,27 @@
; Assembler function to enable podule irqs ; Assembler function to enable podule irqs
; ;
GET Hdr:ListOpts GET Hdr:ListOpts
GET Hdr:Macros GET Hdr:Macros
GET Hdr:System GET Hdr:System
GET Hdr:EnvNumbers GET Hdr:EnvNumbers
GET Hdr:ModHand GET Hdr:ModHand
GET Hdr:APCS.<APCS> GET Hdr:APCS.<APCS>
EXPORT user_mode_donothing EXPORT splet
EXPORT splet EXPORT splimp
EXPORT splimp EXPORT splnet
EXPORT splnet EXPORT splx
EXPORT splx EXPORT splhi
EXPORT splhi EXPORT ensure_irqs_on
EXPORT ensure_irqs_on EXPORT restore_irqs
EXPORT restore_irqs EXPORT splrestore
EXPORT splrestore EXPORT in_cksum_hdr
EXPORT in_cksum_hdr EXPORT get_t0_count
EXPORT get_t0_count
^ 0 ^ 0
AREA poduleirqs, PIC, CODE, REL, READONLY AREA poduleirqs, PIC, CODE, REL, READONLY
ALIGN
; os_error *usermode_donothing();
user_mode_donothing ROUT
FunctionEntry
; Now execute a SWI in user mode to trigger callbacks
WritePSRc 0, r0 ; IRQs on, user mode
MOV r0, #0
MOV r1, #1
SWI XOS_Byte ; Read OS version
SWI XOS_EnterOS ; Back to SVC mode
Return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
...@@ -71,8 +54,8 @@ splet ...@@ -71,8 +54,8 @@ splet
splnet splnet
splimp splimp
[ {CONFIG}=26 [ {CONFIG}=26
AND r0, lr, # I_bit AND r0, lr, # I_bit
ORRS pc, lr, # I_bit ORRS pc, lr, # I_bit
| |
MRS a1, CPSR MRS a1, CPSR
ORR a2, a1, #I32_bit ORR a2, a1, #I32_bit
...@@ -92,8 +75,8 @@ splimp ...@@ -92,8 +75,8 @@ splimp
ensure_irqs_on ensure_irqs_on
[ {CONFIG}=26 [ {CONFIG}=26
AND r0, lr, # I_bit AND r0, lr, # I_bit
BICS pc, lr, # I_bit BICS pc, lr, # I_bit
| |
MRS a1, CPSR MRS a1, CPSR
BIC a2, a1, #I32_bit BIC a2, a1, #I32_bit
...@@ -114,8 +97,8 @@ restore_irqs ...@@ -114,8 +97,8 @@ restore_irqs
splrestore splrestore
splx splx
[ {CONFIG}=26 [ {CONFIG}=26
BIC lr, lr, # I_bit BIC lr, lr, # I_bit
ORRS pc, lr, r0 ORRS pc, lr, r0
| |
MRS a2, CPSR MRS a2, CPSR
BIC a2, a2, #I32_bit BIC a2, a2, #I32_bit
...@@ -165,15 +148,15 @@ get_t0_count ...@@ -165,15 +148,15 @@ get_t0_count
; ;
in_cksum_hdr in_cksum_hdr
; Load 20 bytes of IP header ; Load 20 bytes of IP header
LDMIA a1,{a1-a4,ip} LDMIA a1,{a1-a4,ip}
; Calculate 1's-complement sum of the 5 32-bit words. ; Calculate 1's-complement sum of the 5 32-bit words.
ADDS a1,a1,a2 ADDS a1,a1,a2
ADCS a1,a1,a3 ADCS a1,a1,a3
ADCS a1,a1,a4 ADCS a1,a1,a4
ADCS a1,a1,ip ADCS a1,a1,ip
ADC a1,a1,#0 ADC a1,a1,#0
; Fold two 16-bit words together - top half will ; Fold two 16-bit words together - top half will
; contain the 1's complement sum ; contain the 1's complement sum
...@@ -187,15 +170,15 @@ in_cksum_hdr ...@@ -187,15 +170,15 @@ in_cksum_hdr
Return ,LinkNotStacked Return ,LinkNotStacked
^ 0 ^ 0
m_next # 4 m_next # 4
m_list # 4 m_list # 4
m_off # 4 m_off # 4
m_len # 4 m_len # 4
[ {TRUE} [ {TRUE}
EXPORT in_cksum EXPORT in_cksum
; ;
; This routine is engineered to be rapid on cached ARMs. ; This routine is engineered to be rapid on cached ARMs.
...@@ -242,148 +225,148 @@ m_len # 4 ...@@ -242,148 +225,148 @@ m_len # 4
; In final 64 bytes: ; In final 64 bytes:
; a3 = number of bits present in final word (0-31) ; a3 = number of bits present in final word (0-31)
; ;
ROUT ROUT
in_cksum in_cksum
FunctionEntry "v1-v6,sl,fp" FunctionEntry "v1-v6,sl,fp"
; Start off checksum and rotate ; Start off checksum and rotate
MOV v3, #0 MOV v3, #0
MOV ip, #0 MOV ip, #0
99 LDR v1,[a1,#m_off] 99 LDR v1,[a1,#m_off]
; v2 = length of mbuf ; v2 = length of mbuf
LDR v2,[a1,#m_len] LDR v2,[a1,#m_len]
; v1 = ptr to data ; v1 = ptr to data
ADD v1,a1,v1 ADD v1,a1,v1
; if mlen > len, mlen = len ; if mlen > len, mlen = len
CMPS v2,a2 CMPS v2,a2
MOVHI v2,a2 MOVHI v2,a2
; len -= mlen ; len -= mlen
SUB a2,a2,v2 SUB a2,a2,v2
ANDS a3,v1,#3 ANDS a3,v1,#3
BLNE fiddly BLNE fiddly
; If we have 64 bytes, do it fast (utilising burst ; If we have 64 bytes, do it fast (utilising burst
; reads) ; reads)
SUBS v2,v2,#64 SUBS v2,v2,#64
BMI %F97 BMI %F97
0 LDMIA v1!,{a3,a4,v4,v5,v6,sl,fp,lr} 0 LDMIA v1!,{a3,a4,v4,v5,v6,sl,fp,lr}
ADDS ip,ip,a3 ADDS ip,ip,a3
ADCS ip,ip,a4 ADCS ip,ip,a4
ADCS ip,ip,v4 ADCS ip,ip,v4
ADCS ip,ip,v5 ADCS ip,ip,v5
ADCS ip,ip,v6 ADCS ip,ip,v6
ADCS ip,ip,sl ADCS ip,ip,sl
ADCS ip,ip,fp ADCS ip,ip,fp
ADCS ip,ip,lr ADCS ip,ip,lr
LDMIA v1!,{a3,a4,v4,v5,v6,sl,fp,lr} LDMIA v1!,{a3,a4,v4,v5,v6,sl,fp,lr}
ADCS ip,ip,a3 ADCS ip,ip,a3
ADCS ip,ip,a4 ADCS ip,ip,a4
ADCS ip,ip,v4 ADCS ip,ip,v4
ADCS ip,ip,v5 ADCS ip,ip,v5
ADCS ip,ip,v6 ADCS ip,ip,v6
ADCS ip,ip,sl ADCS ip,ip,sl
ADCS ip,ip,fp ADCS ip,ip,fp
ADCS ip,ip,lr ADCS ip,ip,lr
ADC ip,ip,#0 ADC ip,ip,#0
SUBS v2,v2,#64 SUBS v2,v2,#64
BGE %B0 BGE %B0
; If we have 16 bytes, do it fast (utilising burst ; If we have 16 bytes, do it fast (utilising burst
; reads) ; reads)
97 ADDS v2,v2,#64-16 97 ADDS v2,v2,#64-16
BMI %F1 BMI %F1
98 LDMIA v1!,{a3,a4,v4,v5} 98 LDMIA v1!,{a3,a4,v4,v5}
ADDS ip,ip,a3 ADDS ip,ip,a3
ADCS ip,ip,a4 ADCS ip,ip,a4
ADCS ip,ip,v4 ADCS ip,ip,v4
ADCS ip,ip,v5 ADCS ip,ip,v5
ADC ip,ip,#0 ADC ip,ip,#0
SUBS v2,v2,#16 SUBS v2,v2,#16
BGE %B98 BGE %B98
; Right, down to < 16 bytes. ; Right, down to < 16 bytes.
; However we get here, C is clear ; However we get here, C is clear
; Do we have an "odd" number? ; Do we have an "odd" number?
1 ANDS a3,v2,#3 ; Doesn't alter C 1 ANDS a3,v2,#3 ; Doesn't alter C
BEQ %F2 BEQ %F2
; Yes we do. Argh! ; Yes we do. Argh!
; a3 is no of bytes present in incomplete word ; a3 is no of bytes present in incomplete word
; Get lr to point to end word ; Get lr to point to end word
SUB lr,v2,a3 SUB lr,v2,a3
ADD lr,lr,#16 ADD lr,lr,#16
; Load word containing end-point. This will give us a3 bits ; Load word containing end-point. This will give us a3 bits
; that need to be ignored (high-bits). ; that need to be ignored (high-bits).
LDR a4,[v1,lr] LDR a4,[v1,lr]
; set a3 to no of bits present in incomplete word ; set a3 to no of bits present in incomplete word
MOV a3,a3,LSL #3 MOV a3,a3,LSL #3
; set lr to number of bits missing in incomplete word ; set lr to number of bits missing in incomplete word
RSB lr,a3,#32 RSB lr,a3,#32
; clear bits to be ignored ; clear bits to be ignored
MOV a4,a4,LSL lr MOV a4,a4,LSL lr
; add incomplete word to checksum ; add incomplete word to checksum
ADDS ip,ip,a4,LSR lr ADDS ip,ip,a4,LSR lr
; reduce amount left to read so the following code ; reduce amount left to read so the following code
; will only sum remaining whole words ; will only sum remaining whole words
BIC v2,v2,#3 BIC v2,v2,#3
; Now we continue. Note that as we reach label 2, a3 will ; Now we continue. Note that as we reach label 2, a3 will
; be set to the number of extra bits beyond the complete ; be set to the number of extra bits beyond the complete
; words in the mbuf. ; words in the mbuf.
; Branch as appropriate to sum remaining 0-3 words ; Branch as appropriate to sum remaining 0-3 words
; Note that state of C as we reach this point is significant; ; Note that state of C as we reach this point is significant;
; if we didn't go through the incomplete word malarky, C ; if we didn't go through the incomplete word malarky, C
; must be clear, otherwise we take C from previous ADDS ; must be clear, otherwise we take C from previous ADDS
; (although this will of course be clear also). ; (although this will of course be clear also).
; ;
; Can't really loop here as any sort of end-of-loop test ; Can't really loop here as any sort of end-of-loop test
; will corrupt the C flag. ; will corrupt the C flag.
2 SUB pc,pc,v2,LSL #1 2 SUB pc,pc,v2,LSL #1
NOP NOP
NOP ; Can't get here (honest!) NOP ; Can't get here (honest!)
NOP NOP
LDR a4,[v1],#4 ; 12 LDR a4,[v1],#4 ; 12
ADCS ip,ip,a4 ADCS ip,ip,a4
LDR a4,[v1],#4 ; 8 LDR a4,[v1],#4 ; 8
ADCS ip,ip,a4 ADCS ip,ip,a4
LDR a4,[v1] ; 4 LDR a4,[v1] ; 4
ADCS ip,ip,a4 ADCS ip,ip,a4
ADC ip,ip,#0 ; 0 ADC ip,ip,#0 ; 0
; Have we finished? ; Have we finished?
TEQS a2,#0 TEQS a2,#0
BEQ %F03 BEQ %F03
; Now then, now then, now then. If this mbuf did not have ; Now then, now then, now then. If this mbuf did not have
; a complete number of words, the next one will have "rotated ; a complete number of words, the next one will have "rotated
; words". Eg in 3 mbufs of 5 bytes: ; words". Eg in 3 mbufs of 5 bytes:
; ;
; [(A B C D) (A)] -> [(B C D A) (B)] -> [(C D A B) (C)] ; [(A B C D) (A)] -> [(B C D A) (B)] -> [(C D A B) (C)]
; ;
; to cope with this, rotate the checksum so far to match ; to cope with this, rotate the checksum so far to match
; the rotation state of the next mbuf (eg rotate it one byte ; the rotation state of the next mbuf (eg rotate it one byte
; left in the above example), and keep track of the total ; left in the above example), and keep track of the total
; rotations done in v3, so we can unwind at the end. ; rotations done in v3, so we can unwind at the end.
; ;
MOV ip,ip,ROR a3 MOV ip,ip,ROR a3
SUB v3,v3,a3 SUB v3,v3,a3
; Back to the top for the next mbuf! ; Back to the top for the next mbuf!
LDR a1,[a1,#m_next] LDR a1,[a1,#m_next]
B %B99 B %B99
3 MOV ip,ip,ROR v3 3 MOV ip,ip,ROR v3
; Fold two 16-bit words together - top half will ; Fold two 16-bit words together - top half will
; contain the 1's complement sum ; contain the 1's complement sum
...@@ -395,35 +378,35 @@ in_cksum ...@@ -395,35 +378,35 @@ in_cksum
; Shift it down to the bottom ; Shift it down to the bottom
MOV a1,a1,LSR #16 MOV a1,a1,LSR #16
; And... relax. ; And... relax.
Return "v1-v6,sl,fp" Return "v1-v6,sl,fp"
; This is very rare, so separate it off down here ; This is very rare, so separate it off down here
; can't be bothered to optimise ; can't be bothered to optimise
; a3 is number of missing bytes ; a3 is number of missing bytes
fiddly fiddly
; Check if out of data ; Check if out of data
TEQS v2,#0 TEQS v2,#0
MOVEQ pc,lr MOVEQ pc,lr
; Load byte ; Load byte
11 LDRB a4,[v1],#1 11 LDRB a4,[v1],#1
; Add to checksum ; Add to checksum
ADDS ip,ip,a4 ADDS ip,ip,a4
ADC ip,ip,#0 ADC ip,ip,#0
; Rotate checksum ; Rotate checksum
MOV ip,ip,ROR #8 MOV ip,ip,ROR #8
SUB v3,v3,#8 SUB v3,v3,#8
; Reduce counter ; Reduce counter
SUBS v2,v2,#1 SUBS v2,v2,#1
MOVEQ pc,lr MOVEQ pc,lr
TSTS v1,#3 TSTS v1,#3
BNE %B11 BNE %B11
MOV pc,lr MOV pc,lr
] ]
END END
......
...@@ -43,12 +43,13 @@ ...@@ -43,12 +43,13 @@
#include "netinet/in_pcb.h" // #include "netinet/in_pcb.h" //
#include "debug.h" #include "debug.h"
#include "module.h"
#include "swiveneers.h" #include "swiveneers.h"
#include "module.h"
#include "AsmUtils/callbacks.h"
#include "Global/HALEntries.h" #include "Global/HALEntries.h"
#define TickerV 28 #define TickerV 28
#define NCALLOUT 20 #define NCALLOUT 20
...@@ -523,7 +524,7 @@ tsleep(event, prio, wmesg, wait, sleep_task) ...@@ -523,7 +524,7 @@ tsleep(event, prio, wmesg, wait, sleep_task)
goto out; goto out;
} }
user_mode_donothing(); usermode_donothing();
} }
out: out:
if (wait) if (wait)
......
...@@ -22,169 +22,169 @@ ...@@ -22,169 +22,169 @@
; I have recrafted the tick_handler routine from unixenv.c into ; I have recrafted the tick_handler routine from unixenv.c into
; assembler that can run directly in IRQ mode on TickerV. ; assembler that can run directly in IRQ mode on TickerV.
NETISR_CALLO * 1 NETISR_CALLO * 1
^ 0 ^ 0
tv_sec # 4 tv_sec # 4
tv_usec # 4 tv_usec # 4
^ 0 ^ 0
c_next # 4 c_next # 4
c_arg # 4 c_arg # 4
c_func # 4 c_func # 4
c_time # 4 c_time # 4
GET Hdr:ListOpts GET Hdr:ListOpts
GET Hdr:Macros GET Hdr:Macros
GET Hdr:System GET Hdr:System
GET Hdr:APCS.<APCS> GET Hdr:APCS.<APCS>
AREA TickEntry,CODE,READONLY AREA TickEntry,CODE,READONLY
; The TickerV entry point - we arrive in IRQ mode with IRQs disabled. ; The TickerV entry point - we arrive in IRQ mode with IRQs disabled.
EXPORT tick_entry EXPORT tick_entry
tick_entry tick_entry
STMFD sp!,{r0-r2,lr} Push "r0-r2, lr"
LDR r2,[r12] LDR r2,[r12]
LDR r2,[r2,#8] LDR r2,[r2,#8]
LDR r0,P_time LDR r0,P_time
ADD r0,r2,r0 ADD r0,r2,r0
LDR r1,[r0,#tv_usec] LDR r1,[r0,#tv_usec]
ADD r1,r1,#&0710 ADD r1,r1,#&0710
ADD r1,r1,#&2000 ; time.tv_usec += 10000 ADD r1,r1,#&2000 ; time.tv_usec += 10000
STR r1,[r0,#tv_usec] STR r1,[r0,#tv_usec]
SUBS lr,r1,#&000F4000 SUBS lr,r1,#&000F4000
CMPGE lr,#&240 ; if time.tv_usec >= 1000000 CMPGE lr,#&240 ; if time.tv_usec >= 1000000
BLT %F1 BLT %F1
MOV r1,#0 MOV r1,#0
STR r1,[r0,#tv_usec] ; time.tv_usec = 0 STR r1,[r0,#tv_usec] ; time.tv_usec = 0
LDR r1,[r0,#tv_sec] ; time.tv_sec ++; LDR r1,[r0,#tv_sec] ; time.tv_sec ++;
ADD r1,r1,#1 ADD r1,r1,#1
STR r1,[r0,#tv_sec] STR r1,[r0,#tv_sec]
1 MOV r0,#0 ; r0=needtocall 1 MOV r0,#0 ; r0=needtocall
LDR r1,P_calltodo LDR r1,P_calltodo
ADD r1,r2,r1 ; sort out relocations ADD r1,r2,r1 ; sort out relocations
LDR r1,[r1,#c_next] ; r1=calltodo->c_next LDR r1,[r1,#c_next] ; r1=calltodo->c_next
TEQS r1,#0 TEQS r1,#0
LDMEQFD sp!,{r0-r2,pc} Pull "r0-r2, pc",EQ
0 ; while (r1) 0 ; while (r1)
LDR r2,[r1,#c_time] LDR r2,[r1,#c_time]
SUBS r2,r2,#1 ; decrement r1->c_time SUBS r2,r2,#1 ; decrement r1->c_time
STR r2,[r1,#c_time] STR r2,[r1,#c_time]
BGT break ; if r1->c_time>0 end loop BGT break ; if r1->c_time>0 end loop
BEQ break_with_sched ; if r1->c_time==0 do schednetisr BEQ break_with_sched ; if r1->c_time==0 do schednetisr
MOV r0,#1 ; set needtocall MOV r0,#1 ; set needtocall
LDR r1,[r1,#c_next] ; r1=r1->c_next LDR r1,[r1,#c_next] ; r1=r1->c_next
TEQS r1,#0 TEQS r1,#0
BNE %B0 BNE %B0
B break_with_sched B break_with_sched
break break
TEQS a1,#0 ; check needtocall TEQS a1,#0 ; check needtocall
LDMEQFD sp!,{r0-r2,pc} Pull "r0-r2, pc",EQ
break_with_sched break_with_sched
LDR a3,[r12] LDR a3,[r12]
LDR a3,[a3,#8] LDR a3,[a3,#8]
; This code corresponds to: ; This code corresponds to:
; schednetisr(NETISR_CALLO); which is a macro: ; schednetisr(NETISR_CALLO); which is a macro:
; netisr |= 1<<NETISR_CALLO; ; netisr |= 1<<NETISR_CALLO;
LDR a1,P_netisr LDR a1,P_netisr
ADD a1,a3,a1 ADD a1,a3,a1
LDR a2,[a1] LDR a2,[a1]
ORR a2,a2,#(1:SHL:NETISR_CALLO) ORR a2,a2,#(1:SHL:NETISR_CALLO)
STR a2,[a1] STR a2,[a1]
; setsoftnet(); ; setsoftnet();
; if (callbackflag != 0) then return doing nowt ; if (callbackflag != 0) then return doing nowt
LDR a1,P_callbackflag LDR a1,P_callbackflag
ADD a1,a3,a1 ADD a1,a3,a1
LDR a2,[a1] LDR a2,[a1]
TEQS a2,#0 TEQS a2,#0
LDMNEFD sp!,{a1-a3,pc} Pull "a1-a3, pc",NE
; callbackflag = 1; ; callbackflag = 1;
MOV a2,#1 MOV a2,#1
STR a2,[a1] STR a2,[a1]
; callback(CALLB_CALLB); ; callback(CALLB_CALLB);
; struct callback_record *cbptr = callbacks + CALLB_CALLB ; struct callback_record *cbptr = callbacks + CALLB_CALLB
LDR a1,P_callbacks LDR a1,P_callbacks
ADD a1,a3,a1 ; Now a1->callback[CALLB_CALLB] ADD a1,a3,a1 ; Now a1->callback[CALLB_CALLB]
; cbptr->cb_outstanding++; ; cbptr->cb_outstanding++;
LDR a2,[a1,#4] LDR a2,[a1,#4]
ADD a2,a2,#1 ADD a2,a2,#1
STR a2,[a1,#4] STR a2,[a1,#4]
; os_add_callback(cbptr->cb_entry, module_wsp); ; os_add_callback(cbptr->cb_entry, module_wsp);
LDR a1,[a1,#0] LDR a1,[a1,#0]
MOV a2,r12 MOV a2,r12
; Right, guff to change up into SVC mode to call this SWI. ; Right, guff to change up into SVC mode to call this SWI.
; This is okay because R12 isn't needed from now on. ; This is okay because R12 isn't needed from now on.
[ {CONFIG}=26 [ {CONFIG}=26
MOV r12,pc ; R12 holds PC and PSR MOV r12,pc ; R12 holds PC and PSR
AND r12,r12,#3 ; Extract current mode bits AND r12,r12,#3 ; Extract current mode bits
EOR r12,r12,#3 ; R8 = current mode EOR SVC EOR r12,r12,#3 ; R8 = current mode EOR SVC
TEQP r12,pc ; Enter SVC TEQP r12,pc ; Enter SVC
NOP NOP
| |
MRS r12,CPSR MRS r12,CPSR
ORR lr,r12,#3 ORR lr,r12,#3
MSR CPSR_c,lr MSR CPSR_c,lr
] ]
STMFD sp!,{lr} ; Save R14_SVC (in case in IRQ mode) Push "lr" ; Save R14_SVC (in case in IRQ mode)
SWI XOS_AddCallBack SWI XOS_AddCallBack
LDMFD sp!,{lr} ; Restore R14_SVC Pull "lr" ; Restore R14_SVC
[ {CONFIG}=26 [ {CONFIG}=26
TEQP r12,pc ; Restore mode, preserving flags TEQP r12,pc ; Restore mode, preserving flags
NOP NOP
| |
MSR CPSR_c,r12 MSR CPSR_c,r12
] ]
LDMVCFD sp!,{a1-a3,pc} Pull "a1-a3, pc",VC
; if an error ; if an error
; callbackflag=0; ; callbackflag=0;
LDR a1,P_callbackflag LDR a1,P_callbackflag
ADD a1,a3,a1 ADD a1,a3,a1
MOV a2,#0 MOV a2,#0
STR a2,[a1] STR a2,[a1]
; callbackerr=1; ; callbackerr=1;
LDR a1,P_callbackerr LDR a1,P_callbackerr
ADD a1,a3,a1 ADD a1,a3,a1
MOV a2,#1 MOV a2,#1
STR a2,[a1] STR a2,[a1]
LDMFD sp!,{a1-a3,pc} Pull "a1-a3, pc"
P_time P_time
IMPORT kerneltime IMPORT kerneltime
DCD kerneltime DCD kerneltime
P_calltodo P_calltodo
IMPORT calltodo IMPORT calltodo
DCD calltodo DCD calltodo
P_netisr P_netisr
IMPORT netisr IMPORT netisr
DCD netisr DCD netisr
P_callbackflag P_callbackflag
IMPORT callbackflag IMPORT callbackflag
DCD callbackflag DCD callbackflag
P_callbacks P_callbacks
IMPORT callbacks IMPORT callbacks
DCD callbacks DCD callbacks
P_callbackerr P_callbackerr
IMPORT callbackerr IMPORT callbackerr
DCD callbackerr DCD callbackerr
; Extracted from ARM Architecture Reference ; Extracted from ARM Architecture Reference
EXPORT ntohl EXPORT ntohl
ntohl ; a1 = A , B , C , D ntohl ; a1 = A , B , C , D
EOR a2, a1, a1, ROR #16 ; a2 = A^C,B^D,C^A,D^B EOR a2, a1, a1, ROR #16 ; a2 = A^C,B^D,C^A,D^B
BIC a2, a2, #&ff0000 ; a2 = A^C, 0 ,C^A,D^B BIC a2, a2, #&ff0000 ; a2 = A^C, 0 ,C^A,D^B
MOV a1, a1, ROR #8 ; a1 = D , A , B , C MOV a1, a1, ROR #8 ; a1 = D , A , B , C
EOR a1, a1, a2, LSR #8 ; a1 = D , C , B , A EOR a1, a1, a2, LSR #8 ; a1 = D , C , B , A
Return ,LinkNotStacked Return ,LinkNotStacked
END END
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "kernel.h" #include "kernel.h"
#include "swis.h" #include "swis.h"
#include "AsmUtils/callbacks.h"
#include "int_hndlr.h" #include "int_hndlr.h"
#include "sys/param.h" #include "sys/param.h"
...@@ -861,7 +862,7 @@ _kernel_oserror *inet_final(void) ...@@ -861,7 +862,7 @@ _kernel_oserror *inet_final(void)
* of the Internet module, but I will leave it here for * of the Internet module, but I will leave it here for
* the time being. * the time being.
*/ */
user_mode_donothing(); usermode_donothing();
/* /*
* 990623 KBracey * 990623 KBracey
......
...@@ -44,12 +44,12 @@ MessageTrans_ErrorLookup EQU &41506 ...@@ -44,12 +44,12 @@ MessageTrans_ErrorLookup EQU &41506
CMP r7, r8 CMP r7, r8
BEQ |_clib_initialisemodule| BEQ |_clib_initialisemodule|
! 0 , "Softload decided upon 0x3800000 as the base of ROM" ! 0 , "Softload decided upon 0x3800000 as the base of ROM"
CMP r8, #&03800000 CMP r8, #&03800000
BLT |_clib_initialisemodule| BLT |_clib_initialisemodule|
ADR r0, module_ramload_error ADR r0, module_ramload_error
MOV r1, #0 MOV r1, #0
MOV r2, #0 MOV r2, #0
ADR r4, titlestr ADR r4, titlestr
MOV r5, #0 MOV r5, #0
MOV r6, #0 MOV r6, #0
MOV r7, #0 MOV r7, #0
...@@ -64,6 +64,6 @@ module_ramload_error ...@@ -64,6 +64,6 @@ module_ramload_error
DCB "RAMLoadC", 0 DCB "RAMLoadC", 0
titlestr titlestr
DCB "Internet", 0 DCB "Internet", 0
END END
...@@ -12,75 +12,62 @@ ...@@ -12,75 +12,62 @@
; See the License for the specific language governing permissions and ; See the License for the specific language governing permissions and
; limitations under the License. ; limitations under the License.
; ;
XOS_Byte * &20006
XOS_Word * &20007 GET Hdr:ListOpts
XOS_Module * &2001E GET Hdr:Macros
ModHandReason_Claim * 6 GET Hdr:System
ModHandReason_Free * 7 GET Hdr:APCS.<APCS>
XOS_Claim * &2001F GET Hdr:ModHand
XOS_Release * &20020 GET Hdr:MsgTrans
XOS_GenerateEvent * &20022 GET Hdr:Portable
XOS_ReadEscapeState * &2002C GET Hdr:TaskWindow
XOS_ServiceCall * &20030 GET Hdr:Econet
XOS_UpCall * &20033
XOS_ReadMonotonicTime * &20042 XMbuf_OpenSession * &6A580
XOS_AddCallBack * &20054 XMbuf_CloseSession * &6A581
XOS_ReadSysInfo * &20058 XMbuf_Control * &6A584
XOS_RemoveCallBack * &2005F
XEconet_InetRxDirect * &6001D Service_EnumerateNetworkDrivers * &9B
XMessageTrans_FileInfo * &61500 Service_DCIProtocolStatus * &9F
XMessageTrans_OpenFile * &61501 Service_InternetStatus * &B0
XMessageTrans_Lookup * &61502 InternetStatus_AddressChanged * 0
XMessageTrans_CloseFile * &61504 InternetStatus_InterfaceUpDown * 2
XPortable_Speed * &62FC0
XPortable_ReadFeatures * &62FC5
XPortable_Idle * &62FC6
XTaskWindow_TaskInfo * &63380
XMbuf_OpenSession * &6A580
XMbuf_CloseSession * &6A581
XMbuf_Control * &6A584
Service_EnumerateNetworkDrivers * &9B
Service_DCIProtocolStatus * &9F
Service_InternetStatus * &B0
InternetStatus_AddressChanged * 0
InternetStatus_InterfaceUpDown * 2
InternetStatus_DynamicBootStart * 3 InternetStatus_DynamicBootStart * 3
InternetStatus_DynamicBootReply * 4 InternetStatus_DynamicBootReply * 4
InternetStatus_DynamicBootInform * 7 InternetStatus_DynamicBootInform * 7
InternetStatus_DuplicateIPAddress * 8 InternetStatus_DuplicateIPAddress * 8
EXPORT mbuf_open_session EXPORT mbuf_open_session
EXPORT mbufcontrol_version EXPORT mbufcontrol_version
EXPORT mbuf_close_session EXPORT mbuf_close_session
EXPORT messagetrans_file_info EXPORT messagetrans_file_info
EXPORT messagetrans_open_file EXPORT messagetrans_open_file
EXPORT messagetrans_lookup EXPORT messagetrans_lookup
EXPORT messagetrans_close_file EXPORT messagetrans_close_file
EXPORT service_dci_protocol_status EXPORT service_dci_protocol_status
EXPORT service_internetstatus_address_changed EXPORT service_internetstatus_address_changed
EXPORT service_internetstatus_interface_updown EXPORT service_internetstatus_interface_updown
EXPORT service_internetstatus_dynamicboot_start EXPORT service_internetstatus_dynamicboot_start
EXPORT service_internetstatus_dynamicboot_reply EXPORT service_internetstatus_dynamicboot_reply
EXPORT service_internetstatus_dynamicboot_inform EXPORT service_internetstatus_dynamicboot_inform
EXPORT service_internetstatus_duplicate_ip_address EXPORT service_internetstatus_duplicate_ip_address
EXPORT service_enumerate_network_drivers EXPORT service_enumerate_network_drivers
EXPORT osmodule_free EXPORT osmodule_free
EXPORT osmodule_claim EXPORT osmodule_claim
EXPORT os_read_monotonic_time EXPORT os_read_monotonic_time
EXPORT os_generate_event EXPORT os_generate_event
EXPORT os_claim EXPORT os_claim
EXPORT os_release EXPORT os_release
EXPORT os_add_call_back EXPORT os_add_call_back
EXPORT os_remove_call_back EXPORT os_remove_call_back
EXPORT taskwindow_task_info EXPORT taskwindow_task_info
EXPORT os_upcall EXPORT os_upcall
EXPORT econet_inet_rx_direct EXPORT econet_inet_rx_direct
EXPORT osreadsysinfo_hardware0 EXPORT osreadsysinfo_hardware0
EXPORT osreadsysinfo_machineid EXPORT osreadsysinfo_machineid
EXPORT osword_read_realtime EXPORT osword_read_realtime
EXPORT portable_read_features EXPORT portable_read_features
EXPORT portable_idle EXPORT portable_idle
EXPORT os_read_escape_state EXPORT os_read_escape_state
MACRO MACRO
...@@ -95,334 +82,330 @@ InternetStatus_DuplicateIPAddress * 8 ...@@ -95,334 +82,330 @@ InternetStatus_DuplicateIPAddress * 8
MACRO MACRO
LDMRet $regs,$cond LDMRet $regs,$cond
[ {CONFIG}=26 [ {CONFIG}=26
LDM$cond.FD sp!,{$regs,pc}^ LDM$cond.FD sp!, { $regs },^
| |
LDM$cond.FD sp!,{$regs,pc} LDM$cond.FD sp!, { $regs }
] ]
MEND MEND
AREA swiveneers,CODE,READONLY,PIC AREA swiveneers,CODE,READONLY,PIC
; _kernel_oserror *mbuf_open_session(struct mbctl *); ; _kernel_oserror *mbuf_open_session(struct mbctl *);
ROUT ROUT
mbuf_open_session mbuf_open_session
MOV ip,lr MOV ip,lr
SWI XMbuf_OpenSession SWI XMbuf_OpenSession
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; _kernel_oserror *mbufcontrol_version(int *version_out); ; _kernel_oserror *mbufcontrol_version(int *version_out);
ROUT ROUT
mbufcontrol_version mbufcontrol_version
MOV ip,lr MOV ip,lr
STR a1,[sp,#-4]! STR a1,[sp,#-4]!
MOV a1,#0 MOV a1,#0
SWI XMbuf_Control SWI XMbuf_Control
BVS %F01 BVS %F01
LDR lr,[sp] LDR lr,[sp]
TEQS lr,#0 TEQS lr,#0
STRNE a1,[lr] STRNE a1,[lr]
MOV a1,#0 MOV a1,#0
01 ADD sp,sp,#4 01 ADD sp,sp,#4
MOVRet ip MOVRet ip
; _kernel_oserror *mbuf_close_session(struct mbctl *); ; _kernel_oserror *mbuf_close_session(struct mbctl *);
ROUT ROUT
mbuf_close_session mbuf_close_session
MOV ip,lr MOV ip,lr
SWI XMbuf_CloseSession SWI XMbuf_CloseSession
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; _kernel_oserror *messagetrans_file_info(const char *filename); ; _kernel_oserror *messagetrans_file_info(const char *filename);
ROUT ROUT
messagetrans_file_info messagetrans_file_info
MOV ip,lr MOV ip,lr
MOV a2,a1 MOV a2,a1
SWI XMessageTrans_FileInfo SWI XMessageTrans_FileInfo
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; _kernel_oserror *messagetrans_open_file(u_long *fd, const char *filename, char *buffer); ; _kernel_oserror *messagetrans_open_file(u_long *fd, const char *filename, char *buffer);
ROUT ROUT
messagetrans_open_file messagetrans_open_file
MOVS ip,lr MOVS ip,lr
SWI XMessageTrans_OpenFile SWI XMessageTrans_OpenFile
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; _kernel_oserror *messagetrans_lookup(u_long *fd, const char *token, char *buffer, int size, char **result); ; _kernel_oserror *messagetrans_lookup(u_long *fd, const char *token, char *buffer, int size, char **result);
ROUT ROUT
messagetrans_lookup messagetrans_lookup
MOV ip,sp MOV ip,sp
STMFD sp!,{v1-v4,lr} Push "v1-v4,lr"
MOV v1,#0 MOV v1,#0
MOV v2,#0 MOV v2,#0
MOV v3,#0 MOV v3,#0
MOV v4,#0 MOV v4,#0
SWI XMessageTrans_Lookup SWI XMessageTrans_Lookup
LDMRet "v1-v4",VS LDMRet "v1-v4,pc",VS
LDR lr,[ip] LDR lr,[ip]
TEQS lr,#0 TEQS lr,#0
STRNE a3,[lr] STRNE a3,[lr]
MOV a1,#0 MOV a1,#0
LDMRet "v1-v4" LDMRet "v1-v4,pc"
; void messagetrans_close_file(u_long *fd); ; void messagetrans_close_file(u_long *fd);
ROUT ROUT
messagetrans_close_file messagetrans_close_file
MOVS ip,lr MOVS ip,lr
SWI XMessageTrans_CloseFile SWI XMessageTrans_CloseFile
MOVRet ip MOVRet ip
; void service_dci_protocol_status(void *wsp, int status, int ver, const char *title) ; void service_dci_protocol_status(void *wsp, int status, int ver, const char *title)
ROUT ROUT
service_dci_protocol_status service_dci_protocol_status
STMFD sp!,{v1,lr} Push "v1,lr"
MOV v1,a4 MOV v1,a4
MOV a4,a3 MOV a4,a3
MOV a3,a2 MOV a3,a2
MOV a2,#Service_DCIProtocolStatus MOV a2,#Service_DCIProtocolStatus
SWI XOS_ServiceCall SWI XOS_ServiceCall
LDMRet "v1" LDMRet "v1,pc"
; void service_internetstatus_address_changed(void) ; void service_internetstatus_address_changed(void)
ROUT ROUT
service_internetstatus_address_changed service_internetstatus_address_changed
MOV ip,lr MOV ip,lr
MOV a1,#InternetStatus_AddressChanged MOV a1,#InternetStatus_AddressChanged
MOV a2,#Service_InternetStatus MOV a2,#Service_InternetStatus
SWI XOS_ServiceCall SWI XOS_ServiceCall
MOVRet ip MOVRet ip
; void service_internetstatus_interface_updown(int state, const char *name, const void *dib) ; void service_internetstatus_interface_updown(int state, const char *name, const void *dib)
ROUT ROUT
service_internetstatus_interface_updown service_internetstatus_interface_updown
STMFD sp!,{v1,lr} Push "v1,lr"
MOV v1,a3 MOV v1,a3
MOV a4,a2 MOV a4,a2
MOV a3,a1 MOV a3,a1
MOV a2,#Service_InternetStatus MOV a2,#Service_InternetStatus
MOV a1,#InternetStatus_InterfaceUpDown MOV a1,#InternetStatus_InterfaceUpDown
SWI XOS_ServiceCall SWI XOS_ServiceCall
LDMRet "v1" LDMRet "v1,pc"
; int service_internetstatus_dynamicboot_start(const char *name, const void *dib, char *pkt, int len, ; int service_internetstatus_dynamicboot_start(const char *name, const void *dib, char *pkt, int len,
; int eoo, int *error_code) ; int eoo, int *error_code)
ROUT ROUT
service_internetstatus_dynamicboot_start service_internetstatus_dynamicboot_start
MOV ip, sp MOV ip, sp
STMFD sp!,{a1-a4,v1-v6,lr} Push "a1-a4,v1-v6,lr"
LDMFD sp!,{a3-a4,v1,v2} Pull "a3-a4,v1,v2"
STMFD sp!, {ip} Push "ip"
LDR v3, [ip] LDR v3, [ip]
MOV a2,#Service_InternetStatus MOV a2,#Service_InternetStatus
MOV a1,#InternetStatus_DynamicBootStart MOV a1,#InternetStatus_DynamicBootStart
SWI XOS_ServiceCall SWI XOS_ServiceCall
LDMFD sp!, {ip} Pull "ip"
LDR a4, [ip, #4] LDR a4, [ip, #4]
STRVC a3, [a4] STRVC a3, [a4]
MOVVS a1, #0 MOVVS a1, #0
STRVS a1, [a4] STRVS a1, [a4]
MOVVC a1, a2 MOVVC a1, a2
LDMRet "v1-v6" LDMRet "v1-v6,pc"
; int service_internetstatus_dynamicboot_reply(const char *name, const void *dib, char *pkt, int len) ; int service_internetstatus_dynamicboot_reply(const char *name, const void *dib, char *pkt, int len)
ROUT ROUT
service_internetstatus_dynamicboot_reply service_internetstatus_dynamicboot_reply
STMFD sp!,{a1-a4,v1-v6,lr} Push "a1-a4,v1-v6,lr"
LDMFD sp!,{a3-a4,v1,v2} Pull "a3-a4,v1,v2"
MOV a2,#Service_InternetStatus MOV a2,#Service_InternetStatus
MOV a1,#InternetStatus_DynamicBootReply MOV a1,#InternetStatus_DynamicBootReply
SWI XOS_ServiceCall SWI XOS_ServiceCall
MOVVS a1, #Service_InternetStatus MOVVS a1, #Service_InternetStatus
MOVVC a1, a2 MOVVC a1, a2
LDMRet "v1-v6" LDMRet "v1-v6,pc"
; int service_internetstatus_dynamicboot_inform(char *pkt, int len) ; int service_internetstatus_dynamicboot_inform(char *pkt, int len)
ROUT ROUT
service_internetstatus_dynamicboot_inform service_internetstatus_dynamicboot_inform
STMFD sp!,{v1-v6,lr} Push "v1-v6,lr"
MOV a4, a2 MOV a4, a2
MOV a3, a1 MOV a3, a1
MOV a2,#Service_InternetStatus MOV a2,#Service_InternetStatus
MOV a1,#InternetStatus_DynamicBootReply MOV a1,#InternetStatus_DynamicBootReply
SWI XOS_ServiceCall SWI XOS_ServiceCall
MOVVS a1, #Service_InternetStatus MOVVS a1, #Service_InternetStatus
MOVVC a1, a2 MOVVC a1, a2
LDMRet "v1-v6" LDMRet "v1-v6,pc"
; int service_internetstatus_duplicate_ip_address(const char *name, const void *dib, struct in_addr addr, u_char *hwaddr) ; int service_internetstatus_duplicate_ip_address(const char *name, const void *dib, struct in_addr addr, u_char *hwaddr)
ROUT ROUT
service_internetstatus_duplicate_ip_address service_internetstatus_duplicate_ip_address
STMFD sp!,{v1-v2,lr} Push "v1-v2,lr"
MOV v2,a4 MOV v2,a4
MOV v1,a3 MOV v1,a3
MOV a4,a2 MOV a4,a2
MOV a3,a1 MOV a3,a1
MOV a2,#Service_InternetStatus MOV a2,#Service_InternetStatus
MOV a1,#InternetStatus_DuplicateIPAddress MOV a1,#InternetStatus_DuplicateIPAddress
SWI XOS_ServiceCall SWI XOS_ServiceCall
MOVVC a1, a2 MOVVC a1, a2
LDMRet "v1-v2" LDMRet "v1-v2,pc"
; void service_enumerate_network_drivers(ChDibRef *) ; void service_enumerate_network_drivers(ChDibRef *)
ROUT ROUT
service_enumerate_network_drivers service_enumerate_network_drivers
MOV ip,lr MOV ip,lr
MOV a4,a1 MOV a4,a1
MOV a1,#0 MOV a1,#0
MOV a2,#Service_EnumerateNetworkDrivers MOV a2,#Service_EnumerateNetworkDrivers
SWI XOS_ServiceCall SWI XOS_ServiceCall
STRVC a1,[a4] STRVC a1,[a4]
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; void *osmodule_claim(size_t size) ; void *osmodule_claim(size_t size)
ROUT ROUT
osmodule_claim osmodule_claim
MOV ip,lr MOV ip,lr
MOV a4,a1 MOV a4,a1
MOV a1,#ModHandReason_Claim MOV a1,#ModHandReason_Claim
SWI XOS_Module SWI XOS_Module
MOVVC a1,a3 MOVVC a1,a3
MOVVS a1,#0 MOVVS a1,#0
MOVRet ip MOVRet ip
; void osmodule_free(void *) ; void osmodule_free(void *)
ROUT ROUT
osmodule_free osmodule_free
MOV ip,lr MOV ip,lr
MOV a3,a1 MOV a3,a1
MOV a1,#ModHandReason_Free MOV a1,#ModHandReason_Free
SWI XOS_Module SWI XOS_Module
MOVRet ip MOVRet ip
; u_long os_read_monotonic_time(void) ; u_long os_read_monotonic_time(void)
ROUT ROUT
os_read_monotonic_time os_read_monotonic_time
MOV ip,lr MOV ip,lr
SWI XOS_ReadMonotonicTime SWI XOS_ReadMonotonicTime
MOVRet ip MOVRet ip
; _kernel_oserror *os_generate_event(int, int, int, int) ; _kernel_oserror *os_generate_event(int, int, int, int)
ROUT ROUT
os_generate_event os_generate_event
MOV ip,lr MOV ip,lr
SWI XOS_GenerateEvent SWI XOS_GenerateEvent
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; _kernel_oserror *os_claim(int, int (*fun)(), void *) ; _kernel_oserror *os_claim(int, int (*fun)(), void *)
ROUT ROUT
os_claim os_claim
MOV ip,lr MOV ip,lr
SWI XOS_Claim SWI XOS_Claim
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; void os_release(int, int (*fun)(), void *) ; void os_release(int, int (*fun)(), void *)
ROUT ROUT
os_release os_release
MOV ip,lr MOV ip,lr
SWI XOS_Release SWI XOS_Release
MOVRet ip MOVRet ip
; _kernel_oserror *os_add_call_back(int (*fun)(), void *) ; _kernel_oserror *os_add_call_back(int (*fun)(), void *)
ROUT ROUT
os_add_call_back os_add_call_back
MOV ip,lr MOV ip,lr
SWI XOS_AddCallBack SWI XOS_AddCallBack
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; void os_remove_call_back(int (*fun)(), void *) ; void os_remove_call_back(int (*fun)(), void *)
ROUT ROUT
os_remove_call_back os_remove_call_back
MOV ip,lr MOV ip,lr
SWI XOS_RemoveCallBack SWI XOS_RemoveCallBack
MOVRet ip MOVRet ip
; int econet_inet_rx_direct(int, int, int, int, int, int, int) ; int econet_inet_rx_direct(int, int, int, int, int, int, int)
ROUT ROUT
econet_inet_rx_direct econet_inet_rx_direct
MOV ip,sp MOV ip,sp
STMFD sp!,{v1-v3,lr} Push "v1-v3,lr"
LDMIA ip,{v1-v3} LDMIA ip,{v1-v3}
SWI XEconet_InetRxDirect SWI XEconet_InetRxDirect
MOV a1,a2 MOV a1,a2
LDMRet "v1-v3" LDMRet "v1-v3,pc"
; _kernel_oserror *taskwindow_task_info(int, int *) ; _kernel_oserror *taskwindow_task_info(int, int *)
ROUT ROUT
taskwindow_task_info taskwindow_task_info
MOV ip,lr MOV ip,lr
MOV a4,a2 MOV a4,a2
SWI XTaskWindow_TaskInfo SWI XTaskWindow_TaskInfo
STRVC a1,[a4] STRVC a1,[a4]
MOVVC a1,#0 MOVVC a1,#0
MOVRet ip MOVRet ip
; int os_upcall(int, volatile void *) ; int os_upcall(int, volatile void *)
ROUT ROUT
os_upcall os_upcall
MOV ip,lr MOV ip,lr
SWI XOS_UpCall SWI XOS_UpCall
MOVRet ip MOVRet ip
; unsigned osreadsysinfo_hardware0(void) ; unsigned osreadsysinfo_hardware0(void)
ROUT ROUT
osreadsysinfo_hardware0 osreadsysinfo_hardware0
STMFD sp!,{v1,lr} Push "v1,lr"
MOV a1,#2 MOV a1,#2
SWI XOS_ReadSysInfo SWI XOS_ReadSysInfo
MOVVS a1,#0 MOVVS a1,#0
LDMRet "v1" LDMRet "v1,pc"
; void osreadsysinfo_machineid(unsigned int *mac) ; void osreadsysinfo_machineid(unsigned int *mac)
ROUT ROUT
osreadsysinfo_machineid osreadsysinfo_machineid
STMFD sp!,{v1,lr} Push "v1,lr"
MOV ip,a1 MOV ip,a1
MOV a1,#2 MOV a1,#2
SWI XOS_ReadSysInfo SWI XOS_ReadSysInfo
STMVCIA ip,{a4,v1} STMVCIA ip,{a4,v1}
LDMRet "v1" LDMRet "v1,pc"
; void osword_read_realtime(machinetime *mt) ; void osword_read_realtime(machinetime *mt)
ROUT ROUT
osword_read_realtime osword_read_realtime
MOV ip,lr MOV ip,lr
MOV a2,a1 MOV a2,a1
MOV a1,#14 MOV a1,#14
MOV lr,#3 MOV lr,#3
STRB lr,[a2] STRB lr,[a2]
SWI XOS_Word SWI XOS_Word
MOVRet ip MOVRet ip
PortableFeature_Speed * 1 :SHL: 0
PortableFeature_Idle * 1 :SHL: 4
PortableFeature_Stop * 1 :SHL: 5
; unsigned portable_read_features(void) ; unsigned portable_read_features(void)
ROUT ROUT
portable_read_features portable_read_features
MOV ip,lr MOV ip,lr
SWI XPortable_ReadFeatures ; Returns features mask in R1 SWI XPortable_ReadFeatures ; Returns features mask in R1
BVC %FT01 BVC %FT01
MOV a1,#0 ; Not available - may be an A4. MOV a1,#0 ; Not available - may be an A4.
MVN a2,#0 ; See if we have Portable_Speed. MVN a2,#0 ; See if we have Portable_Speed.
SWI XPortable_Speed SWI XPortable_Speed
MOVVC a2,#PortableFeature_Speed MOVVC a2,#PortableFeature_Speed
MOVVS a2,#0 MOVVS a2,#0
01 MOV a1,a2 01 MOV a1,a2
MOVRet ip MOVRet ip
; void portable_idle(void) ; void portable_idle(void)
ROUT ROUT
portable_idle portable_idle
MOV ip,lr MOV ip,lr
SWI XPortable_Idle SWI XPortable_Idle
MOVRet ip MOVRet ip
; int os_read_escape_state(void) ; int os_read_escape_state(void)
...@@ -434,4 +417,4 @@ os_read_escape_state ...@@ -434,4 +417,4 @@ os_read_escape_state
MOVCS a1,#1 MOVCS a1,#1
MOVRet ip MOVRet ip
END END
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
#include <stddef.h> #include <stddef.h>
#include "kernel.h" #include "kernel.h"
#include "swis.h" #include "swis.h"
#include "AsmUtils/callbacks.h"
#include "sys/types.h" #include "sys/types.h"
#include "sys/param.h" #include "sys/param.h"
...@@ -302,7 +303,7 @@ bootsleep(int cmd) ...@@ -302,7 +303,7 @@ bootsleep(int cmd)
if (whoiam_service_claimed == 0) if (whoiam_service_claimed == 0)
while (whoamiaddr == 0) while (whoamiaddr == 0)
{ {
user_mode_donothing(); usermode_donothing();
if (((cmd == SIOCGWHOIAMRB) || (cmd == SIOCGWHOIAMB)) && left_alt_is_pressed() && right_alt_is_pressed()) if (((cmd == SIOCGWHOIAMRB) || (cmd == SIOCGWHOIAMB)) && left_alt_is_pressed() && right_alt_is_pressed())
{ {
......