eepro100: Restructure code
This patch only moves about 150 lines of code from function eepro100_cu_command to a new function action_command. A goto statement was replaced by a for loop. There are no functional changes. Nor did I change comments starting with // (they will be removed by future patches). Signed-off-by: Stefan Weil <weil@mail.berlios.de> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
f669df275c
commit
5fa9a0ae49
@ -626,26 +626,11 @@ static void dump_statistics(EEPRO100State * s)
|
|||||||
//~ missing("CU dump statistical counters");
|
//~ missing("CU dump statistical counters");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void eepro100_cu_command(EEPRO100State * s, uint8_t val)
|
static void action_command(EEPRO100State *s)
|
||||||
{
|
{
|
||||||
|
for (;;) {
|
||||||
|
uint32_t cb_address = s->cu_base + s->cu_offset;
|
||||||
eepro100_tx_t tx;
|
eepro100_tx_t tx;
|
||||||
uint32_t cb_address;
|
|
||||||
switch (val) {
|
|
||||||
case CU_NOP:
|
|
||||||
/* No operation. */
|
|
||||||
break;
|
|
||||||
case CU_START:
|
|
||||||
if (get_cu_state(s) != cu_idle) {
|
|
||||||
/* Intel documentation says that CU must be idle for the CU
|
|
||||||
* start command. Intel driver for Linux also starts the CU
|
|
||||||
* from suspended state. */
|
|
||||||
logout("CU state is %u, should be %u\n", get_cu_state(s), cu_idle);
|
|
||||||
//~ assert(!"wrong CU state");
|
|
||||||
}
|
|
||||||
set_cu_state(s, cu_active);
|
|
||||||
s->cu_offset = s->pointer;
|
|
||||||
next_command:
|
|
||||||
cb_address = s->cu_base + s->cu_offset;
|
|
||||||
cpu_physical_memory_read(cb_address, (uint8_t *) & tx, sizeof(tx));
|
cpu_physical_memory_read(cb_address, (uint8_t *) & tx, sizeof(tx));
|
||||||
uint16_t status = le16_to_cpu(tx.status);
|
uint16_t status = le16_to_cpu(tx.status);
|
||||||
uint16_t command = le16_to_cpu(tx.command);
|
uint16_t command = le16_to_cpu(tx.command);
|
||||||
@ -787,17 +772,38 @@ static void eepro100_cu_command(EEPRO100State * s, uint8_t val)
|
|||||||
/* CU becomes idle. Terminate command loop. */
|
/* CU becomes idle. Terminate command loop. */
|
||||||
set_cu_state(s, cu_idle);
|
set_cu_state(s, cu_idle);
|
||||||
eepro100_cna_interrupt(s);
|
eepro100_cna_interrupt(s);
|
||||||
|
break;
|
||||||
} else if (bit_s) {
|
} else if (bit_s) {
|
||||||
/* CU becomes suspended. */
|
/* CU becomes suspended. Terminate command loop. */
|
||||||
set_cu_state(s, cu_suspended);
|
set_cu_state(s, cu_suspended);
|
||||||
eepro100_cna_interrupt(s);
|
eepro100_cna_interrupt(s);
|
||||||
|
break;
|
||||||
} else {
|
} else {
|
||||||
/* More entries in list. */
|
/* More entries in list. */
|
||||||
TRACE(OTHER, logout("CU list with at least one more entry\n"));
|
TRACE(OTHER, logout("CU list with at least one more entry\n"));
|
||||||
goto next_command;
|
}
|
||||||
}
|
}
|
||||||
TRACE(OTHER, logout("CU list empty\n"));
|
TRACE(OTHER, logout("CU list empty\n"));
|
||||||
/* List is empty. Now CU is idle or suspended. */
|
/* List is empty. Now CU is idle or suspended. */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void eepro100_cu_command(EEPRO100State * s, uint8_t val)
|
||||||
|
{
|
||||||
|
switch (val) {
|
||||||
|
case CU_NOP:
|
||||||
|
/* No operation. */
|
||||||
|
break;
|
||||||
|
case CU_START:
|
||||||
|
if (get_cu_state(s) != cu_idle) {
|
||||||
|
/* Intel documentation says that CU must be idle for the CU
|
||||||
|
* start command. Intel driver for Linux also starts the CU
|
||||||
|
* from suspended state. */
|
||||||
|
logout("CU state is %u, should be %u\n", get_cu_state(s), cu_idle);
|
||||||
|
//~ assert(!"wrong CU state");
|
||||||
|
}
|
||||||
|
set_cu_state(s, cu_active);
|
||||||
|
s->cu_offset = s->pointer;
|
||||||
|
action_command(s);
|
||||||
break;
|
break;
|
||||||
case CU_RESUME:
|
case CU_RESUME:
|
||||||
if (get_cu_state(s) != cu_suspended) {
|
if (get_cu_state(s) != cu_suspended) {
|
||||||
@ -810,7 +816,7 @@ static void eepro100_cu_command(EEPRO100State * s, uint8_t val)
|
|||||||
if (get_cu_state(s) == cu_suspended) {
|
if (get_cu_state(s) == cu_suspended) {
|
||||||
TRACE(OTHER, logout("CU resuming\n"));
|
TRACE(OTHER, logout("CU resuming\n"));
|
||||||
set_cu_state(s, cu_active);
|
set_cu_state(s, cu_active);
|
||||||
goto next_command;
|
action_command(s);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CU_STATSADDR:
|
case CU_STATSADDR:
|
||||||
|
Loading…
Reference in New Issue
Block a user