Kernel version 0.9 : Drivers modification for KCONFIG compliance

This commit is contained in:
Rémy GIBERT 2017-04-14 17:04:39 +02:00
parent e145bd427c
commit 1a57cc4352
6 changed files with 220 additions and 177 deletions

View File

@ -10,12 +10,10 @@ AUTO 6
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
*--------------------------------------
ZPTmpPtr1 .EQ ZPDRV
*--------------------------------------
SIG.05 .EQ $48
SIG.07 .EQ $48
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
@ -36,38 +34,48 @@ L.MSG.DETECT.KO .DA MSG.DETECT.KO
L.DEV.HEADER.NAME .DA DEV.HEADER.NAME
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL CPrintFYA
Dev.Detect >STYA ARGS
>LDYA L.MSG.DETECT
>SYSCALL PPrintFYA
stz ZPTmpPtr1
lda #$C1
sta ZPTmpPtr1+1
.1 ldy #5
lda (ZPTmpPtr1),y
cmp #SIG.05
bne .2
ldy #7
lda (ZPTmpPtr1),y
cmp #SIG.07
beq .3
.1 and #$0f
tay
lda A2osX.SLOTS,y
bne .3
.2 inc ZPTmpPtr1+1
ldx #DEVSIG.Length-1
.2 ldy DEVSIG.Offset,x
lda (ZPTmpPtr1),y
cmp DEVSIG.Value,x
bne .3
dex
bpl .2
bra .4
.3 inc ZPTmpPtr1+1 no match, try next slot....
lda ZPTmpPtr1+1
cmp #$C8
bne .1
>LDYA L.MSG.DETECT.KO
>SYSCALL CPrintFYA
>SYSCALL PPrintFYA
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
lda #MLI.ERR.NODEV Not Found in any slot, exiting
sec
rts
.3 lda ZPTmpPtr1+1
sta DEVSLOTCn
.4 lda ZPTmpPtr1+1
and #$0F
sta DEVSLOT0n
pha
tay
lda #A2osX.SLOTS.COM
sta A2osX.SLOTS,y
pla
ora #$30
sta DEV.HEADER.NAME+4
asl
@ -75,62 +83,82 @@ Dev.Detect >LDYA L.MSG.DETECT
asl
asl
sta DEVSLOTn0
>PUSHW L.DEV.HEADER.NAME
>LDYA L.MSG.DETECT.OK
>SYSCALL CPrintFYA
>SYSCALL PPrintFYA
clc
rts
*--------------------------------------
CS.END
DEVSIG.Offset .HS 0507
DEVSIG.Value .HS 4848
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
MSG.DETECT >CSTR "Apple PIC (Parallel Interface Card).\n"
MSG.DETECT.OK >CSTR "PIC Installed As Device : %S\n"
MSG.DETECT.KO >CSTR "No PIC Found.\n"
ARGS .BS 2
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.DA #S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR
DEV.HEADER.NAME >PSTR "LPT1" NAME
.HS 00.00
.HS 00.00.00.00
.DA #S.DEV.S.WRITE
.BS 6
DEV.HEADER.NAME >PSTR "LPT1"
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA OPEN
.DA GETEVENT
.DA COUT
DRV.CS.START .DA STATUS
.DA BADCALL
.DA BADCALL
.DA BADCALL
.DA CONTROL
.DA BADCALL
.DA OPEN
.DA CLOSE
.DA GETINFO
.DA IRQ
L.DEVINFO .DA DEVINFO
.DA BADCALL
.DA WRITE
L.STAT .DA STAT
.DA 0 end or relocation
*--------------------------------------
OPEN clc
rts
*--------------------------------------
GETEVENT lda #0
BADCALL lda #MLI.ERR.BADCALL
sec
rts
*--------------------------------------
COUT clc
STATUS >LDYA L.STAT
clc
rts
*--------------------------------------
CLOSE clc
CONTROL
clc
rts
*--------------------------------------
GETINFO >LDYA L.DEVINFO
IRQ clc
OPEN
clc
rts
*--------------------------------------
CLOSE
clc
rts
*--------------------------------------
WRITE
clc
rts
*--------------------------------------
DRV.CS.END
DEVSLOT0n .BS 1
DEVSLOTCn .BS 1
DEVSLOTn0 .BS 1
DEVINFO .DA #S.DEVINFO.TYPE.CHAR
*--------------------------------------
STAT .DA #S.DEVSTAT.S.WRITE
.DA #0,#0,#0
>PSTR "Parallel Card"
.DA #0,#0,#0
.DA #S.DEVSTAT.TYPE.CHAR
.DA #0
.DA $0900
*--------------------------------------
MAN
SAVE DRV/PIC.DRV.S
SAVE /A2OSX/SRC/DRV/PIC.DRV.S
ASM

