- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
/*
* mfi_tbolt_adp_reset - For controller reset
* @regs: MFI register set
*/
int
mfi_tbolt_adp_reset(struct mfi_softc *sc)
{
int retry = 0, i = 0;
int HostDiag;
MFI_WRITE4(sc, MFI_WSR, 0xF);
MFI_WRITE4(sc, MFI_WSR, 4);
MFI_WRITE4(sc, MFI_WSR, 0xB);
MFI_WRITE4(sc, MFI_WSR, 2);
MFI_WRITE4(sc, MFI_WSR, 7);
MFI_WRITE4(sc, MFI_WSR, 0xD);
for (i = 0; i < 10000; i++) ;
HostDiag = (uint32_t)MFI_READ4(sc, MFI_HDR);
while (!( HostDiag & DIAG_WRITE_ENABLE)) {
for (i = 0; i < 1000; i++);
HostDiag = (uint32_t)MFI_READ4(sc, MFI_HDR);
device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: retry time=%x, "
"hostdiag=%x\n", retry, HostDiag);
if (retry++ >= 100)
return 1;
}
device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: HostDiag=%x\n", HostDiag);
MFI_WRITE4(sc, MFI_HDR, (HostDiag | DIAG_RESET_ADAPTER));
for (i=0; i < 10; i++) {
for (i = 0; i < 10000; i++); // <--- двойной говнокод.
}
HostDiag = (uint32_t)MFI_READ4(sc, MFI_RSR);
while (HostDiag & DIAG_RESET_ADAPTER) {
for (i = 0; i < 1000; i++) ;
HostDiag = (uint32_t)MFI_READ4(sc, MFI_RSR);
device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: retry time=%x, "
"hostdiag=%x\n", retry, HostDiag);
if (retry++ >= 1000)
return 1;
}
return 0;
}
kerman 19.02.2016 18:34 # 0
j123123 19.02.2016 18:55 # 0
j123123 19.02.2016 18:59 # 0
j123123 19.02.2016 19:03 # 0
bormand 19.02.2016 19:42 # 0
Да даже если компилятор не выкинет - один фиг непредсказуемая хуета, т.к. частота процессора неизвестна, а число итераций об таймер не откалибровано.
Antervis 20.02.2016 09:16 # 0
j123123 20.02.2016 09:21 # 0
Antervis 20.02.2016 09:32 # 0
j123123 20.02.2016 09:52 # 0
Antervis 20.02.2016 10:17 # 0
bormand 20.02.2016 20:47 # 0
Antervis 20.02.2016 20:50 # 0
bormand 20.02.2016 20:58 # 0