Fixup another level of compiler warnings, add _U() definition
This commit is contained in:
@ -24,7 +24,7 @@ static inline void *add_thumb_bit(void *addr) {
|
||||
}
|
||||
|
||||
static inline void *remove_thumb_bit(void *addr) {
|
||||
return (void *) (((uintptr_t) addr) & ~0x1);
|
||||
return (void *) (((uintptr_t) addr) & (uint)~0x1);
|
||||
}
|
||||
|
||||
static void set_raw_irq_handler_and_unlock(uint num, irq_handler_t handler, uint32_t save) {
|
||||
@ -139,7 +139,7 @@ static uint16_t make_branch(uint16_t *from, void *to) {
|
||||
uint32_t ui_to = (uint32_t)to;
|
||||
uint32_t delta = (ui_to - ui_from - 4) / 2;
|
||||
assert(!(delta >> 11u));
|
||||
return 0xe000 | (delta & 0x7ff);
|
||||
return (uint16_t)(0xe000 | (delta & 0x7ff));
|
||||
}
|
||||
|
||||
static void insert_branch_and_link(uint16_t *from, void *to) {
|
||||
@ -147,8 +147,8 @@ static void insert_branch_and_link(uint16_t *from, void *to) {
|
||||
uint32_t ui_to = (uint32_t)to;
|
||||
uint32_t delta = (ui_to - ui_from - 4) / 2;
|
||||
assert(!(delta >> 11u));
|
||||
from[0] = 0xf000 | ((delta >> 11u) & 0x7ffu);
|
||||
from[1] = 0xf800 | (delta & 0x7ffu);
|
||||
from[0] = (uint16_t)(0xf000 | ((delta >> 11u) & 0x7ffu));
|
||||
from[1] = (uint16_t)(0xf800 | (delta & 0x7ffu));
|
||||
}
|
||||
|
||||
static inline void *resolve_branch(uint16_t *inst) {
|
||||
@ -174,7 +174,11 @@ static inline int8_t slot_diff(struct irq_handler_chain_slot *to, struct irq_han
|
||||
: "l" (from)
|
||||
:
|
||||
);
|
||||
return result;
|
||||
return (int8_t)result;
|
||||
}
|
||||
|
||||
static inline int8_t get_slot_index(struct irq_handler_chain_slot *slot) {
|
||||
return slot_diff(slot, irq_handler_chain_slots);
|
||||
}
|
||||
|
||||
void irq_add_shared_handler(uint num, irq_handler_t handler, uint8_t order_priority) {
|
||||
@ -189,7 +193,7 @@ void irq_add_shared_handler(uint num, irq_handler_t handler, uint8_t order_prior
|
||||
uint32_t save = spin_lock_blocking(lock);
|
||||
hard_assert(irq_hander_chain_free_slot_head >= 0);
|
||||
struct irq_handler_chain_slot *slot = &irq_handler_chain_slots[irq_hander_chain_free_slot_head];
|
||||
int slot_index = irq_hander_chain_free_slot_head;
|
||||
int8_t slot_index = irq_hander_chain_free_slot_head;
|
||||
irq_hander_chain_free_slot_head = slot->link;
|
||||
irq_handler_t vtable_handler = get_vtable()[16 + num];
|
||||
if (!is_shared_irq_raw_handler(vtable_handler)) {
|
||||
@ -237,7 +241,7 @@ void irq_add_shared_handler(uint num, irq_handler_t handler, uint8_t order_prior
|
||||
.inst1 = 0xa100, // add r1, pc, #0
|
||||
.inst2 = make_branch(&slot->inst2, irq_handler_chain_first_slot), // b irq_handler_chain_first_slot
|
||||
.inst3 = make_branch(&slot->inst3, existing_vtable_slot), // b existing_slot
|
||||
.link = slot_diff(existing_vtable_slot, irq_handler_chain_slots),
|
||||
.link = get_slot_index(existing_vtable_slot),
|
||||
.priority = order_priority,
|
||||
.handler = handler
|
||||
};
|
||||
@ -286,14 +290,14 @@ void irq_remove_handler(uint num, irq_handler_t handler) {
|
||||
struct irq_handler_chain_slot *prev_slot = NULL;
|
||||
struct irq_handler_chain_slot *existing_vtable_slot = remove_thumb_bit(vtable_handler);
|
||||
struct irq_handler_chain_slot *to_free_slot = existing_vtable_slot;
|
||||
int to_free_slot_index = to_free_slot - irq_handler_chain_slots;
|
||||
int8_t to_free_slot_index = get_slot_index(to_free_slot);
|
||||
while (to_free_slot->handler != handler) {
|
||||
prev_slot = to_free_slot;
|
||||
if (to_free_slot->link < 0) break;
|
||||
to_free_slot = &irq_handler_chain_slots[to_free_slot->link];
|
||||
}
|
||||
if (to_free_slot->handler == handler) {
|
||||
int next_slot_index = to_free_slot->link;
|
||||
int8_t next_slot_index = to_free_slot->link;
|
||||
if (next_slot_index >= 0) {
|
||||
// There is another slot in the chain, so copy that over us, so that our inst3 points at something valid
|
||||
// Note this only matters in the exception case anyway, and it that case, we will skip the next handler,
|
||||
@ -365,11 +369,11 @@ void irq_add_tail_to_free_list(struct irq_handler_chain_slot *slot) {
|
||||
irq_handler_t slot_handler = (irq_handler_t) add_thumb_bit(slot);
|
||||
assert(is_shared_irq_raw_handler(slot_handler));
|
||||
|
||||
int exception = __get_current_exception();
|
||||
uint exception = __get_current_exception();
|
||||
assert(exception);
|
||||
spin_lock_t *lock = spin_lock_instance(PICO_SPINLOCK_ID_IRQ);
|
||||
uint32_t save = spin_lock_blocking(lock);
|
||||
int slot_index = slot - irq_handler_chain_slots;
|
||||
int8_t slot_index = get_slot_index(slot);
|
||||
if (slot_handler == get_vtable()[exception]) {
|
||||
get_vtable()[exception] = __unhandled_user_irq;
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user