本文整理汇总了C++中HW_TRACE函数的典型用法代码示例。如果您正苦于以下问题:C++ HW_TRACE函数的具体用法?C++ HW_TRACE怎么用?C++ HW_TRACE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了HW_TRACE函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: read_iagr
static unsigned8
read_iagr (struct hw *me,
struct mn103int *controller,
unsigned_word offset)
{
unsigned8 val;
switch (offset)
{
case 0:
{
if (!(controller->group[controller->interrupt_accepted_group].request
& controller->group[controller->interrupt_accepted_group].enable))
{
/* oops, lost the request */
val = 0;
HW_TRACE ((me, "read-iagr:0 lost-0"));
}
else
{
val = (controller->interrupt_accepted_group << 2);
HW_TRACE ((me, "read-iagr:0 %d", (int) val));
}
break;
}
case 1:
val = 0;
HW_TRACE ((me, "read-iagr:1 %d", (int) val));
break;
default:
val = 0;
HW_TRACE ((me, "read-iagr 0x%08lx bad offset", (long) offset));
break;
}
return val;
}
示例2: cfi_io_read_buffer
/* All reads to the flash address space come here. Using the state
machine, we figure out what to return -- actual data stored in the
flash, the CFI query structure, some status info, or something else ?
Any requests that we can't handle are passed to the command set-
specific read function. */
static unsigned
cfi_io_read_buffer (struct hw *me, void *dest, int space,
address_word addr, unsigned nr_bytes)
{
struct cfi *cfi = hw_data (me);
unsigned char *sdest = dest;
unsigned offset, shifted_offset;
offset = addr & (cfi->dev_size - 1);
shifted_offset = cfi_unshift_addr (cfi, offset);
/* XXX: Is this OK to enforce ? */
#if 0
if (cfi->state != CFI_STATE_READ && cfi->width != nr_bytes)
{
HW_TRACE ((me, "read 0x%08lx length %u does not match flash width %u",
(unsigned long) addr, nr_bytes, cfi->width));
return nr_bytes;
}
#endif
HW_TRACE ((me, "%s read 0x%08lx length %u",
state_names[cfi->state], (unsigned long) addr, nr_bytes));
switch (cfi->state)
{
case CFI_STATE_READ:
memcpy (dest, cfi->data + offset, nr_bytes);
break;
case CFI_STATE_CFI_QUERY:
if (shifted_offset >= CFI_ADDR_CFI_QUERY_RESULT &&
shifted_offset < CFI_ADDR_CFI_QUERY_RESULT + sizeof (cfi->query) +
(cfi->query.num_erase_regions * 4))
{
unsigned char *qry;
shifted_offset -= CFI_ADDR_CFI_QUERY_RESULT;
if (shifted_offset >= sizeof (cfi->query))
{
qry = cfi->erase_region_info;
shifted_offset -= sizeof (cfi->query);
}
else
qry = (void *) &cfi->query;
sdest[0] = qry[shifted_offset];
memset (sdest + 1, 0, nr_bytes - 1);
break;
}
default:
if (!cfi->cmdset->read (me, cfi, dest, offset, shifted_offset, nr_bytes))
HW_TRACE ((me, "unhandled state %s", state_names[cfi->state]));
break;
}
return nr_bytes;
}
示例3: bfin_gpio_port_event
static void
bfin_gpio_port_event (struct hw *me, int my_port, struct hw *source,
int source_port, int level)
{
struct bfin_gpio *port = hw_data (me);
bu32 bit = (1 << my_port);
/* Normalize the level value. A simulated device can send any value
it likes to us, but in reality we only care about 0 and 1. This
lets us assume only those two values below. */
level = !!level;
HW_TRACE ((me, "pin %i set to %i", my_port, level));
/* Only screw with state if this pin is set as an input, and the
input is actually enabled, and it isn't in peripheral mode. */
if ((port->dir & bit) || !(port->inen & bit) || !(port->fer & bit))
{
HW_TRACE ((me, "ignoring level due to DIR=%i INEN=%i FER=%i",
!!(port->dir & bit), !!(port->inen & bit),
!!(port->fer & bit)));
return;
}
hw_port_event (me, my_port, level);
}
示例4: hw_pal_io_write_buffer
static unsigned
hw_pal_io_write_buffer (struct hw *me,
const void *source,
int space,
unsigned_word addr,
unsigned nr_bytes)
{
hw_pal_device *hw_pal = (hw_pal_device*) hw_data (me);
unsigned_1 *byte = (unsigned_1 *) source;
switch (addr & hw_pal_address_mask)
{
case hw_pal_reset_register:
hw_halt (me, sim_exited, byte[0]);
break;
case hw_pal_int_register:
hw_port_event (me,
INT_PORT + byte[0], /*port*/
(nr_bytes > 1 ? byte[1] : 0)); /* val */
break;
case hw_pal_read_fifo:
hw_pal->input.buffer = byte[0];
HW_TRACE ((me, "write - input-fifo %d\n", byte[0]));
break;
case hw_pal_read_status:
hw_pal->input.status = byte[0];
HW_TRACE ((me, "write - input-status %d\n", byte[0]));
break;
case hw_pal_write_fifo:
write_hw_pal (me, byte[0]);
HW_TRACE ((me, "write - output-fifo %d\n", byte[0]));
break;
case hw_pal_write_status:
hw_pal->output.status = byte[0];
HW_TRACE ((me, "write - output-status %d\n", byte[0]));
break;
case hw_pal_countdown:
do_counter_write (me, hw_pal, "countdown",
&hw_pal->countdown, source, nr_bytes);
break;
case hw_pal_timer:
do_counter_write (me, hw_pal, "timer",
&hw_pal->timer, source, nr_bytes);
break;
}
return nr_bytes;
}
示例5: read_icr
static unsigned8
read_icr (struct hw *me,
struct mn103int *controller,
unsigned_word base)
{
unsigned_word offset;
struct mn103int_group *group = decode_group (me, controller, base, &offset);
unsigned8 val = 0;
switch (group->type)
{
case NMI_GROUP:
switch (offset)
{
case 0:
val = INSERT_ID (group->request);
HW_TRACE ((me, "read-icr group=%d:0 nmi 0x%02x",
group->gid, val));
break;
default:
break;
}
break;
case LEVEL_GROUP:
switch (offset)
{
case 0:
val = (INSERT_IR (group->request)
| INSERT_ID (group->request & group->enable));
HW_TRACE ((me, "read-icr group=%d:0 level 0x%02x",
group->gid, val));
break;
case 1:
val = (INSERT_LV (group->level)
| INSERT_IE (group->enable));
HW_TRACE ((me, "read-icr level-%d:1 level 0x%02x",
group->gid, val));
break;
}
break;
default:
break;
}
return val;
}
示例6: tx3904sio_port_event
static void
tx3904sio_port_event (struct hw *me,
int my_port,
struct hw *source,
int source_port,
int level)
{
struct tx3904sio *controller = hw_data (me);
switch (my_port)
{
case RESET_PORT:
{
HW_TRACE ((me, "reset"));
tx3904sio_fifo_reset(me, & controller->rx_fifo);
tx3904sio_fifo_reset(me, & controller->tx_fifo);
controller->slsr = controller->sdicr
= controller->sdisr = controller->sfcr
= controller->sbgr = 0;
controller->slcr = 0x40000000; /* set TWUB */
controller->sbgr = 0x03ff0000; /* set BCLK=3, BRD=FF */
/* Don't interfere with I/O poller. */
break;
}
default:
hw_abort (me, "Event on unknown port %d", my_port);
break;
}
}
示例7: bfin_mmr_invalid
static void
bfin_mmr_invalid (struct hw *me, SIM_CPU *cpu, address_word addr,
unsigned nr_bytes, bool write)
{
if (!cpu)
cpu = hw_system_cpu (me);
/* Only throw a fit if the cpu is doing the access. DMA/GDB simply
go unnoticed. Not exactly hardware behavior, but close enough. */
if (!cpu)
{
sim_io_eprintf (hw_system (me), "%s: invalid MMR access @ %#x\n",
hw_path (me), addr);
return;
}
HW_TRACE ((me, "invalid MMR %s to 0x%08lx length %u",
write ? "write" : "read", (unsigned long) addr, nr_bytes));
/* XXX: is this what hardware does ? */
if (addr >= BFIN_CORE_MMR_BASE)
/* XXX: This should be setting up CPLB fault addrs ? */
mmu_process_fault (cpu, addr, write, false, false, true);
else
/* XXX: Newer parts set up an interrupt from EBIU and program
EBIU_ERRADDR with the address. */
cec_hwerr (cpu, HWERR_SYSTEM_MMR);
}
示例8: bfin_mmr_invalid
static void
bfin_mmr_invalid (struct hw *me, address_word addr,
unsigned nr_bytes, bool write, bool missing)
{
SIM_CPU *cpu = hw_system_cpu (me);
const char *rw = write ? "write" : "read";
const char *reason =
missing ? "no such register" :
(addr & 3) ? "must be 32-bit aligned" : "invalid length";
/* Only throw a fit if the cpu is doing the access. DMA/GDB simply
go unnoticed. Not exactly hardware behavior, but close enough. */
if (!cpu)
{
sim_io_eprintf (hw_system (me),
"%s: invalid MMR %s at %#x length %u: %s\n",
hw_path (me), rw, addr, nr_bytes, reason);
return;
}
HW_TRACE ((me, "invalid MMR %s at %#x length %u: %s",
rw, addr, nr_bytes, reason));
/* XXX: is this what hardware does ? What about priority of unaligned vs
wrong length vs missing register ? What about system-vs-core ? */
/* XXX: We should move this addr check to a model property so we get the
same behavior regardless of where we map the model. */
if (addr >= BFIN_CORE_MMR_BASE)
/* XXX: This should be setting up CPLB fault addrs ? */
mmu_process_fault (cpu, addr, write, false, false, true);
else
/* XXX: Newer parts set up an interrupt from EBIU and program
EBIU_ERRADDR with the address. */
cec_hwerr (cpu, HWERR_SYSTEM_MMR);
}
示例9: push_interrupt_level
static void
push_interrupt_level (struct hw *me,
struct mn103int *controller)
{
int selected = find_highest_interrupt_group (me, controller);
int level = controller->group[selected].level;
HW_TRACE ((me, "port-out - selected=%d level=%d", selected, level));
hw_port_event (me, LEVEL_PORT, level);
}
示例10: mn103iop_io_write_buffer
static unsigned
mn103iop_io_write_buffer (struct hw *me,
const void *source,
int space,
unsigned_word base,
unsigned nr_bytes)
{
struct mn103iop *io_port = hw_data (me);
enum io_port_register_types io_port_reg;
HW_TRACE ((me, "write 0x%08lx %d", (long) base, (int) nr_bytes));
io_port_reg = decode_addr (me, io_port, base);
switch (io_port_reg)
{
/* Port output registers */
case P0OUT:
case P1OUT:
case P2OUT:
case P3OUT:
write_output_reg(me, io_port, io_port_reg-P0OUT, source, nr_bytes);
break;
/* Port output mode registers */
case P0MD:
case P1MD:
case P2MD:
case P3MD:
write_output_mode_reg(me, io_port, io_port_reg-P0MD, source, nr_bytes);
break;
/* Port control registers */
case P0DIR:
case P1DIR:
case P2DIR:
case P3DIR:
write_control_reg(me, io_port, io_port_reg-P0DIR, source, nr_bytes);
break;
/* Port pin registers */
case P0IN:
case P1IN:
case P2IN:
hw_abort(me, "Cannot write to pin register.");
break;
case P2SS:
case P4SS:
write_dedicated_control_reg(me, io_port, io_port_reg, source, nr_bytes);
break;
default:
hw_abort(me, "invalid address");
}
return nr_bytes;
}
示例11: do_counter_event
static void
do_counter_event (struct hw *me,
void *data)
{
hw_pal_counter *counter = (hw_pal_counter *) data;
if (counter->periodic_p)
{
HW_TRACE ((me, "timer expired"));
counter->start = hw_event_queue_time (me);
hw_port_event (me, TIMER_PORT, 1);
hw_event_queue_schedule (me, counter->delta, do_counter_event, counter);
}
else
{
HW_TRACE ((me, "countdown expired"));
counter->delta = 0;
hw_port_event (me, COUNTDOWN_PORT, 1);
}
}
示例12: m68hc11eepr_io_read_buffer
static unsigned
m68hc11eepr_io_read_buffer (struct hw *me,
void *dest,
int space,
unsigned_word base,
unsigned nr_bytes)
{
SIM_DESC sd;
struct m68hc11eepr *controller;
sim_cpu *cpu;
HW_TRACE ((me, "read 0x%08lx %d", (long) base, (int) nr_bytes));
sd = hw_system (me);
controller = hw_data (me);
cpu = STATE_CPU (sd, 0);
if (space == io_map)
{
unsigned cnt = 0;
while (nr_bytes != 0)
{
switch (base)
{
case M6811_PPROG:
case M6811_CONFIG:
*((uint8*) dest) = cpu->ios[base];
break;
default:
hw_abort (me, "reading wrong register 0x%04x", base);
}
dest = (uint8*) (dest) + 1;
base++;
nr_bytes--;
cnt++;
}
return cnt;
}
/* In theory, we can't read the EEPROM when it's being programmed. */
if ((cpu->ios[M6811_PPROG] & M6811_EELAT) != 0
&& cpu_is_running (cpu))
{
sim_memory_error (cpu, SIM_SIGBUS, base,
"EEprom not configured for reading");
}
base = base - controller->base_address;
memcpy (dest, &controller->eeprom[base], nr_bytes);
return nr_bytes;
}
示例13: mn103cpu_port_event
static void
mn103cpu_port_event (struct hw *me,
int my_port,
struct hw *source,
int source_port,
int level)
{
struct mn103cpu *controller = hw_data (me);
/* Schedule our event handler *now* */
if (controller->pending_handler == NULL)
controller->pending_handler =
hw_event_queue_schedule (me, 0, deliver_mn103cpu_interrupt, NULL);
switch (my_port)
{
case RESET_PORT:
controller->pending_reset = 1;
HW_TRACE ((me, "port-in reset"));
break;
case NMI_PORT:
controller->pending_nmi = 1;
HW_TRACE ((me, "port-in nmi"));
break;
case LEVEL_PORT:
controller->pending_level = level;
HW_TRACE ((me, "port-in level=%d", level));
break;
default:
hw_abort (me, "bad switch");
break;
}
}
示例14: tx3904sio_io_read_buffer
static unsigned
tx3904sio_io_read_buffer (struct hw *me,
void *dest,
int space,
unsigned_word base,
unsigned nr_bytes)
{
struct tx3904sio *controller = hw_data (me);
unsigned byte;
HW_TRACE ((me, "read 0x%08lx %d", (long) base, (int) nr_bytes));
/* tickle fifos */
tx3904sio_tickle(me);
for (byte = 0; byte < nr_bytes; byte++)
{
address_word address = base + byte;
int reg_number = (address - controller->base_address) / 4;
int reg_offset = (address - controller->base_address) % 4;
unsigned_4 register_value; /* in target byte order */
/* fill in entire register_value word */
switch (reg_number)
{
case SLCR_REG: register_value = controller->slcr; break;
case SLSR_REG: register_value = controller->slsr; break;
case SDICR_REG: register_value = controller->sdicr; break;
case SDISR_REG: register_value = controller->sdisr; break;
case SFCR_REG: register_value = controller->sfcr; break;
case SBGR_REG: register_value = controller->sbgr; break;
case TFIFO_REG: register_value = 0; break;
case SFIFO_REG:
/* consume rx fifo for MS byte */
if(reg_offset == 0 && tx3904sio_fifo_nonempty(me, & controller->rx_fifo))
register_value = (tx3904sio_fifo_pop(me, & controller->rx_fifo) << 24);
else
register_value = 0;
break;
default: register_value = 0;
}
/* write requested byte out */
register_value = H2T_4(register_value);
/* HW_TRACE ((me, "byte %d %02x", reg_offset, ((char*)& register_value)[reg_offset])); */
memcpy ((char*) dest + byte, ((char*)& register_value)+reg_offset, 1);
}
return nr_bytes;
}
示例15: do_counter_read
static void
do_counter_read (struct hw *me,
hw_pal_device *pal,
const char *reg,
hw_pal_counter *counter,
unsigned32 *word,
unsigned nr_bytes)
{
unsigned32 val;
if (nr_bytes != 4)
hw_abort (me, "%s - bad read size must be 4 bytes", reg);
val = counter->delta;
HW_TRACE ((me, "read - %s %ld", reg, (long) val));
*word = H2BE_4 (val);
}