View File

@ -1,6 +1,6 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
@ -10,11 +10,16 @@ AUTO 6
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
.INB /A2OSX.BUILD/INC/NET.I
.INB /A2OSX.BUILD/INC/NET.W5100.I
.INB /A2OSX.BUILD/INC/LIBTCPIP.I
*--------------------------------------
ZPTmpPTR .EQ ZPDRV
*--------------------------------------
.INB DRV/X.NET.W5100.S
RXTX.Size .EQ ZPDRV+2
Counter .EQ ZPDRV+4
Offset .EQ ZPDRV+6
RX.IP .EQ ZPDRV+8
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -40,13 +45,32 @@ Dev.Detect >STYA Args
>LDYA L.MSG.DETECT
>SYSCALL CPrintFYA
ldx #$10+$88
.1 lda #W5100.MR.RST
ldx #$70
.1 txa IO based detection, avoid scanning in Disk Controller IO!!!!
lsr
lsr
lsr
lsr
tay
lda A2osX.SLOTS,y
bne .2
lda #W5100.MR.RST
sta W5100.MR,x
lda #0
.10 dec give some time....
bne .10
lda #W5100.MR.AI+W5100.MR.IND
sta W5100.MR,x
pha
pla
lda W5100.MR,x
cmp #W5100.MR.AI+W5100.MR.IND
bne .2
@ -60,21 +84,29 @@ Dev.Detect >STYA Args
cmp #2000
beq .3
.2 inc DEV.HEADER.NAME+4
.2 dec DEV.HEADER.NAME+4
txa
clc
adc #$10
sec
sbc #$10
tax
bcc .1 #$108 ?
bne .1
>LDYA L.MSG.DETECT.KO
>SYSCALL CPrintFYA
lda #DEVMGR.ERRNOHW
lda #MLI.ERR.NODEV
sec
rts
.3 stx DEVSLOTx8
.3 stx DEVSLOTx0
txa
lsr
lsr
lsr
lsr
tay
lda #A2osX.SLOTS.NET
sta A2osX.SLOTS,y
>LDYA ARGS
>STYA ZPTmpPTR
@ -96,9 +128,7 @@ Dev.Detect >STYA Args
sta MAC+5
bra .8
.4 >SYSCALL GetMemPtrA
>STYA ZPTmpPTR
jsr DecodeMac
.4 jsr DecodeMac
bcc .8
lda #DEVMGR.ERRICL
sec
@ -110,90 +140,58 @@ Dev.Detect >STYA Args
clc
rts
*--------------------------------------
.INB DRV/X.NET.DRV.S
.INB /A2OSX.SRC/DRV/X.NET.DRV.S
*--------------------------------------
CS.END
MSG.DETECT >CSTR "UtherNet2/W5100 Driver (ARP OffLoad).\n"
MSG.DETECT.OK >CSTR "UtherNet2/W5100 Installed As Device : %S\n"
MSG.DETECT.KO >CSTR "Hardware Not Found.\n"
MSG.DETECT >CSTR "UtherNet2/W5100 Driver.\r\n"
MSG.DETECT.OK >CSTR "UtherNet2/W5100 Installed As Device : %S\r\n"
MSG.DETECT.KO >CSTR "Hardware Not Found.\r\n"
Args .BS 2
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.HS 00
.DA #S.DEV.F.SHARE+S.DEV.F.EVENT
DEV.HEADER.NAME >PSTR "ETH1" NAME
.HS 00
.HS 00.00.00.00
.DA #0
.BS 6
DEV.HEADER.NAME >PSTR "ETH7" NAME
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA OPEN
.DA GETEVENT
.DA COUT
DRV.CS.START .DA STATUS
.DA READBLOCK
.DA WRITEBLOCK
.DA BADCALL
.DA CONTROL
.DA BADCALL
.DA OPEN
.DA CLOSE
.DA GETINFO
.DA IRQ
.DA SEND
.DA SETIPCFG
L.DEVINFO .DA DEVINFO
.DA BADCALL
.DA BADCALL
L.DEVSTAT .DA DEVSTAT
.DA 0 end or relocation
*--------------------------------------
OPEN jsr Reset
lda #W5100.MR.AI+W5100.MR.IND
sta W5100.MR,x
>AR.SELECT GAR
ldy #8 GAR,SUBR
.1 stz W5100.DR,x
dey
bne .1
* >AR.SELECT SHAR
ldy #0
.2 lda MAC,y
sta W5100.DR,x
iny
cpy #6
bne .2
* >AR.SELECT SIPR
ldy #4
.3 stz W5100.DR,x
dey
bne .3
>AR.SELECT RMSR
lda #3 8k,0k,0k,0k
sta W5100.DR,x ...for Socket RX Buffers
sta W5100.DR,x ...for Socket TX Buffers
BADCALL lda #MLI.ERR.BADCALL
sec
rts
*--------------------------------------
STATUS >LDYA L.DEVSTAT
clc
rts
*--------------------------------------
GETEVENT ldx DEVSLOTx8
READBLOCK ldx DEVSLOTx0
>AR.SELECT S0.RX.RSR
lda W5100.DR,x get the received size HI
ora W5100.DR,x LO
bne GETEVENT.RxOK
bne READBLOCK.RxOK
lda #ERR.DEV.NOFRAME
COUT
IRQ
GETEVENT.Err sec
READBLOCK.Err sec
rts
GETEVENT.RxOK >AR.SELECT S0.RX.RD
READBLOCK.RxOK >AR.SELECT S0.RX.RD
lda W5100.DR,x get the received ptr HI
ldy W5100.DR,x get the received ptr LO
and /RXTX.MASK
@ -203,6 +201,7 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
sta W5100.AR+1,x
ldy #0
.10 lda W5100.DR,x
sta RX.IP,y
iny
@ -224,14 +223,11 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
>PUSHYA
>PUSHBI 0
>SYSCALL GetMem
bcs GETEVENT.Err
bcs READBLOCK.Err
>STYA ZPTmpPTR
txa
ldy #S.EVT.DATALO
sta (pEvent),y
lda #S.EVT.F.NET+S.EVT.F.hMEM1
sta (pEvent)
stx .8+1
sty .8+3
sta .8+5
lda RXTX.Size
sta (ZPTmpPTR)
@ -262,14 +258,14 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
dex
bpl .1
ldx DEVSLOTx8
ldx DEVSLOTx0
ldy #S.IP
.2 inc Counter
bne .3
inc Counter+1
beq .8
beq .4
.3 lda W5100.DR,x
sta (ZPTmpPTR),y
@ -278,7 +274,7 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
inc ZPTmpPTR+1
bne .2
.8 >AR.SELECT S0.RX.RD
.4 >AR.SELECT S0.RX.RD
ldy W5100.DR,x Get HI
lda W5100.DR,x Get LO
clc
@ -294,38 +290,16 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
sta W5100.DR,x write LO
>AR.SELECT S0.CR
lda #$40 RECV
lda #W5100.AR.S0.CR.RCVD
sta W5100.DR,x
ldy #S.IP.DST
lda (ZPTmpPTR),y
.81 iny
and (ZPTmpPTR),y
cpy #S.IP.DST+3
bne .81 if EQ, CS
inc $ff = Broadcast ??
beq .82
clc not a broadcast
.82 lda #$00
ror
ldy #S.EVT.DATAHI
sta (pEvent),y
* clc cleared by ROR
rts
*--------------------------------------
CLOSE jsr Reset
.8 ldx #$ff hMem
ldy #$ff PtrLO
lda #$ff PtrHI
clc
rts
*--------------------------------------
GETINFO >LDYA L.DEVINFO
clc
rts
*--------------------------------------
SEND >PULLW ZPTmpPTR
WRITEBLOCK >PULLW ZPTmpPTR
lda (ZPTmpPTR)
sec
@ -341,20 +315,20 @@ SEND >PULLW ZPTmpPTR
eor #$ff
sta Counter+1
ldx DEVSLOTx8
ldx DEVSLOTx0
>AR.SELECT S0.TX.FSR
lda W5100.DR,x get send size HI
ldy W5100.DR,x LO
cpy RXTX.Size
sbc RXTX.Size+1
bcs SEND.READY
bcs WRITEBLOCK.1
lda #ERR.DEV.NOBUFFER
sec
rts
SEND.READY >AR.SELECT S0.DIPR
WRITEBLOCK.1 >AR.SELECT S0.DIPR
ldy #S.IP.DST
.1 lda (ZPTmpPTR),y
@ -414,17 +388,55 @@ SEND.READY >AR.SELECT S0.DIPR
sta W5100.DR,x write LO
>AR.SELECT S0.CR
lda #$20 SEND
lda #W5100.AR.S0.CR.SEND
sta W5100.DR,x
clc
rts
*--------------------------------------
SETIPCFG >STYA ZPTmpPTR
OPEN jsr CLOSE
lda #W5100.MR.AI+W5100.MR.IND
sta W5100.MR,x
>AR.SELECT GAR
ldx DEVSLOTx8
ldy #8 GAR,SUBR
.1 stz W5100.DR,x
dey
bne .1
* >AR.SELECT SHAR
ldy #0
.2 lda MAC,y
sta W5100.DR,x
iny
cpy #6
bne .2
* >AR.SELECT SIPR
ldy #4
.3 stz W5100.DR,x
dey
bne .3
>AR.SELECT RMSR
lda #3 8k,0k,0k,0k
sta W5100.DR,x ...for Socket RX Buffers
sta W5100.DR,x ...for Socket TX Buffers
bra CONTROL.OPEN
*--------------------------------------
CONTROL >STYA ZPTmpPTR
ldx DEVSLOTx0
>AR.SELECT S0.CR
lda #$10 CLOSE
lda #W5100.AR.S0.CR.CLOSE
sta W5100.DR,x
.10 >AR.SELECT S0.SR
@ -461,18 +473,18 @@ SETIPCFG >STYA ZPTmpPTR
cpy #S.IPCFG.IP+4
bne .3
>AR.SELECT S0.MR
CONTROL.OPEN >AR.SELECT S0.MR
lda #W5100.AR.S0.MR.IPRAW+W5100.AR.S0.MR.MF
sta W5100.DR,x
* >AR.SELECT S0.CR Implicit, next to S0.MR
lda #1 OPEN
>AR.SELECT S0.CR
lda #W5100.AR.S0.CR.OPEN
sta W5100.DR,x
clc
rts
*--------------------------------------
Reset ldx DEVSLOTx8
CLOSE ldx DEVSLOTx0
lda #W5100.MR.RST
sta W5100.MR,x
@ -487,16 +499,19 @@ Reset ldx DEVSLOTx8
rts
*--------------------------------------
DRV.CS.END
DEVSLOTx8 .BS 1
RX.IP .BS 4
RXTX.Size .BS 2
Counter .BS 2
Offset .BS 2
DEVSLOTx0 .BS 1
*--------------------------------------
DEVINFO .DA #S.DEVINFO.TYPE.NET
DEVFLAGS .DA #S.DEVINFO.NET.FLAGS.ARPOFFLOAD+S.DEVINFO.NET.FLAGS.IPOFFLOAD
DEVSTAT .DA #0
.BS 3 size
>PSTR "UtherNetII/W5100"
.DA #S.DEVSTAT.TYPE.NET
.BS 1 Subtype
.BS 2 Version
*--------------------------------------
FLAGS .DA #S.DEVSTAT.NET.FLAGS.ARPOFFLOAD+S.DEVSTAT.NET.FLAGS.IPOFFLOAD
LINK.STATUS .DA #S.DEVSTAT.NET.STATUS.OK+S.DEVSTAT.NET.STATUS.FD+S.DEVSTAT.NET.STATUS.100
MAC .BS 6
LINK.STATUS .DA #S.DEVINFO.NET.STATUS.OK+S.DEVINFO.NET.STATUS.FD+S.DEVINFO.NET.STATUS.100
*--------------------------------------
MAN
SAVE DRV/UTHER2.AI.DRV.S
SAVE /A2OSX.SRC/DRV/UTHER2.AI.DRV.S
ASM

View File

@ -93,7 +93,7 @@ Dev.Detect >STYA Args
>LDYA L.MSG.DETECT.KO
>SYSCALL CPrintFYA
lda #$28 MLI.ERR.NODEV
lda #MLI.ERR.NODEV
sec
rts
@ -354,7 +354,7 @@ WRITEBLOCK.1 ldy #S.ETH.SRCMAC+5
sta W5100.DR,x write LO
>AR.SELECT S0.CR
lda #$20 SEND
lda #W5100.AR.S0.CR.SEND
sta W5100.DR,x
clc

Binary file not shown.

Binary file not shown.

Binary file not shown.