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:
Stefan Weil 2009-10-19 21:03:26 +02:00 committed by Anthony Liguori
parent f669df275c
commit 5fa9a0ae49

View File

@ -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: