diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-11-05 18:52:50 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-11-05 18:52:50 +0000 |
commit | c0a7fbea1f61b1d77a09d612b85c74fd6c673b7c (patch) | |
tree | 6d9d9114adb151de5077387b71d22228693905b0 | |
parent | 901a176a030ca15db5cf2a1ec71f7d8ec8e97d64 (diff) |
bcm, bcm64: handle disk activity led from sdmmc
We don't want to blink the disk activity led for wifi,
so handle the disk activity LED from sdmmc when it
is actually used as a disk.
-rw-r--r-- | sys/src/9/bcm/emmc.c | 13 | ||||
-rw-r--r-- | sys/src/9/bcm64/sdhc.c | 14 | ||||
-rw-r--r-- | sys/src/9/bcm64/sdhost.c | 7 | ||||
-rw-r--r-- | sys/src/9/port/sd.h | 1 | ||||
-rw-r--r-- | sys/src/9/port/sdmmc.c | 7 |
5 files changed, 27 insertions, 15 deletions
diff --git a/sys/src/9/bcm/emmc.c b/sys/src/9/bcm/emmc.c index 15b6dc59a..2545df255 100644 --- a/sys/src/9/bcm/emmc.c +++ b/sys/src/9/bcm/emmc.c @@ -409,11 +409,6 @@ emmcio(SDio*, int write, uchar *buf, int len) int i; assert((len&3) == 0); - okay(1); - if(waserror()){ - okay(0); - nexterror(); - } if(write) dmastart(DmaChanEmmc, DmaDevEmmc, DmaM2D, buf, &r[Data], len); @@ -439,8 +434,6 @@ emmcio(SDio*, int write, uchar *buf, int len) } if(i) WR(Interrupt, i); - poperror(); - okay(0); } static void @@ -457,6 +450,11 @@ emmcinterrupt(Ureg*, void*) WR(Irpten, r[Irpten] & ~i); } +static void +emmcled(SDio*, int on) +{ + okay(on); +} static SDio sdio = { "emmc", @@ -467,6 +465,7 @@ static SDio sdio = { emmciosetup, emmcio, emmcbus, + emmcled, emmccardintr, }; diff --git a/sys/src/9/bcm64/sdhc.c b/sys/src/9/bcm64/sdhc.c index 046b9ed93..79b6c8cc6 100644 --- a/sys/src/9/bcm64/sdhc.c +++ b/sys/src/9/bcm64/sdhc.c @@ -452,7 +452,6 @@ sdhciosetup(SDio*, int write, void *buf, int bsize, int bcount) else cachedwbinvse(buf, len); WR(Dmadesc, sdhc.busdram + (PADDR(sdhc.dma) - PHYSDRAM)); - okay(1); } static void @@ -461,10 +460,6 @@ sdhcio(SDio*, int write, uchar *buf, int len) u32int *r = (u32int*)SDHCREGS; int i; - if(waserror()){ - okay(0); - nexterror(); - } WR(Irpten, r[Irpten] | Datadone|Err); tsleep(&sdhc.r, datadone, 0, 3000); WR(Irpten, r[Irpten] & ~(Datadone|Err)); @@ -478,8 +473,6 @@ sdhcio(SDio*, int write, uchar *buf, int len) WR(Interrupt, i); if(!write) cachedinvse(buf, len); - poperror(); - okay(0); } static void @@ -494,6 +487,12 @@ sdhcinterrupt(Ureg*, void*) WR(Irpten, r[Irpten] & ~i); } +static void +sdhcled(SDio*, int on) +{ + okay(on); +} + void sdhclink(void) { @@ -506,6 +505,7 @@ sdhclink(void) sdhciosetup, sdhcio, sdhcbus, + sdhcled, }; addmmcio(&io); } diff --git a/sys/src/9/bcm64/sdhost.c b/sys/src/9/bcm64/sdhost.c index b50c0cd0e..5ed45abf7 100644 --- a/sys/src/9/bcm64/sdhost.c +++ b/sys/src/9/bcm64/sdhost.c @@ -240,6 +240,12 @@ sdhostio(SDio*, int write, uchar *buf, int len) sdhosterror(i); } +static void +sdhostled(SDio*, int on) +{ + okay(on); +} + void sdhostlink(void) { @@ -252,6 +258,7 @@ sdhostlink(void) sdhostiosetup, sdhostio, sdhostbus, + sdhostled, }; addmmcio(&io); } diff --git a/sys/src/9/port/sd.h b/sys/src/9/port/sd.h index 2e3adfc7c..80f0ccabe 100644 --- a/sys/src/9/port/sd.h +++ b/sys/src/9/port/sd.h @@ -197,6 +197,7 @@ struct SDio { void (*iosetup)(SDio*, int, void*, int, int); void (*io)(SDio*, int, uchar*, int); void (*bus)(SDio*, int, int); + void (*led)(SDio*, int); int (*cardintr)(SDio*, int); char nomultiwrite; /* quirk for usdhc */ void *aux; diff --git a/sys/src/9/port/sdmmc.c b/sys/src/9/port/sdmmc.c index 7e32da8b2..02a977128 100644 --- a/sys/src/9/port/sdmmc.c +++ b/sys/src/9/port/sdmmc.c @@ -675,9 +675,13 @@ mmcbio(SDunit *unit, int lun, int write, void *data, long nb, uvlong bno) eqlock(card); if(waserror()){ + if(io->led != nil) + (*io->led)(io, 0); qunlock(card); nexterror(); } + if(io->led != nil) + (*io->led)(io, 1); if(card->ismmc && unit->subno != (card->ext_csd[179]&7)){ b = (card->ext_csd[179] & ~7) | unit->subno; @@ -714,7 +718,8 @@ mmcbio(SDunit *unit, int lun, int write, void *data, long nb, uvlong bno) buf += len; } } - + if(io->led != nil) + (*io->led)(io, 0); qunlock(card); poperror(); |